示例#1
0
oop* compiled_vframe::register_contents_addr(Location r) {
    if (!isInFrame(r) 
        && (RecompilationInProgress || ConversionInProgress ||
            currentProcess->isUncommon())) {
        return special_register_contents_addr(r);
      }
  return (oop*) fr->location_addr(r, rl);
}
示例#2
0
int32 spOffset(Location reg, fint totalFrameSize) {
    // return offset (in bytes) off of sp
    if (isRegister(reg)) {
        assert(isInFrame(reg), "can't access this register");
        return (first_register_offset - StackFromRegister[reg]) * oopSize;
    }
    else if (isStackRegister(reg)) {
        return (totalFrameSize + local_slots_offset + StackLocations - reg)
               * oopSize;
    } else if (isExtraArgRegister(reg)) {
        return (extra_arg_offset + ExtraArgLocations - reg) * oopSize;
    } else {
        assert(isExtraIArgRegister(reg), "not a stack register");
        // reg is <= ExtraIArgLocations, arg_bottom_offset is from sp
        return (totalFrameSize + arg_bottom_offset + ExtraIArgLocations - reg) * oopSize;
    }
}