134 // of the return address we need the real "raw" sp. Since sparc already
135 // uses sp() to mean "raw" sp and unextended_sp() to mean the caller's
136 // original sp we use that convention.
137
138 union {
139 intptr_t* _unextended_sp;
140 int _offset_unextended_sp; // for use in stack-chunk frames
141 };
142
143 void adjust_unextended_sp() NOT_DEBUG_RETURN;
144
145 // true means _sp value is correct and we can use it to get the sender's sp
146 // of the compiled frame, otherwise, _sp value may be invalid and we can use
147 // _fp to get the sender's sp if PreserveFramePointer is enabled.
148 bool _sp_is_trusted;
149
150 intptr_t* ptr_at_addr(int offset) const {
151 return (intptr_t*) addr_at(offset);
152 }
153
154 #ifdef ASSERT
155 // Used in frame::sender_for_{interpreter,compiled}_frame
156 static void verify_deopt_original_pc(nmethod* nm, intptr_t* unextended_sp);
157 #endif
158
159 public:
160 // Constructors
161
162 frame(intptr_t* sp, intptr_t* fp, address pc);
163
164 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc);
165
166 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, bool allow_cb_null = false);
167 // used for fast frame construction by continuations
168 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, const ImmutableOopMap* oop_map, bool on_heap);
169
170 frame(intptr_t* sp, intptr_t* fp);
171
172 void init(intptr_t* sp, intptr_t* fp, address pc);
173 void setup(address pc);
|
134 // of the return address we need the real "raw" sp. Since sparc already
135 // uses sp() to mean "raw" sp and unextended_sp() to mean the caller's
136 // original sp we use that convention.
137
138 union {
139 intptr_t* _unextended_sp;
140 int _offset_unextended_sp; // for use in stack-chunk frames
141 };
142
143 void adjust_unextended_sp() NOT_DEBUG_RETURN;
144
145 // true means _sp value is correct and we can use it to get the sender's sp
146 // of the compiled frame, otherwise, _sp value may be invalid and we can use
147 // _fp to get the sender's sp if PreserveFramePointer is enabled.
148 bool _sp_is_trusted;
149
150 intptr_t* ptr_at_addr(int offset) const {
151 return (intptr_t*) addr_at(offset);
152 }
153
154 // Support for scalarized inline type calling convention
155 intptr_t* repair_sender_sp(intptr_t* sender_sp, intptr_t** saved_fp_addr) const;
156
157 #ifdef ASSERT
158 // Used in frame::sender_for_{interpreter,compiled}_frame
159 static void verify_deopt_original_pc(nmethod* nm, intptr_t* unextended_sp);
160 #endif
161
162 public:
163 // Constructors
164
165 frame(intptr_t* sp, intptr_t* fp, address pc);
166
167 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc);
168
169 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, bool allow_cb_null = false);
170 // used for fast frame construction by continuations
171 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, const ImmutableOopMap* oop_map, bool on_heap);
172
173 frame(intptr_t* sp, intptr_t* fp);
174
175 void init(intptr_t* sp, intptr_t* fp, address pc);
176 void setup(address pc);
|