bridgeRegisterLocation = bridgeRegisterLocation.add(4); return bridgeRegisterLocation.sub(4);
bridgeRegisterLocation = bridgeRegisterLocation.add(BYTES_IN_ADDRESS); return bridgeRegisterLocation.sub(BYTES_IN_ADDRESS);
  public VM_Address getNextReferenceAddress() {    if (mapId < 0)      mapOffset = maps.getNextJSRRef(mapOffset);    else      mapOffset = maps.getNextRef(mapOffset, mapId);    if (VM.TraceStkMaps) {      VM.sysWrite("VM_BaselineGCMapIterator getNextReferenceOffset = ");      VM.sysWrite(mapOffset);      VM.sysWrite(".\n");      if (mapId < 0)         VM.sysWrite("Offset is a JSR return address ie internal pointer.\n");    }    if (mapOffset != 0) {      return (framePtr.add(mapOffset));    } else if (bridgeParameterMappingRequired) {      if (VM.TraceStkMaps) {        VM.sysWrite("getNextReferenceAddress: bridgeTarget="); VM.sysWrite(bridgeTarget); VM.sysWrite("\n");      }      if (!bridgeRegistersLocationUpdated) {        // point registerLocations[] to our callers stackframe        //        VM_Address location = framePtr.add(VM_Compiler.getFrameSize(currentMethod));        location = location.sub((LAST_NONVOLATILE_FPR - FIRST_VOLATILE_FPR + 1) * BYTES_IN_DOUBLE);         // skip non-volatile and volatile fprs        for (int i = LAST_NONVOLATILE_GPR; i >= FIRST_VOLATILE_GPR; --i) {          location = location.sub(BYTES_IN_ADDRESS);          registerLocations.set(i, location);        }        bridgeRegistersLocationUpdated = true;      }      // handle implicit "this" parameter, if any      //      if (bridgeParameterIndex == -1) {        bridgeParameterIndex   += 1;        bridgeRegisterIndex    += 1;        bridgeRegisterLocation = bridgeRegisterLocation.add(4);        return bridgeRegisterLocation.sub(4);      }               // now the remaining parameters      //      while (true) {        if (bridgeParameterIndex == bridgeParameterTypes.length || bridgeRegisterIndex > LAST_VOLATILE_GPR) {          bridgeParameterMappingRequired = false;          break;        }        VM_TypeReference bridgeParameterType = bridgeParameterTypes[bridgeParameterIndex++];        if (bridgeParameterType.isReferenceType()) {          bridgeRegisterIndex    += 1;          bridgeRegisterLocation = bridgeRegisterLocation.add(4);          return bridgeRegisterLocation.sub(4);        } else if (bridgeParameterType.isLongType()) {          bridgeRegisterIndex    += 2;          bridgeRegisterLocation = bridgeRegisterLocation.add(8);        } else if (bridgeParameterType.isDoubleType() || bridgeParameterType.isFloatType()) {          // no gpr's used        } else {          // boolean, byte, char, short, int          bridgeRegisterIndex    += 1;          bridgeRegisterLocation = bridgeRegisterLocation.add(4);        }      }    }          return VM_Address.zero();  }