int lastVoffset = nvArea-2*SW_WIDTH;
int lastVoffset = nvArea;
  private void restoreValuesFromOptSaveVolatile(int[] stack,						int osrFPoff,						OSR_TempRegisters registers,						int regmap,						VM_CompiledMethod cm) {    VM_OptCompiledMethod tsfromCM = (VM_OptCompiledMethod)cm;        int nvArea = osrFPoff + tsfromCM.getUnsignedNonVolatileOffset();    // stack word width in bytes.    int SW_WIDTH = 1 << LG_STACKWORD_WIDTH;        VM_WordArray gprs = registers.gprs;    double[] fprs = registers.fprs;          // temporarialy hold ct, xer, ctr register    int cr = 0;    int xer = 0;    int ctr = 0;    // enter critical section    // precall methods potientially causing dynamic compilation    int firstGPR = tsfromCM.getFirstNonVolatileGPR();    VM.disableGC();	    // recover volatile GPRs.    int lastVoffset = nvArea-2*SW_WIDTH; // skip two empty slots    for (int i=LAST_SCRATCH_GPR;	 i >= FIRST_VOLATILE_GPR;	 i--) {      lastVoffset -= SW_WIDTH;      gprs.set(i, VM_Magic.getMemoryWord(VM_Magic.objectAsAddress(stack).add(lastVoffset)));    }                // recover nonvolatile GPRs    if (firstGPR != -1) {      for (int i=firstGPR;	   i<=LAST_NONVOLATILE_GPR;	   i++) {	gprs.set(i, VM_Magic.getMemoryWord(VM_Magic.objectAsAddress(stack).add(nvArea)));	nvArea += SW_WIDTH;      }    }    // recover CR, XER, and CTR    cr  = VM_Magic.getIntAtOffset(stack, nvArea);    nvArea += SW_WIDTH;    xer = VM_Magic.getIntAtOffset(stack, nvArea);    nvArea += SW_WIDTH;    ctr = VM_Magic.getIntAtOffset(stack, nvArea);    nvArea += SW_WIDTH;    /*    // it should be aligned ready    // it may have a padding before FPRs.    int offset = nvArea - osrFPoff;    offset = (offset + SW_WIDTH) & ~SW_WIDTH;    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 += 2*SW_WIDTH;    }	    // 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;  }