asm.emitLInt   (T0, VM_ObjectModel.getArrayLengthOffset(), T1);
asm.emitLInt   (T0, VM_ObjectModel.getArrayLengthOffset().toInt(), T1);
  private static VM_CodeArray generateReflectiveMethodInvokerInstructions() {    VM_Assembler asm = new VM_Assembler(0);          //    // free registers: 0, S0    //    asm.emitMFLR(0);                                         // save...    asm.emitSTAddr (0, STACKFRAME_NEXT_INSTRUCTION_OFFSET, FP); // ...return address          asm.emitMTCTR(T0);                          // CTR := start of method code          //    // free registers: 0, S0, T0    //          // create new frame    //    asm.emitMR    (S0,  FP);                  // S0 := old frame pointer    asm.emitLInt  (T0, VM_ObjectModel.getArrayLengthOffset(), T3); // T0 := number of spill words    asm.emitADDI  (T3, -BYTES_IN_ADDRESS, T3);                  // T3 -= 4 (predecrement, ie. T3 + 4 is &spill[0] )    int spillLoopLabel = asm.getMachineCodeIndex();    asm.emitADDICr  (T0, T0, -1);                  // T0 -= 1 (and set CR)    VM_ForwardReference fr1 = asm.emitForwardBC(LT); // if T0 < 0 then break    asm.emitLAddrU   (0,   BYTES_IN_ADDRESS, T3);                  // R0 := *(T3 += 4)    asm.emitSTAddrU  (0,  -BYTES_IN_ADDRESS, FP);                  // put one word of spill area    asm.emitB    (spillLoopLabel); // goto spillLoop:    fr1.resolve(asm);          asm.emitSTAddrU  (S0, -STACKFRAME_HEADER_SIZE, FP);     // allocate frame header and save old fp    asm.emitLVAL (T0, INVISIBLE_METHOD_ID);    asm.emitSTW  (T0, STACKFRAME_METHOD_ID_OFFSET, FP); // set method id    //    // free registers: 0, S0, T0, T3    //          // load up fprs    //    VM_ForwardReference setupFPRLoader = asm.emitForwardBL();    FPRLoader:    for (int i = LAST_VOLATILE_FPR; i >= FIRST_VOLATILE_FPR; --i)      asm.emitLFDU(i, BYTES_IN_DOUBLE, T2);                 // FPRi := fprs[i]             //    // free registers: 0, S0, T0, T2, T3    //          // load up gprs    //    VM_ForwardReference setupGPRLoader = asm.emitForwardBL();    GPRLoader:    for (int i = LAST_VOLATILE_GPR; i >= FIRST_VOLATILE_GPR; --i)      asm.emitLAddrU  (i, BYTES_IN_ADDRESS, S0);                 // GPRi := gprs[i]          //    // free registers: 0, S0    //          // invoke method    //    asm.emitBCCTRL();                            // branch and link to method code    // emit method epilog    //    asm.emitLAddr(FP,  0, FP);                                    // restore caller's frame    asm.emitLAddr (S0,  STACKFRAME_NEXT_INSTRUCTION_OFFSET, FP);   // pick up return address    asm.emitMTLR (S0);                                            //    asm.emitBCLR();                                                // return to caller    setupFPRLoader.resolve(asm);    asm.emitMFLR (T3);                          // T3 := address of first fpr load instruction    asm.emitLInt  (T0, VM_ObjectModel.getArrayLengthOffset(), T2); // T0 := number of fprs to be loaded    asm.emitADDI  (T3, VOLATILE_FPRS<<LG_INSTRUCTION_WIDTH,    T3); // T3 := address of first instruction following fpr loads    asm.emitSLWI  (T0, T0, LG_INSTRUCTION_WIDTH); // T0 := number of bytes of fpr load instructions    asm.emitSUBFC   (T3, T0, T3);                // T3 := address of instruction for highest numbered fpr to be loaded    asm.emitMTLR (T3);                           // LR := """    asm.emitADDI  (T2, -BYTES_IN_DOUBLE, T2);    // predecrement fpr index (to prepare for update instruction)    asm.emitBCLR  ();                            // branch to fpr loading instructions    setupGPRLoader.resolve(asm);    asm.emitMFLR (T3);                          // T3 := address of first gpr load instruction    asm.emitLInt   (T0, VM_ObjectModel.getArrayLengthOffset(), T1); // T0 := number of gprs to be loaded    asm.emitADDI  (T3, VOLATILE_GPRS<<LG_INSTRUCTION_WIDTH,    T3); // T3 := address of first instruction following gpr loads    asm.emitSLWI  (T0, T0, LG_INSTRUCTION_WIDTH); // T0 := number of bytes of gpr load instructions    asm.emitSUBFC   (T3, T0,T3);                  // T3 := address of instruction for highest numbered gpr to be loaded    asm.emitMTLR (T3);                          // LR := """    asm.emitADDI  (S0, -BYTES_IN_ADDRESS, T1);   // predecrement gpr index (to prepare for update instruction)    asm.emitBCLR  ();                            // branch to gpr loading instructions         return asm.makeMachineCode().getInstructions();  }