< prev index next >

src/hotspot/cpu/aarch64/abstractInterpreter_aarch64.cpp

Print this page
*** 121,13 ***
    // The frame interpreter_frame is guaranteed to be the right size,
    // as determined by a previous call to the size_activation() method.
    // It is also guaranteed to be walkable even though it is in a
    // skeletal state
  
!   int max_locals = method->max_locals() * Interpreter::stackElementWords;
!   int extra_locals = (method->max_locals() - method->size_of_parameters()) *
!     Interpreter::stackElementWords;
  
  #ifdef ASSERT
    assert(caller->sp() == interpreter_frame->sender_sp(), "Frame not properly walkable");
  #endif
  
--- 121,13 ---
    // The frame interpreter_frame is guaranteed to be the right size,
    // as determined by a previous call to the size_activation() method.
    // It is also guaranteed to be walkable even though it is in a
    // skeletal state
  
!   const int max_locals = method->max_locals() * Interpreter::stackElementWords;
!   const int params = method->size_of_parameters() * Interpreter::stackElementWords;
!   const int extra_locals = max_locals - params;
  
  #ifdef ASSERT
    assert(caller->sp() == interpreter_frame->sender_sp(), "Frame not properly walkable");
  #endif
  

*** 142,16 ***
    // may be a gap between the locals block and the saved sender SP. For
    // an interpreted caller we need to recreate this gap and exactly
    // align the incoming parameters with the caller's temporary
    // expression stack. For other types of caller frame it doesn't
    // matter.
!   intptr_t* locals;
!   if (caller->is_interpreted_frame()) {
!     locals = caller->interpreter_frame_last_sp() + caller_actual_parameters - 1;
-   } else {
-     locals = interpreter_frame->sender_sp() + max_locals - 1;
-   }
  
  #ifdef ASSERT
    if (caller->is_interpreted_frame()) {
      assert(locals < caller->fp() + frame::interpreter_frame_initial_sp_offset, "bad placement");
    }
--- 142,13 ---
    // may be a gap between the locals block and the saved sender SP. For
    // an interpreted caller we need to recreate this gap and exactly
    // align the incoming parameters with the caller's temporary
    // expression stack. For other types of caller frame it doesn't
    // matter.
!   intptr_t* const locals = caller->is_interpreted_frame()
!     ? caller->interpreter_frame_last_sp() + caller_actual_parameters - 1
!     : interpreter_frame->sender_sp() + max_locals - 1;
  
  #ifdef ASSERT
    if (caller->is_interpreted_frame()) {
      assert(locals < caller->fp() + frame::interpreter_frame_initial_sp_offset, "bad placement");
    }

*** 169,16 ***
    interpreter_frame->interpreter_frame_set_last_sp(esp);
  
    // All frames but the initial (oldest) interpreter frame we fill in have
    // a value for sender_sp that allows walking the stack but isn't
    // truly correct. Correct the value here.
!   if (extra_locals != 0 &&
!       interpreter_frame->sender_sp() ==
-       interpreter_frame->interpreter_frame_sender_sp()) {
-     interpreter_frame->set_interpreter_frame_sender_sp(caller->sp() +
-                                                        extra_locals);
    }
!   *interpreter_frame->interpreter_frame_cache_addr() =
!     method->constants()->cache();
!   *interpreter_frame->interpreter_frame_mirror_addr() =
-     method->method_holder()->java_mirror();
  }
--- 166,12 ---
    interpreter_frame->interpreter_frame_set_last_sp(esp);
  
    // All frames but the initial (oldest) interpreter frame we fill in have
    // a value for sender_sp that allows walking the stack but isn't
    // truly correct. Correct the value here.
!   if (extra_locals != 0 && interpreter_frame->sender_sp() == interpreter_frame->interpreter_frame_sender_sp()) {
!     interpreter_frame->set_interpreter_frame_sender_sp(caller->sp() + extra_locals);
    }
! 
!   *interpreter_frame->interpreter_frame_cache_addr()  = method->constants()->cache();
!   *interpreter_frame->interpreter_frame_mirror_addr() = method->method_holder()->java_mirror();
  }
< prev index next >