frameSize += numGprNv * WORDSIZE;
frameSize += numGprNv * BYTES_IN_ADDRESS;
  void computeNonVolatileArea() {    OPT_PhysicalRegisterSet phys = ir.regpool.getPhysicalRegisterSet();    if (ir.compiledMethod.isSaveVolatile()) {      // Record that we use every nonvolatile GPR      int numGprNv = phys.getNumberOfNonvolatileGPRs();      ir.compiledMethod.setNumberOfNonvolatileGPRs((short)numGprNv);      // set the frame size      frameSize += numGprNv * WORDSIZE;      int numFprNv = phys.getNumberOfNonvolatileFPRs();      ir.compiledMethod.setNumberOfNonvolatileFPRs((short)numFprNv);      frameSize += numFprNv * WORDSIZE * 2;      frameSize = align(frameSize, STACKFRAME_ALIGNMENT);      // Record that we need a stack frame.      setFrameRequired();      // Map each volatile GPR to a spill location.      int i = 0;      for (Enumeration e = phys.enumerateVolatileGPRs();            e.hasMoreElements(); i++)  {        OPT_Register r = (OPT_Register)e.nextElement();        // Note that as a side effect, the following call bumps up the        // frame size.        saveVolatileGPRLocation[i] = allocateNewSpillLocation(INT_REG);            }      // Map each non-volatile GPR register to a spill location.      i=0;      for (Enumeration e = phys.enumerateNonvolatileGPRs();            e.hasMoreElements(); i++)  {        OPT_Register r = (OPT_Register)e.nextElement();        // Note that as a side effect, the following call bumps up the        // frame size.        nonVolatileGPRLocation[i] = allocateNewSpillLocation(INT_REG);            }            // Map some special registers to spill locations.      saveXERLocation = allocateNewSpillLocation(INT_REG);      saveCTRLocation = allocateNewSpillLocation(INT_REG);      i=0;      for (Enumeration e = phys.enumerateVolatileFPRs();            e.hasMoreElements(); i++)  {        OPT_Register r = (OPT_Register)e.nextElement();        // Note that as a side effect, the following call bumps up the        // frame size.        saveVolatileFPRLocation[i] = allocateNewSpillLocation(DOUBLE_REG);            }      // Set the offset to find non-volatiles.      int gprOffset = getNonvolatileGPROffset(0);      ir.compiledMethod.setUnsignedNonVolatileOffset(gprOffset);    } else {      // Count the number of nonvolatiles used.       int numGprNv = 0;      int i = 0;      for (Enumeration e = phys.enumerateNonvolatileGPRs();           e.hasMoreElements(); ) {        OPT_Register r = (OPT_Register)e.nextElement();        if (r.isTouched() ) {          // Note that as a side effect, the following call bumps up the          // frame size.          nonVolatileGPRLocation[i++] = allocateNewSpillLocation(INT_REG);          numGprNv++;        }      }      i = 0;      int numFprNv = 0;      for (Enumeration e = phys.enumerateNonvolatileFPRs();           e.hasMoreElements(); ) {        OPT_Register r = (OPT_Register)e.nextElement();        if (r.isTouched() ) {          // Note that as a side effect, the following call bumps up the          // frame size.          nonVolatileFPRLocation[i++] = allocateNewSpillLocation(DOUBLE_REG);          numFprNv++;        }      }      // Update the VM_OptCompiledMethod object.      ir.compiledMethod.setNumberOfNonvolatileGPRs((short)numGprNv);      ir.compiledMethod.setNumberOfNonvolatileFPRs((short)numFprNv);      if (numGprNv > 0 || numFprNv > 0) {        int gprOffset = getNonvolatileGPROffset(0);        ir.compiledMethod.setUnsignedNonVolatileOffset(gprOffset);        // record that we need a stack frame        setFrameRequired();      } else {        ir.compiledMethod.setUnsignedNonVolatileOffset(0);      }      frameSize = align(frameSize, STACKFRAME_ALIGNMENT);    }  }