348 // or compiled so just be safe use G1 and O0/O1
349
350 // Shift bits into high (msb) of G1
351 __ sllx(Otos_l1->after_save(), 32, G1);
352 // Zero extend low bits
353 __ srl (Otos_l2->after_save(), 0, Otos_l2->after_save());
354 __ or3 (Otos_l2->after_save(), G1, G1);
355 #endif /* COMPILER2 */
356 break;
357 case T_OBJECT :
358 __ ld_ptr(O0, 0, O0->after_save());
359 __ verify_oop(O0->after_save()); // verify it
360 break;
361 default : ShouldNotReachHere();
362 }
363 __ retl();
364 __ delayed()->nop();
365 return entry;
366 }
367
368 address CppInterpreter::return_entry(TosState state, int length) {
369 // make it look good in the debugger
370 return CAST_FROM_FN_PTR(address, RecursiveInterpreterActivation) + frame::pc_return_offset;
371 }
372
373 address CppInterpreter::deopt_entry(TosState state, int length) {
374 address ret = NULL;
375 if (length != 0) {
376 switch (state) {
377 case atos: ret = deopt_frame_manager_return_atos; break;
378 case btos: ret = deopt_frame_manager_return_btos; break;
379 case ctos:
380 case stos:
381 case itos: ret = deopt_frame_manager_return_itos; break;
382 case ltos: ret = deopt_frame_manager_return_ltos; break;
383 case ftos: ret = deopt_frame_manager_return_ftos; break;
384 case dtos: ret = deopt_frame_manager_return_dtos; break;
385 case vtos: ret = deopt_frame_manager_return_vtos; break;
386 }
387 } else {
388 ret = unctrap_frame_manager_entry; // re-execute the bytecode ( e.g. uncommon trap)
|
348 // or compiled so just be safe use G1 and O0/O1
349
350 // Shift bits into high (msb) of G1
351 __ sllx(Otos_l1->after_save(), 32, G1);
352 // Zero extend low bits
353 __ srl (Otos_l2->after_save(), 0, Otos_l2->after_save());
354 __ or3 (Otos_l2->after_save(), G1, G1);
355 #endif /* COMPILER2 */
356 break;
357 case T_OBJECT :
358 __ ld_ptr(O0, 0, O0->after_save());
359 __ verify_oop(O0->after_save()); // verify it
360 break;
361 default : ShouldNotReachHere();
362 }
363 __ retl();
364 __ delayed()->nop();
365 return entry;
366 }
367
368 address CppInterpreter::return_entry(TosState state, int length, Bytecodes::Code code) {
369 // make it look good in the debugger
370 return CAST_FROM_FN_PTR(address, RecursiveInterpreterActivation) + frame::pc_return_offset;
371 }
372
373 address CppInterpreter::deopt_entry(TosState state, int length) {
374 address ret = NULL;
375 if (length != 0) {
376 switch (state) {
377 case atos: ret = deopt_frame_manager_return_atos; break;
378 case btos: ret = deopt_frame_manager_return_btos; break;
379 case ctos:
380 case stos:
381 case itos: ret = deopt_frame_manager_return_itos; break;
382 case ltos: ret = deopt_frame_manager_return_ltos; break;
383 case ftos: ret = deopt_frame_manager_return_ftos; break;
384 case dtos: ret = deopt_frame_manager_return_dtos; break;
385 case vtos: ret = deopt_frame_manager_return_vtos; break;
386 }
387 } else {
388 ret = unctrap_frame_manager_entry; // re-execute the bytecode ( e.g. uncommon trap)
|