lastSpill = framePtr.add(nonVolOffset - 4);
lastSpill = framePtr.add(nonVolOffset - BYTES_IN_ADDRESS);
  VM_Address getLastSpillLoc() {    if (DEBUG) {      VM.sysWrite("\n unsigendNVOffset: ");      VM.sysWrite(compiledMethod.getUnsignedNonVolatileOffset());      VM.sysWrite("\t isSaveVolatile: ");      if (compiledMethod.isSaveVolatile()) {        VM.sysWrite("true");      } else {        VM.sysWrite("false");      }      VM.sysWrite("\nLAST_VOLATILE_GPR: ");      VM.sysWrite(LAST_VOLATILE_GPR);      VM.sysWrite("\tFIRST_VOLATILE_GPR: ");      VM.sysWrite(LAST_VOLATILE_GPR);      VM.sysWrite("\nLAST_SCRATCH_GPR: ");      VM.sysWrite(LAST_SCRATCH_GPR);      VM.sysWrite("\tFIRST_SCRATCH_GPR: ");      VM.sysWrite(LAST_SCRATCH_GPR);      VM.sysWrite("\nSAVE_VOL_SIZE: ");      VM.sysWrite(SAVE_VOL_SIZE);      VM.sysWrite("\n");    }    // This computation will include some locations that are not technically    // spill locations.  We do this because we currently do not record     // enough info in the VM_OptCompiledMethod object (the one that is available    // at GC time) to distinguish the lower part of the spill.    VM_Address firstSpill = getFirstSpillLoc();    VM_Address lastSpill;    int nonVolOffset = compiledMethod.getUnsignedNonVolatileOffset();    if (nonVolOffset != 0) {      if (compiledMethod.isSaveVolatile()) {        lastSpill = framePtr.add(nonVolOffset - 4 - SAVE_VOL_SIZE);      } else {        lastSpill = framePtr.add(nonVolOffset - 4);      }      // If the above computation is less than firstSpill, there are no spills      if (lastSpill.LT(firstSpill)) {        lastSpill = firstSpill;      }    } else {      // If nonVolOffset = 0, there are no spills      lastSpill = firstSpill;    }    return lastSpill;  }