int numSlotsToSkip = FIRST_NONVOLATILE_GPR - FIRST_VOLATILE_GPR; VM_Address location = nonVolArea.sub(BYTES_IN_ADDRESS * numSlotsToSkip);
VM_Address location = nonVolArea.sub(SAVE_VOL_SIZE);
  void updateLocateRegisters() {    //  HIGH MEMORY    //    //    +------------------+                                               //    |  NVolGPR[n]      |    //    |     ...          |   k == info.getFirstNonVolatileGPR()          //    |  NVolGPR[k]      |  <-- info.getUnsignedNonVolatileOffset()          //    +------------------+                                               //    |  ScratchGPR[LAST]|                                               //    |     ...          |     only SaveVolatile Frames                  //    | ScratchGPR[FIRST]|                                               //    +------------------+                                               //    |  VolGPR[LAST]    |                                               //    |     ...          |     only SaveVolatile Frames                  //    |  VolGPR[FIRST]   |                                               //    +------------------+                                               //    //  LOW MEMORY        int frameOffset = compiledMethod.getUnsignedNonVolatileOffset();    if (frameOffset >= 0) {      // get to the nonVol area      VM_Address nonVolArea = framePtr.add(frameOffset);            // update non-volatiles that were saved      int first = compiledMethod.getFirstNonVolatileGPR();      if (first >= 0) {	// move to the beginning of the save area for nonvolatiles	VM_Address location = nonVolArea;	for (int i = first; i <= LAST_GCMAP_REG; i++) {	  registerLocations.set(i, location);	  location = location.add(BYTES_IN_ADDRESS);	}      }            // update volatiles if needed      if (compiledMethod.isSaveVolatile()) {	// move to the beginning of the save area for volatiles	int numSlotsToSkip = FIRST_NONVOLATILE_GPR - FIRST_VOLATILE_GPR;	VM_Address location = nonVolArea.sub(BYTES_IN_ADDRESS * numSlotsToSkip);		// Walk the saved volatiles, updating registerLocations array	for (int i = FIRST_VOLATILE_GPR; i <= LAST_VOLATILE_GPR; i++) {	  registerLocations.set(i, location);	  location = location.add(BYTES_IN_ADDRESS);	}		// Walk the saved scratch, updating registerLocations array	for (int i = FIRST_SCRATCH_GPR; i <= LAST_SCRATCH_GPR; i++) {	  registerLocations.set(i, location);	  location = location.add(BYTES_IN_ADDRESS);	}      }    }  }