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; }
|