+\end{code}
+
+\begin{code}
+W_
+PackGA (pe, slot)
+ W_ pe;
+ int slot;
+{
+ int pe_shift = (BITS_IN(W_)*3)/4;
+ int pe_bits = BITS_IN(W_) - pe_shift;
+
+ if ( pe_bits < 8 || slot >= (1L << pe_shift) ) { /* big trouble */
+ fflush(stdout);
+ fprintf(stderr, "PackGA: slot# too big (%d) or not enough pe_bits (%d)\n",slot,pe_bits);
+ EXIT(EXIT_FAILURE);
+ }
+
+ return((((W_)(pe)) << pe_shift) | ((W_)(slot)));
+
+ /* the idea is to use 3/4 of the bits (e.g., 24) for indirection-
+ table "slot", and 1/4 for the pe# (e.g., 8).
+
+ We check for too many bits in "slot", and double-check (at
+ compile-time?) that we have enough bits for "pe". We *don't*
+ check for too many bits in "pe", because SysMan enforces a
+ MAX_PEs limit at the very very beginning.
+
+ Phil & Will 95/08
+ */
+}