247 // Set R15_prev_state to 0 for simplifying checks in callee.
248 __ load_const_optimized(R25_templateTableBase, (address)Interpreter::dispatch_table((TosState)0), R11_scratch1);
249 // Stack on entry to frame manager / native entry:
250 //
251 // F0 [TOP_IJAVA_FRAME_ABI]
252 // alignment (optional)
253 // [outgoing Java arguments]
254 // [ENTRY_FRAME_LOCALS]
255 // F1 [C_FRAME]
256 // ...
257 //
258
259 // global toc register
260 __ load_const_optimized(R29_TOC, MacroAssembler::global_toc(), R11_scratch1);
261 // Remember the senderSP so we interpreter can pop c2i arguments off of the stack
262 // when called via a c2i.
263
264 // Pass initial_caller_sp to framemanager.
265 __ mr(R21_tmp1, R1_SP);
266
267 // Do a light-weight C-call here, r_new_arg_entry holds the address
268 // of the interpreter entry point (frame manager or native entry)
269 // and save runtime-value of LR in return_address.
270 assert(r_new_arg_entry != tos && r_new_arg_entry != R19_method && r_new_arg_entry != R16_thread,
271 "trashed r_new_arg_entry");
272 return_address = __ call_stub(r_new_arg_entry);
273 }
274
275 {
276 BLOCK_COMMENT("Returned from frame manager or native entry.");
277 // Returned from frame manager or native entry.
278 // Now pop frame, process result, and return to caller.
279
280 // Stack on exit from frame manager / native entry:
281 //
282 // F0 [ABI]
283 // ...
284 // [ENTRY_FRAME_LOCALS]
285 // F1 [C_FRAME]
286 // ...
|
247 // Set R15_prev_state to 0 for simplifying checks in callee.
248 __ load_const_optimized(R25_templateTableBase, (address)Interpreter::dispatch_table((TosState)0), R11_scratch1);
249 // Stack on entry to frame manager / native entry:
250 //
251 // F0 [TOP_IJAVA_FRAME_ABI]
252 // alignment (optional)
253 // [outgoing Java arguments]
254 // [ENTRY_FRAME_LOCALS]
255 // F1 [C_FRAME]
256 // ...
257 //
258
259 // global toc register
260 __ load_const_optimized(R29_TOC, MacroAssembler::global_toc(), R11_scratch1);
261 // Remember the senderSP so we interpreter can pop c2i arguments off of the stack
262 // when called via a c2i.
263
264 // Pass initial_caller_sp to framemanager.
265 __ mr(R21_tmp1, R1_SP);
266
267 // Zero the register that caches zero (optimization)
268 __ li(R30_zero, 0);
269
270 // Do a light-weight C-call here, r_new_arg_entry holds the address
271 // of the interpreter entry point (frame manager or native entry)
272 // and save runtime-value of LR in return_address.
273 assert(r_new_arg_entry != tos && r_new_arg_entry != R19_method && r_new_arg_entry != R16_thread,
274 "trashed r_new_arg_entry");
275 return_address = __ call_stub(r_new_arg_entry);
276 }
277
278 {
279 BLOCK_COMMENT("Returned from frame manager or native entry.");
280 // Returned from frame manager or native entry.
281 // Now pop frame, process result, and return to caller.
282
283 // Stack on exit from frame manager / native entry:
284 //
285 // F0 [ABI]
286 // ...
287 // [ENTRY_FRAME_LOCALS]
288 // F1 [C_FRAME]
289 // ...
|