volatileOffset -= SW_WIDTH;
volatileOffset -= BYTES_IN_STACKSLOT;
  private void restoreValuesFromOptSaveVolatile(byte[] stack,                                                int osrFPoff,                                                OSR_TempRegisters registers,                                                int regmap,                                                VM_CompiledMethod cm) {    VM_OptCompiledMethod tsfromCM = (VM_OptCompiledMethod)cm;        boolean saveVolatile = tsfromCM.isSaveVolatile();    if (VM.VerifyAssertions) {      VM._assert(saveVolatile);    }    // stack word width in bytes.    int SW_WIDTH = 1 << LG_STACKWORD_WIDTH;        WordArray gprs = registers.gprs;          // enter critical section    // precall methods potientially causing dynamic compilation    int firstNonVolatile = tsfromCM.getFirstNonVolatileGPR();    int nonVolatiles     = tsfromCM.getNumberOfNonvolatileGPRs();    int nonVolatileOffset = tsfromCM.getUnsignedNonVolatileOffset() + (nonVolatiles -1)*SW_WIDTH;    VM.disableGC();            // recover nonvolatile GPRs    for (int i = firstNonVolatile + nonVolatiles - 1;             i >= firstNonVolatile;              i--) {      gprs.set(NONVOLATILE_GPRS[i],                VM_Magic.objectAsAddress(stack).add(osrFPoff - nonVolatileOffset).loadWord());      nonVolatileOffset -= SW_WIDTH;    }    // restore with VOLATILES yet    int volatileOffset = nonVolatileOffset;    for (int i = NUM_VOLATILE_GPRS - 1;              i >= 0;             i --) {      gprs.set(VOLATILE_GPRS[i],                VM_Magic.objectAsAddress(stack).add(osrFPoff - volatileOffset).loadWord());      volatileOffset -= SW_WIDTH;    }    // currently, all FPRS are volatile on intel,     // DO nothing.        // convert addresses in registers to references, starting from register 0    // powerPC starts from register 1    for (int i=0; i<NUM_GPRS; i++) {      if (OSR_EncodedOSRMap.registerIsSet(regmap, i)) {        registers.objs[i] =           VM_Magic.addressAsObject(registers.gprs.get(i).toAddress());      }    }        VM.enableGC();    if (VM.TraceOnStackReplacement) {      for (int i=0; i<NUM_GPRS; i++) {        VM.sysWrite(GPR_NAMES[i]);        VM.sysWrite(" : ");        VM.sysWriteHex(registers.gprs.get(i).toAddress());        VM.sysWriteln();      }    }  }  