113 }
114
115 // All frames have this field.
116 inline intptr_t* frame::link() const {
117 return (intptr_t*)callers_abi()->callers_sp;
118 }
119
120 inline intptr_t* frame::real_fp() const {
121 return fp();
122 }
123
124 // Template Interpreter frame value accessors.
125
126 inline frame::ijava_state* frame::get_ijava_state() const {
127 return (ijava_state*) ((uintptr_t)fp() - ijava_state_size);
128 }
129
130 inline intptr_t** frame::interpreter_frame_locals_addr() const {
131 return (intptr_t**) &(get_ijava_state()->locals);
132 }
133 inline intptr_t* frame::interpreter_frame_bcp_addr() const {
134 return (intptr_t*) &(get_ijava_state()->bcp);
135 }
136 inline intptr_t* frame::interpreter_frame_mdp_addr() const {
137 return (intptr_t*) &(get_ijava_state()->mdx);
138 }
139 // Pointer beyond the "oldest/deepest" BasicObjectLock on stack.
140 inline BasicObjectLock* frame::interpreter_frame_monitor_end() const {
141 return (BasicObjectLock *) get_ijava_state()->monitors;
142 }
143
144 inline BasicObjectLock* frame::interpreter_frame_monitor_begin() const {
145 return (BasicObjectLock *) get_ijava_state();
146 }
147
148 // Return register stack slot addr at which currently interpreted method is found.
149 inline Method** frame::interpreter_frame_method_addr() const {
150 return (Method**) &(get_ijava_state()->method);
151 }
152
153 inline oop* frame::interpreter_frame_mirror_addr() const {
154 return (oop*) &(get_ijava_state()->mirror);
155 }
156
157 inline ConstantPoolCache** frame::interpreter_frame_cpoolcache_addr() const {
158 return (ConstantPoolCache**) &(get_ijava_state()->cpoolCache);
159 }
160 inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const {
161 return (ConstantPoolCache**) &(get_ijava_state()->cpoolCache);
162 }
163
164 inline oop* frame::interpreter_frame_temp_oop_addr() const {
165 return (oop *) &(get_ijava_state()->oop_tmp);
166 }
167 inline intptr_t* frame::interpreter_frame_esp() const {
168 return (intptr_t*) get_ijava_state()->esp;
169 }
170
171 // Convenient setters
172 inline void frame::interpreter_frame_set_monitor_end(BasicObjectLock* end) { get_ijava_state()->monitors = (intptr_t) end;}
173 inline void frame::interpreter_frame_set_cpcache(ConstantPoolCache* cp) { *frame::interpreter_frame_cpoolcache_addr() = cp; }
174 inline void frame::interpreter_frame_set_esp(intptr_t* esp) { get_ijava_state()->esp = (intptr_t) esp; }
175 inline void frame::interpreter_frame_set_top_frame_sp(intptr_t* top_frame_sp) { get_ijava_state()->top_frame_sp = (intptr_t) top_frame_sp; }
176 inline void frame::interpreter_frame_set_sender_sp(intptr_t* sender_sp) { get_ijava_state()->sender_sp = (intptr_t) sender_sp; }
177
178 inline intptr_t* frame::interpreter_frame_expression_stack() const {
179 return (intptr_t*)interpreter_frame_monitor_end() - 1;
180 }
181
182 // top of expression stack
183 inline intptr_t* frame::interpreter_frame_tos_address() const {
184 return ((intptr_t*) get_ijava_state()->esp) + Interpreter::stackElementWords;
185 }
186
187 inline intptr_t* frame::interpreter_frame_tos_at(jint offset) const {
188 return &interpreter_frame_tos_address()[offset];
189 }
190
191 inline int frame::interpreter_frame_monitor_size() {
192 // Number of stack slots for a monitor.
193 return align_up(BasicObjectLock::size(), // number of stack slots
|
113 }
114
115 // All frames have this field.
116 inline intptr_t* frame::link() const {
117 return (intptr_t*)callers_abi()->callers_sp;
118 }
119
120 inline intptr_t* frame::real_fp() const {
121 return fp();
122 }
123
124 // Template Interpreter frame value accessors.
125
126 inline frame::ijava_state* frame::get_ijava_state() const {
127 return (ijava_state*) ((uintptr_t)fp() - ijava_state_size);
128 }
129
130 inline intptr_t** frame::interpreter_frame_locals_addr() const {
131 return (intptr_t**) &(get_ijava_state()->locals);
132 }
133
134 inline intptr_t* frame::interpreter_frame_bcp_addr() const {
135 return (intptr_t*) &(get_ijava_state()->bcp);
136 }
137
138 inline intptr_t* frame::interpreter_frame_mdp_addr() const {
139 return (intptr_t*) &(get_ijava_state()->mdx);
140 }
141
142 // Pointer beyond the "oldest/deepest" BasicObjectLock on stack.
143 inline BasicObjectLock* frame::interpreter_frame_monitor_end() const {
144 return (BasicObjectLock*) get_ijava_state()->monitors;
145 }
146
147 inline BasicObjectLock* frame::interpreter_frame_monitor_begin() const {
148 return (BasicObjectLock*) get_ijava_state();
149 }
150
151 // Return register stack slot addr at which currently interpreted method is found.
152 inline Method** frame::interpreter_frame_method_addr() const {
153 return (Method**) &(get_ijava_state()->method);
154 }
155
156 inline oop* frame::interpreter_frame_mirror_addr() const {
157 return (oop*) &(get_ijava_state()->mirror);
158 }
159
160 inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const {
161 return (ConstantPoolCache**) &(get_ijava_state()->cpoolCache);
162 }
163
164 inline oop* frame::interpreter_frame_temp_oop_addr() const {
165 return (oop*) &(get_ijava_state()->oop_tmp);
166 }
167
168 inline intptr_t* frame::interpreter_frame_esp() const {
169 return (intptr_t*) get_ijava_state()->esp;
170 }
171
172 // Convenient setters
173 inline void frame::interpreter_frame_set_monitor_end(BasicObjectLock* end) { get_ijava_state()->monitors = (intptr_t) end;}
174 inline void frame::interpreter_frame_set_cpcache(ConstantPoolCache* cp) { *interpreter_frame_cache_addr() = cp; }
175 inline void frame::interpreter_frame_set_esp(intptr_t* esp) { get_ijava_state()->esp = (intptr_t) esp; }
176 inline void frame::interpreter_frame_set_top_frame_sp(intptr_t* top_frame_sp) { get_ijava_state()->top_frame_sp = (intptr_t) top_frame_sp; }
177 inline void frame::interpreter_frame_set_sender_sp(intptr_t* sender_sp) { get_ijava_state()->sender_sp = (intptr_t) sender_sp; }
178
179 inline intptr_t* frame::interpreter_frame_expression_stack() const {
180 return (intptr_t*)interpreter_frame_monitor_end() - 1;
181 }
182
183 // top of expression stack
184 inline intptr_t* frame::interpreter_frame_tos_address() const {
185 return ((intptr_t*) get_ijava_state()->esp) + Interpreter::stackElementWords;
186 }
187
188 inline intptr_t* frame::interpreter_frame_tos_at(jint offset) const {
189 return &interpreter_frame_tos_address()[offset];
190 }
191
192 inline int frame::interpreter_frame_monitor_size() {
193 // Number of stack slots for a monitor.
194 return align_up(BasicObjectLock::size(), // number of stack slots
|