99 intptr_t* bottom = derelativize(frame::interpreter_frame_locals_offset) + 1; // the sender's unextended sp: derelativize(frame::interpreter_frame_sender_sp_offset);
100 return (int)(bottom - top);
101 }
102
103 template <ChunkFrames frame_kind>
104 inline int StackChunkFrameStream<frame_kind>::interpreter_frame_stack_argsize() const {
105 assert_is_interpreted_and_frame_type_mixed();
106 int diff = (int)(derelativize(frame::interpreter_frame_locals_offset) - derelativize(frame::interpreter_frame_sender_sp_offset) + 1);
107 return diff;
108 }
109
110 template <ChunkFrames frame_kind>
111 inline int StackChunkFrameStream<frame_kind>::interpreter_frame_num_oops() const {
112 assert_is_interpreted_and_frame_type_mixed();
113 ResourceMark rm;
114 InterpreterOopMap mask;
115 frame f = to_frame();
116 f.interpreted_frame_oop_map(&mask);
117 return mask.num_oops()
118 + 1 // for the mirror oop
119 + pointer_delta_as_int((intptr_t*)f.interpreter_frame_monitor_begin(),
120 (intptr_t*)f.interpreter_frame_monitor_end())/BasicObjectLock::size();
121 }
122
123 template<>
124 template<>
125 inline void StackChunkFrameStream<ChunkFrames::Mixed>::update_reg_map_pd(RegisterMap* map) {
126 if (map->update_map()) {
127 frame::update_map_with_saved_link(map, map->in_cont() ? (intptr_t**)(intptr_t)frame::sender_sp_offset
128 : (intptr_t**)(_sp - frame::sender_sp_offset));
129 }
130 }
131
132 template<>
133 template<>
134 inline void StackChunkFrameStream<ChunkFrames::CompiledOnly>::update_reg_map_pd(RegisterMap* map) {
135 if (map->update_map()) {
136 frame::update_map_with_saved_link(map, map->in_cont() ? (intptr_t**)(intptr_t)frame::sender_sp_offset
137 : (intptr_t**)(_sp - frame::sender_sp_offset));
138 }
|
99 intptr_t* bottom = derelativize(frame::interpreter_frame_locals_offset) + 1; // the sender's unextended sp: derelativize(frame::interpreter_frame_sender_sp_offset);
100 return (int)(bottom - top);
101 }
102
103 template <ChunkFrames frame_kind>
104 inline int StackChunkFrameStream<frame_kind>::interpreter_frame_stack_argsize() const {
105 assert_is_interpreted_and_frame_type_mixed();
106 int diff = (int)(derelativize(frame::interpreter_frame_locals_offset) - derelativize(frame::interpreter_frame_sender_sp_offset) + 1);
107 return diff;
108 }
109
110 template <ChunkFrames frame_kind>
111 inline int StackChunkFrameStream<frame_kind>::interpreter_frame_num_oops() const {
112 assert_is_interpreted_and_frame_type_mixed();
113 ResourceMark rm;
114 InterpreterOopMap mask;
115 frame f = to_frame();
116 f.interpreted_frame_oop_map(&mask);
117 return mask.num_oops()
118 + 1 // for the mirror oop
119 + (f.interpreter_frame_method()->is_native() ? 1 : 0) // temp oop slot
120 + pointer_delta_as_int((intptr_t*)f.interpreter_frame_monitor_begin(),
121 (intptr_t*)f.interpreter_frame_monitor_end())/BasicObjectLock::size();
122 }
123
124 template<>
125 template<>
126 inline void StackChunkFrameStream<ChunkFrames::Mixed>::update_reg_map_pd(RegisterMap* map) {
127 if (map->update_map()) {
128 frame::update_map_with_saved_link(map, map->in_cont() ? (intptr_t**)(intptr_t)frame::sender_sp_offset
129 : (intptr_t**)(_sp - frame::sender_sp_offset));
130 }
131 }
132
133 template<>
134 template<>
135 inline void StackChunkFrameStream<ChunkFrames::CompiledOnly>::update_reg_map_pd(RegisterMap* map) {
136 if (map->update_map()) {
137 frame::update_map_with_saved_link(map, map->in_cont() ? (intptr_t**)(intptr_t)frame::sender_sp_offset
138 : (intptr_t**)(_sp - frame::sender_sp_offset));
139 }
|