+#elif defined(alpha_TARGET_ARCH)
+ /* Magic constant computed by inspecting the code length of
+ the following assembly language snippet
+ (offset and machine code prefixed; note that the machine code
+ shown is longwords stored in little-endian order):
+
+ <00>: a61b0010 ldq a0, 0x10(pv) # load up hptr
+ <04>: a77b0018 ldq pv, 0x18(pv) # load up wptr
+ <08>: 6bfbabcd jmp (pv), 0xabcd # jump to wptr (with hint)
+ <0c>: 47ff041f nop # padding for alignment
+ <10>: [8 bytes for hptr quadword]
+ <18>: [8 bytes for wptr quadword]
+
+ The "computed" jump at <08> above is really a jump to a fixed
+ location. Accordingly, we place an always-correct hint in the
+ jump instruction, namely the address offset from <0c> to wptr,
+ divided by 4, taking the lowest 14 bits.
+
+TODO: Depending on how much allocation overhead stgMallocBytes uses for
+ header information (more precisely, if the overhead is no more than
+ 4 bytes), we should move the first three instructions above down by
+ 4 bytes (getting rid of the nop), hence saving memory. [ccshan]
+ */
+ ASSERT(((StgWord64)wptr & 3) == 0);
+ if ((adjustor = stgMallocBytes(32, "createAdjustor")) != NULL) {
+ StgWord64 *const code = (StgWord64 *)adjustor;