< prev index next >

src/hotspot/cpu/aarch64/stackChunkFrameStream_aarch64.inline.hpp

Print this page
*** 105,22 ***
    assert_is_interpreted_and_frame_type_mixed();
    int diff = (int)(derelativize(frame::interpreter_frame_locals_offset) - derelativize(frame::interpreter_frame_sender_sp_offset) + 1);
    return diff;
  }
  
  template <ChunkFrames frame_kind>
! inline int StackChunkFrameStream<frame_kind>::interpreter_frame_num_oops() const {
    assert_is_interpreted_and_frame_type_mixed();
    ResourceMark rm;
-   InterpreterOopMap mask;
    frame f = to_frame();
!   f.interpreted_frame_oop_map(&mask);
!   return  mask.num_oops()
!         + 1 // for the mirror oop
-         + (f.interpreter_frame_method()->is_native() ? 1 : 0) // temp oop slot
-         + pointer_delta_as_int((intptr_t*)f.interpreter_frame_monitor_begin(),
-               (intptr_t*)f.interpreter_frame_monitor_end())/BasicObjectLock::size();
  }
  
  template<>
  template<>
  inline void StackChunkFrameStream<ChunkFrames::Mixed>::update_reg_map_pd(RegisterMap* map) {
--- 105,28 ---
    assert_is_interpreted_and_frame_type_mixed();
    int diff = (int)(derelativize(frame::interpreter_frame_locals_offset) - derelativize(frame::interpreter_frame_sender_sp_offset) + 1);
    return diff;
  }
  
+ class InterpreterOopCount : public OopClosure {
+   int _count;
+ public:
+   InterpreterOopCount() : _count(0) {}
+   void do_oop(oop* p) override { _count++; }
+   void do_oop(narrowOop* p) override { _count++; }
+   int count() { return _count; }
+ };
+ 
  template <ChunkFrames frame_kind>
! template <typename RegisterMapT>
+ inline int StackChunkFrameStream<frame_kind>::interpreter_frame_num_oops(RegisterMapT* map) const {
    assert_is_interpreted_and_frame_type_mixed();
    ResourceMark rm;
    frame f = to_frame();
!   InterpreterOopCount closure;
!   f.oops_interpreted_do(&closure, map, false);
!   return closure.count();
  }
  
  template<>
  template<>
  inline void StackChunkFrameStream<ChunkFrames::Mixed>::update_reg_map_pd(RegisterMap* map) {
< prev index next >