1 /* |
1 /* |
2 * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. |
3 * Copyright 2012, 2013 SAP AG. All rights reserved. |
3 * Copyright 2012, 2014 SAP AG. All rights reserved. |
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
5 * |
5 * |
6 * This code is free software; you can redistribute it and/or modify it |
6 * This code is free software; you can redistribute it and/or modify it |
7 * under the terms of the GNU General Public License version 2 only, as |
7 * under the terms of the GNU General Public License version 2 only, as |
8 * published by the Free Software Foundation. |
8 * published by the Free Software Foundation. |
197 |
193 |
198 inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const { |
194 inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const { |
199 interpreterState istate = get_interpreterState(); |
195 interpreterState istate = get_interpreterState(); |
200 return &istate->_constants; |
196 return &istate->_constants; |
201 } |
197 } |
|
198 |
|
199 #else // !CC_INTERP |
|
200 |
|
201 // Template Interpreter frame value accessors. |
|
202 |
|
203 inline frame::ijava_state* frame::get_ijava_state() const { |
|
204 return (ijava_state*) ((uintptr_t)fp() - ijava_state_size); |
|
205 } |
|
206 |
|
207 inline intptr_t** frame::interpreter_frame_locals_addr() const { |
|
208 return (intptr_t**) &(get_ijava_state()->locals); |
|
209 } |
|
210 inline intptr_t* frame::interpreter_frame_bcx_addr() const { |
|
211 return (intptr_t*) &(get_ijava_state()->bcp); |
|
212 } |
|
213 inline intptr_t* frame::interpreter_frame_mdx_addr() const { |
|
214 return (intptr_t*) &(get_ijava_state()->mdx); |
|
215 } |
|
216 // Pointer beyond the "oldest/deepest" BasicObjectLock on stack. |
|
217 inline BasicObjectLock* frame::interpreter_frame_monitor_end() const { |
|
218 return (BasicObjectLock *) get_ijava_state()->monitors; |
|
219 } |
|
220 |
|
221 inline BasicObjectLock* frame::interpreter_frame_monitor_begin() const { |
|
222 return (BasicObjectLock *) get_ijava_state(); |
|
223 } |
|
224 |
|
225 // SAPJVM ASc 2012-11-21. Return register stack slot addr at which currently interpreted method is found |
|
226 inline Method** frame::interpreter_frame_method_addr() const { |
|
227 return (Method**) &(get_ijava_state()->method); |
|
228 } |
|
229 inline ConstantPoolCache** frame::interpreter_frame_cpoolcache_addr() const { |
|
230 return (ConstantPoolCache**) &(get_ijava_state()->cpoolCache); |
|
231 } |
|
232 inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const { |
|
233 return (ConstantPoolCache**) &(get_ijava_state()->cpoolCache); |
|
234 } |
|
235 |
|
236 inline oop* frame::interpreter_frame_temp_oop_addr() const { |
|
237 return (oop *) &(get_ijava_state()->oop_tmp); |
|
238 } |
|
239 inline intptr_t* frame::interpreter_frame_esp() const { |
|
240 return (intptr_t*) get_ijava_state()->esp; |
|
241 } |
|
242 |
|
243 // Convenient setters |
|
244 inline void frame::interpreter_frame_set_monitor_end(BasicObjectLock* end) { get_ijava_state()->monitors = (intptr_t) end;} |
|
245 inline void frame::interpreter_frame_set_cpcache(ConstantPoolCache* cp) { *frame::interpreter_frame_cpoolcache_addr() = cp; } |
|
246 inline void frame::interpreter_frame_set_esp(intptr_t* esp) { get_ijava_state()->esp = (intptr_t) esp; } |
|
247 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; } |
|
248 inline void frame::interpreter_frame_set_sender_sp(intptr_t* sender_sp) { get_ijava_state()->sender_sp = (intptr_t) sender_sp; } |
|
249 |
|
250 inline intptr_t* frame::interpreter_frame_expression_stack() const { |
|
251 return (intptr_t*)interpreter_frame_monitor_end() - 1; |
|
252 } |
|
253 |
|
254 inline jint frame::interpreter_frame_expression_stack_direction() { |
|
255 return -1; |
|
256 } |
|
257 |
|
258 // top of expression stack |
|
259 inline intptr_t* frame::interpreter_frame_tos_address() const { |
|
260 return ((intptr_t*) get_ijava_state()->esp) + Interpreter::stackElementWords; |
|
261 } |
|
262 |
|
263 inline intptr_t* frame::interpreter_frame_tos_at(jint offset) const { |
|
264 return &interpreter_frame_tos_address()[offset]; |
|
265 } |
|
266 |
202 #endif // CC_INTERP |
267 #endif // CC_INTERP |
203 |
268 |
204 inline int frame::interpreter_frame_monitor_size() { |
269 inline int frame::interpreter_frame_monitor_size() { |
205 // Number of stack slots for a monitor. |
270 // Number of stack slots for a monitor. |
206 return round_to(BasicObjectLock::size(), // number of stack slots |
271 return round_to(BasicObjectLock::size(), // number of stack slots |