Exemplo n.º 1
0
oop* dummy_vframe::register_contents_addr(Location r) {
  const bool traceRCA = false;
  oop* old_result = NULL;
  if (isIArgRegister(r)) {
    // the nameDesc specifies an i register, but the actual contents are
    // in saved_outregs
    old_result = &saved_outregs[r - I0];
  } else if (isExtraIArgRegister(r)) {
    // extra incoming args are ok, too
    old_result = compiled_vframe::register_contents_addr(r);
  }
  else
    ShouldNotReachHere(); // shouldn't ask dummy vframe for this register
  
  if (!SaveOutgoingArgumentsOfPatchedFrames)
    return old_result;
    
  fint i = incoming_arg_index(r);
  assert(i + 1  <  OutgoingArgsOfReturnTrapOrRecompileFrame->length(), "bounds");
  oop* argp = OutgoingArgsOfReturnTrapOrRecompileFrame->objs(i + 1);
  assert((*argp)->verify(), "checking arg");
  if (traceRCA)
    lprintf("***** vframe::register_contents_addr i = %d,  old_result = 0x%x,  argp = 0x%x\n",
            i, *old_result, *argp);
  assert(*argp == *old_result, "checking old vs. new");
  return argp;
}
Exemplo n.º 2
0
int32 fpOffset_abstract(Location reg, fint frameSize) {
    // return offset (in bytes) off of fp
    if (isStackRegister(reg)) {
        return (local_slots_offset + StackLocations - reg) * oopSize;
    } else if (isExtraArgRegister(reg)) {
        return (local_slots_offset - frameSize + ExtraArgLocations - reg + 1)
               * oopSize;
    } else {
        assert(isExtraIArgRegister(reg), "not a stack register");
        return (arg_bottom_offset + ExtraIArgLocations - reg) * oopSize;
    }
}
Exemplo n.º 3
0
const char *locationName(Location l) {
  Location base;
  int num;
  if          (isStackRegister(l)) { base= StackLocations;     num= l - base; }
  else if  (isExtraArgRegister(l)) { base= ExtraArgLocations;  num= base - l; }
  else if (isExtraIArgRegister(l)) { base= ExtraIArgLocations; num= base - l; }
  else {
    assert(isRegister(l) || l == AnyLocation || l == AnyRegister ||
           l == UnAllocated || l == Temp || l == StackTemp ||
           l == DataRegister || l == AddressRegister, "unexpected location");
    return RegisterNames[l];
  }
  return locationNameHelper(base, num);
}
Exemplo n.º 4
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;
    }
}
Exemplo n.º 5
0
void compiled_vframe::get_search_locations_for_liveness_check(NameDesc* n, frame*& fr_to_search, RegisterLocator*& rl_to_search) {
  // these guys are in caller frame in SPARC
  fr_to_search = isExtraIArgRegister(n->location()) ? fr->sender() : fr;
  rl_to_search = isExtraIArgRegister(n->location()) ? rl->sender() : rl;
}