registers.gprs[i] = VM_Magic.getMemoryWord(fp.add(frameOffset));
registers.gprs[i] = VM_Magic.getMemoryInt(fp.add(frameOffset));
  public void unwindStackFrame(VM_CompiledMethod cm, VM_Registers registers) {    VM_Address fp = registers.getInnermostFramePointer();    VM_OptCompiledMethod compiledMethod = (VM_OptCompiledMethod)cm;    // restore non-volatile registers    int frameOffset = compiledMethod.getUnsignedNonVolatileOffset();    int firstInteger = compiledMethod.getFirstNonVolatileGPR();    if (firstInteger >= 0) {      for (int i = firstInteger; i < 32; i++) {	registers.gprs[i] = VM_Magic.getMemoryWord(fp.add(frameOffset));	frameOffset += 4;      }    }    int firstFloat = compiledMethod.getFirstNonVolatileFPR();    if (firstFloat >= 0) {      frameOffset = (frameOffset + 7) & ~7;  // align pointer for doubles      for (int i = firstFloat; i < 32; i++) {	long temp = VM_Magic.getLongAtOffset(VM_Magic.addressAsObject(fp), frameOffset);	registers.fprs[i] = VM_Magic.longBitsAsDouble(temp);	frameOffset += 8;      }    }    registers.unwindStackFrame();  }