< prev index next >

src/hotspot/cpu/x86/frame_x86.hpp

Print this page

122     intptr_t*  _fp; // frame pointer
123     int _offset_fp; // relative frame pointer for use in stack-chunk frames
124   };
125   // The interpreter and adapters will extend the frame of the caller.
126   // Since oopMaps are based on the sp of the caller before extension
127   // we need to know that value. However in order to compute the address
128   // of the return address we need the real "raw" sp. By convention we
129   // use sp() to mean "raw" sp and unextended_sp() to mean the caller's
130   // original sp.
131 
132   union {
133     intptr_t* _unextended_sp;
134     int _offset_unextended_sp; // for use in stack-chunk frames
135   };
136 
137   intptr_t* ptr_at_addr(int offset) const {
138     return (intptr_t*) addr_at(offset);
139   }
140 
141  public:





142   // Constructors
143 
144   frame(intptr_t* sp, intptr_t* fp, address pc);
145 
146   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc);
147 
148   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb);
149   // used for heap frame construction by continuations
150   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, const ImmutableOopMap* oop_map, bool relative);
151 
152   frame(intptr_t* sp, intptr_t* fp);
153 
154   void init(intptr_t* sp, intptr_t* fp, address pc);
155   void setup(address pc);
156 
157   // accessors for the instance variables
158   // Note: not necessarily the real 'frame pointer' (see real_fp)
159   intptr_t* fp() const          { assert_absolute(); return _fp; }
160   void set_fp(intptr_t* newfp)  { _fp = newfp; }
161   int offset_fp() const         { assert_offset();  return _offset_fp; }

122     intptr_t*  _fp; // frame pointer
123     int _offset_fp; // relative frame pointer for use in stack-chunk frames
124   };
125   // The interpreter and adapters will extend the frame of the caller.
126   // Since oopMaps are based on the sp of the caller before extension
127   // we need to know that value. However in order to compute the address
128   // of the return address we need the real "raw" sp. By convention we
129   // use sp() to mean "raw" sp and unextended_sp() to mean the caller's
130   // original sp.
131 
132   union {
133     intptr_t* _unextended_sp;
134     int _offset_unextended_sp; // for use in stack-chunk frames
135   };
136 
137   intptr_t* ptr_at_addr(int offset) const {
138     return (intptr_t*) addr_at(offset);
139   }
140 
141  public:
142   // Support for scalarized inline type calling convention
143   intptr_t* repair_sender_sp(intptr_t* sender_sp, intptr_t** saved_fp_addr) const;
144   static intptr_t* repair_sender_sp(nmethod* nm, intptr_t* sp, intptr_t** saved_fp_addr);
145   bool was_augmented_on_entry(int& real_size) const;
146 
147   // Constructors
148 
149   frame(intptr_t* sp, intptr_t* fp, address pc);
150 
151   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc);
152 
153   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb);
154   // used for heap frame construction by continuations
155   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, const ImmutableOopMap* oop_map, bool relative);
156 
157   frame(intptr_t* sp, intptr_t* fp);
158 
159   void init(intptr_t* sp, intptr_t* fp, address pc);
160   void setup(address pc);
161 
162   // accessors for the instance variables
163   // Note: not necessarily the real 'frame pointer' (see real_fp)
164   intptr_t* fp() const          { assert_absolute(); return _fp; }
165   void set_fp(intptr_t* newfp)  { _fp = newfp; }
166   int offset_fp() const         { assert_offset();  return _offset_fp; }
< prev index next >