int osrFPoff,
Offset osrFPoff,
  private void restoreValuesFromOptSaveVolatile(byte[] stack,                                                int osrFPoff,                                                OSR_TempRegisters registers,                                                int regmap,                                                VM_CompiledMethod cm) {    VM_OptCompiledMethod tsfromCM = (VM_OptCompiledMethod)cm;        int nvArea = osrFPoff + tsfromCM.getUnsignedNonVolatileOffset();        WordArray gprs = registers.gprs;    double[] fprs = registers.fprs;          // temporarialy hold ct, xer, ctr register    int cr = 0;    int xer = 0;    Word ctr = Word.zero();    // enter critical section    // precall methods potientially causing dynamic compilation    int firstGPR = tsfromCM.getFirstNonVolatileGPR();    VM.disableGC();            // recover volatile GPRs.    int lastVoffset = nvArea;     for (int i=LAST_SCRATCH_GPR;         i >= FIRST_VOLATILE_GPR;         i--) {      lastVoffset -= BYTES_IN_STACKSLOT;      gprs.set(i, VM_Magic.objectAsAddress(stack).add(lastVoffset).loadWord());    }                // recover nonvolatile GPRs    if (firstGPR != -1) {      for (int i=firstGPR;           i<=LAST_NONVOLATILE_GPR;           i++) {        gprs.set(i, VM_Magic.objectAsAddress(stack).add(nvArea).loadWord());        nvArea += BYTES_IN_STACKSLOT;      }    }    // recover CR, XER, and CTR    cr  = VM_Magic.getIntAtOffset(stack, nvArea);    nvArea += BYTES_IN_STACKSLOT;    xer = VM_Magic.getIntAtOffset(stack, nvArea);    nvArea += BYTES_IN_STACKSLOT;    ctr = VM_Magic.getWordAtOffset(stack, nvArea);    nvArea += BYTES_IN_STACKSLOT;    /*    // it should be aligned ready    // it may have a padding before FPRs.    int offset = nvArea - osrFPoff;    offset = (offset + BYTES_IN_STACKSLOT) & ~BYTES_IN_STACKSLOT;    nvArea = osrFPoff + offset;    */    // recover all volatile FPRs    for (int i=FIRST_SCRATCH_FPR;         i <= LAST_VOLATILE_FPR;         i++) {      long lbits = VM_Magic.getLongAtOffset(stack, nvArea);      fprs[i] = VM_Magic.longBitsAsDouble(lbits);      nvArea += BYTES_IN_DOUBLE;    }       // convert addresses in registers to references     for (int i=1; i<NUM_GPRS; i++) {      if (OSR_EncodedOSRMap.registerIsSet(regmap, i)) {        registers.objs[i] =           VM_Magic.addressAsObject(registers.gprs.get(i).toAddress());      }    }        VM.enableGC();    registers.cr = cr;    registers.xer = xer;    registers.ctr = ctr;  }