astoreSetup(-1);
  protected final void emit_aastore() {    asm.emitLWZtoc(T0,  VM_Entrypoints.checkstoreMethod.getOffset());    asm.emitMTCTR(T0);    asm.emitLWZ  (T0,  8, SP);  //  T0 := arrayref    asm.emitLWZ  (T1,  0, SP);  //  T1 := value    asm.emitCall(spSaveAreaOffset);   // checkstore(arrayref, value)    if (MM_Interface.NEEDS_WRITE_BARRIER) {      VM_Barriers.compileArrayStoreBarrier(asm, spSaveAreaOffset);      asm.emitADDI (SP, 12, SP);  // complete 3 pops    } else {      astoreSetup(-1);	// NOT (dfb): following 4 lines plus emitTWLLE seem redundant and possibly bogus      asm.emitLWZ  (T1,  8, SP);                    // T1 is array ref      asm.emitLWZ  (T0,  4, SP);                    // T0 is array index      asm.emitLWZ  (T2,  VM_ObjectModel.getArrayLengthOffset(), T1);  // T2 is array length      asm.emitLWZ  (T3,  0, SP);                    // T3 is value to store      asm.emitTWLLE(T2, T0);      // trap if index < 0 or index >= length      asm.emitSLWI (T0, T0,  2);  // convert word index to byte index      asm.emitSTWX (T3, T0, T1);  // store ref value in array      asm.emitADDI (SP, 12, SP);  // complete 3 pops    }  }