if (mapId < 0) mapOffset = maps.getNextJSRRef(mapOffset); else mapOffset = maps.getNextRef(mapOffset, mapId);
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) {
   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) * 8); 						// skip non-volatile and volatile fprs            for (int i = LAST_NONVOLATILE_GPR; i >= FIRST_VOLATILE_GPR; --i) {		location = location.sub(4);                registerLocations[i] = location.toInt();	    }            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         //         for (;;) {	     if (bridgeParameterIndex == bridgeParameterTypes.length || bridgeRegisterIndex > LAST_VOLATILE_GPR) {		 bridgeParameterMappingRequired = false;		 break;	     }            VM_Type 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();   }