< prev index next >

src/hotspot/share/c1/c1_FrameMap.cpp

Print this page
*** 185,18 ***
    }
  
  }
  
  
! bool FrameMap::finalize_frame(int nof_slots) {
    assert(nof_slots >= 0, "must be positive");
    assert(_num_spills == -1, "can only be set once");
    _num_spills = nof_slots;
    assert(_framesize == -1, "should only be calculated once");
    _framesize =  align_up(in_bytes(sp_offset_for_monitor_base(0)) +
                           _num_monitors * (int)sizeof(BasicObjectLock) +
!                          (int)sizeof(intptr_t) +                        // offset of deopt orig pc
                           frame_pad_in_bytes,
                           StackAlignmentInBytes) / 4;
    int java_index = 0;
    for (int i = 0; i < _incoming_arguments->length(); i++) {
      LIR_Opr opr = _incoming_arguments->at(i);
--- 185,19 ---
    }
  
  }
  
  
! bool FrameMap::finalize_frame(int nof_slots, bool needs_stack_repair) {
    assert(nof_slots >= 0, "must be positive");
    assert(_num_spills == -1, "can only be set once");
    _num_spills = nof_slots;
    assert(_framesize == -1, "should only be calculated once");
    _framesize =  align_up(in_bytes(sp_offset_for_monitor_base(0)) +
                           _num_monitors * (int)sizeof(BasicObjectLock) +
!                          (int)sizeof(intptr_t) +                             // offset of deopt orig pc
+                          (needs_stack_repair ? (int)sizeof(intptr_t) : 0) +  // stack increment value
                           frame_pad_in_bytes,
                           StackAlignmentInBytes) / 4;
    int java_index = 0;
    for (int i = 0; i < _incoming_arguments->length(); i++) {
      LIR_Opr opr = _incoming_arguments->at(i);
< prev index next >