< prev index next >

src/hotspot/cpu/aarch64/frame_aarch64.hpp

Print this page

134   // we need to know that value. However in order to compute the address
135   // of the return address we need the real "raw" sp. Since sparc already
136   // uses sp() to mean "raw" sp and unextended_sp() to mean the caller's
137   // original sp we use that convention.
138 
139   union {
140     intptr_t* _unextended_sp;
141     int _offset_unextended_sp; // for use in stack-chunk frames
142   };
143 
144   // true means _sp value is correct and we can use it to get the sender's sp
145   // of the compiled frame, otherwise, _sp value may be invalid and we can use
146   // _fp to get the sender's sp if PreserveFramePointer is enabled.
147   bool _sp_is_trusted;
148 
149   intptr_t* ptr_at_addr(int offset) const {
150     return (intptr_t*) addr_at(offset);
151   }
152 
153  public:





154   // Constructors
155 
156   frame(intptr_t* sp, intptr_t* fp, address pc);
157 
158   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc);
159 
160   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, bool allow_cb_null = false);
161   // used for fast frame construction by continuations
162   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, const ImmutableOopMap* oop_map, bool on_heap);
163 
164   frame(intptr_t* sp, intptr_t* fp);
165 
166   void init(intptr_t* sp, intptr_t* fp, address pc);
167   void setup(address pc);
168 
169   // accessors for the instance variables
170   // Note: not necessarily the real 'frame pointer' (see real_fp)
171   intptr_t*   fp() const        { assert_absolute(); return _fp; }
172   void set_fp(intptr_t* newfp)  { _fp = newfp; }
173   int offset_fp() const         { assert_offset();  return _offset_fp; }

134   // we need to know that value. However in order to compute the address
135   // of the return address we need the real "raw" sp. Since sparc already
136   // uses sp() to mean "raw" sp and unextended_sp() to mean the caller's
137   // original sp we use that convention.
138 
139   union {
140     intptr_t* _unextended_sp;
141     int _offset_unextended_sp; // for use in stack-chunk frames
142   };
143 
144   // true means _sp value is correct and we can use it to get the sender's sp
145   // of the compiled frame, otherwise, _sp value may be invalid and we can use
146   // _fp to get the sender's sp if PreserveFramePointer is enabled.
147   bool _sp_is_trusted;
148 
149   intptr_t* ptr_at_addr(int offset) const {
150     return (intptr_t*) addr_at(offset);
151   }
152 
153  public:
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   static intptr_t* repair_sender_sp(nmethod* nm, intptr_t* sp, intptr_t** saved_fp_addr);
157   bool was_augmented_on_entry(int& real_size) const;
158 
159   // Constructors
160 
161   frame(intptr_t* sp, intptr_t* fp, address pc);
162 
163   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc);
164 
165   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, bool allow_cb_null = false);
166   // used for fast frame construction by continuations
167   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, const ImmutableOopMap* oop_map, bool on_heap);
168 
169   frame(intptr_t* sp, intptr_t* fp);
170 
171   void init(intptr_t* sp, intptr_t* fp, address pc);
172   void setup(address pc);
173 
174   // accessors for the instance variables
175   // Note: not necessarily the real 'frame pointer' (see real_fp)
176   intptr_t*   fp() const        { assert_absolute(); return _fp; }
177   void set_fp(intptr_t* newfp)  { _fp = newfp; }
178   int offset_fp() const         { assert_offset();  return _offset_fp; }
< prev index next >