165 intptr_t* _fp; // frame pointer
166 int _offset_fp; // relative frame pointer for use in stack-chunk frames
167 };
168 // The interpreter and adapters will extend the frame of the caller.
169 // Since oopMaps are based on the sp of the caller before extension
170 // we need to know that value. However in order to compute the address
171 // of the return address we need the real "raw" sp. Since sparc already
172 // uses sp() to mean "raw" sp and unextended_sp() to mean the caller's
173 // original sp we use that convention.
174
175 union {
176 intptr_t* _unextended_sp;
177 int _offset_unextended_sp; // for use in stack-chunk frames
178 };
179
180 intptr_t* ptr_at_addr(int offset) const {
181 return (intptr_t*) addr_at(offset);
182 }
183
184 public:
185 // Constructors
186
187 frame(intptr_t* ptr_sp, intptr_t* ptr_fp, address pc);
188
189 frame(intptr_t* ptr_sp, intptr_t* unextended_sp, intptr_t* ptr_fp, address pc);
190
191 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb);
192 // used for fast frame construction by continuations
193 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, const ImmutableOopMap* oop_map, bool on_heap);
194
195 frame(intptr_t* ptr_sp, intptr_t* ptr_fp);
196
197 void init(intptr_t* ptr_sp, intptr_t* ptr_fp, address pc);
198 void setup(address pc);
199
200 // accessors for the instance variables
201 // Note: not necessarily the real 'frame pointer' (see real_fp)
202
203 intptr_t* fp() const { assert_absolute(); return _fp; }
204 void set_fp(intptr_t* newfp) { _fp = newfp; }
|
165 intptr_t* _fp; // frame pointer
166 int _offset_fp; // relative frame pointer for use in stack-chunk frames
167 };
168 // The interpreter and adapters will extend the frame of the caller.
169 // Since oopMaps are based on the sp of the caller before extension
170 // we need to know that value. However in order to compute the address
171 // of the return address we need the real "raw" sp. Since sparc already
172 // uses sp() to mean "raw" sp and unextended_sp() to mean the caller's
173 // original sp we use that convention.
174
175 union {
176 intptr_t* _unextended_sp;
177 int _offset_unextended_sp; // for use in stack-chunk frames
178 };
179
180 intptr_t* ptr_at_addr(int offset) const {
181 return (intptr_t*) addr_at(offset);
182 }
183
184 public:
185 // Support for scalarized inline type calling convention
186 static intptr_t* repair_sender_sp(nmethod* nm, intptr_t* sp, intptr_t** saved_fp_addr);
187 bool was_augmented_on_entry(int& real_size) const;
188
189 // Constructors
190
191 frame(intptr_t* ptr_sp, intptr_t* ptr_fp, address pc);
192
193 frame(intptr_t* ptr_sp, intptr_t* unextended_sp, intptr_t* ptr_fp, address pc);
194
195 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb);
196 // used for fast frame construction by continuations
197 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, const ImmutableOopMap* oop_map, bool on_heap);
198
199 frame(intptr_t* ptr_sp, intptr_t* ptr_fp);
200
201 void init(intptr_t* ptr_sp, intptr_t* ptr_fp, address pc);
202 void setup(address pc);
203
204 // accessors for the instance variables
205 // Note: not necessarily the real 'frame pointer' (see real_fp)
206
207 intptr_t* fp() const { assert_absolute(); return _fp; }
208 void set_fp(intptr_t* newfp) { _fp = newfp; }
|