119 interpreter_frame_last_sp_offset = interpreter_frame_sender_sp_offset - 1,
120 interpreter_frame_method_offset = interpreter_frame_last_sp_offset - 1,
121 interpreter_frame_mdp_offset = interpreter_frame_method_offset - 1,
122 interpreter_frame_cache_offset = interpreter_frame_mdp_offset - 1,
123 interpreter_frame_locals_offset = interpreter_frame_cache_offset - 1,
124 interpreter_frame_bcp_offset = interpreter_frame_locals_offset - 1,
125 interpreter_frame_initial_sp_offset = interpreter_frame_bcp_offset - 1,
126
127 interpreter_frame_monitor_block_top_offset = interpreter_frame_initial_sp_offset,
128 interpreter_frame_monitor_block_bottom_offset = interpreter_frame_initial_sp_offset,
129
130 #endif // CC_INTERP
131
132 // Entry frames
133 // n.b. these values are determined by the layout defined in
134 // stubGenerator for the Java call stub
135 entry_frame_after_call_words = 27,
136 entry_frame_call_wrapper_offset = -8,
137
138 // we don't need a save area
139 arg_reg_save_area_bytes = 0,
140
141 // TODO - check that this is still correct
142 // Native frames
143
144 native_frame_initial_param_offset = 2
145
146 };
147
148 intptr_t ptr_at(int offset) const {
149 return *ptr_at_addr(offset);
150 }
151
152 void ptr_at_put(int offset, intptr_t value) {
153 *ptr_at_addr(offset) = value;
154 }
155
156 private:
157 // an additional field beyond _sp and _pc:
158 intptr_t* _fp; // frame pointer
159 // The interpreter and adapters will extend the frame of the caller.
160 // Since oopMaps are based on the sp of the caller before extension
161 // we need to know that value. However in order to compute the address
162 // of the return address we need the real "raw" sp. Since sparc already
163 // uses sp() to mean "raw" sp and unextended_sp() to mean the caller's
164 // original sp we use that convention.
177 verify_deopt_original_pc(nm, unextended_sp, true);
178 }
179 #endif
180
181 public:
182 // Constructors
183
184 frame(intptr_t* sp, intptr_t* fp, address pc);
185
186 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc);
187
188 frame(intptr_t* sp, intptr_t* fp);
189
190 void init(intptr_t* sp, intptr_t* fp, address pc);
191
192 // accessors for the instance variables
193 // Note: not necessarily the real 'frame pointer' (see real_fp)
194 intptr_t* fp() const { return _fp; }
195
196 inline address* sender_pc_addr() const;
197
198 // return address of param, zero origin index.
199 inline address* native_param_addr(int idx) const;
200
201 // expression stack tos if we are nested in a java call
202 intptr_t* interpreter_frame_last_sp() const;
203
204 // helper to update a map with callee-saved RBP
205 static void update_map_with_saved_link(RegisterMap* map, intptr_t** link_addr);
206
207 #ifndef CC_INTERP
208 // deoptimization support
209 void interpreter_frame_set_last_sp(intptr_t* sp);
210 #endif // CC_INTERP
211
212 #ifdef CC_INTERP
213 inline interpreterState get_interpreterState() const;
214 #endif // CC_INTERP
215
216 #endif // CPU_AARCH64_VM_FRAME_AARCH64_HPP
|
119 interpreter_frame_last_sp_offset = interpreter_frame_sender_sp_offset - 1,
120 interpreter_frame_method_offset = interpreter_frame_last_sp_offset - 1,
121 interpreter_frame_mdp_offset = interpreter_frame_method_offset - 1,
122 interpreter_frame_cache_offset = interpreter_frame_mdp_offset - 1,
123 interpreter_frame_locals_offset = interpreter_frame_cache_offset - 1,
124 interpreter_frame_bcp_offset = interpreter_frame_locals_offset - 1,
125 interpreter_frame_initial_sp_offset = interpreter_frame_bcp_offset - 1,
126
127 interpreter_frame_monitor_block_top_offset = interpreter_frame_initial_sp_offset,
128 interpreter_frame_monitor_block_bottom_offset = interpreter_frame_initial_sp_offset,
129
130 #endif // CC_INTERP
131
132 // Entry frames
133 // n.b. these values are determined by the layout defined in
134 // stubGenerator for the Java call stub
135 entry_frame_after_call_words = 27,
136 entry_frame_call_wrapper_offset = -8,
137
138 // we don't need a save area
139 arg_reg_save_area_bytes = 0
140
141 };
142
143 intptr_t ptr_at(int offset) const {
144 return *ptr_at_addr(offset);
145 }
146
147 void ptr_at_put(int offset, intptr_t value) {
148 *ptr_at_addr(offset) = value;
149 }
150
151 private:
152 // an additional field beyond _sp and _pc:
153 intptr_t* _fp; // frame pointer
154 // The interpreter and adapters will extend the frame of the caller.
155 // Since oopMaps are based on the sp of the caller before extension
156 // we need to know that value. However in order to compute the address
157 // of the return address we need the real "raw" sp. Since sparc already
158 // uses sp() to mean "raw" sp and unextended_sp() to mean the caller's
159 // original sp we use that convention.
172 verify_deopt_original_pc(nm, unextended_sp, true);
173 }
174 #endif
175
176 public:
177 // Constructors
178
179 frame(intptr_t* sp, intptr_t* fp, address pc);
180
181 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc);
182
183 frame(intptr_t* sp, intptr_t* fp);
184
185 void init(intptr_t* sp, intptr_t* fp, address pc);
186
187 // accessors for the instance variables
188 // Note: not necessarily the real 'frame pointer' (see real_fp)
189 intptr_t* fp() const { return _fp; }
190
191 inline address* sender_pc_addr() const;
192
193 // expression stack tos if we are nested in a java call
194 intptr_t* interpreter_frame_last_sp() const;
195
196 // helper to update a map with callee-saved RBP
197 static void update_map_with_saved_link(RegisterMap* map, intptr_t** link_addr);
198
199 #ifndef CC_INTERP
200 // deoptimization support
201 void interpreter_frame_set_last_sp(intptr_t* sp);
202 #endif // CC_INTERP
203
204 #ifdef CC_INTERP
205 inline interpreterState get_interpreterState() const;
206 #endif // CC_INTERP
207
208 #endif // CPU_AARCH64_VM_FRAME_AARCH64_HPP
|