350 break;
351 case T_DOUBLE :
352 __ movptr(rdx, STATE(_stack)); // get top of stack
353 if ( UseSSE > 1) {
354 __ movdbl(xmm0, Address(rdx, wordSize));
355 } else {
356 __ fld_d(Address(rdx, wordSize)); // push double result
357 }
358 break;
359 case T_OBJECT :
360 __ movptr(rdx, STATE(_stack)); // get top of stack
361 __ movptr(rax, Address(rdx, wordSize)); // get result word 1
362 __ verify_oop(rax); // verify it
363 break;
364 default : ShouldNotReachHere();
365 }
366 __ ret(0);
367 return entry;
368 }
369
370 address CppInterpreter::return_entry(TosState state, int length) {
371 // make it look good in the debugger
372 return CAST_FROM_FN_PTR(address, RecursiveInterpreterActivation);
373 }
374
375 address CppInterpreter::deopt_entry(TosState state, int length) {
376 address ret = NULL;
377 if (length != 0) {
378 switch (state) {
379 case atos: ret = deopt_frame_manager_return_atos; break;
380 case btos: ret = deopt_frame_manager_return_btos; break;
381 case ctos:
382 case stos:
383 case itos: ret = deopt_frame_manager_return_itos; break;
384 case ltos: ret = deopt_frame_manager_return_ltos; break;
385 case ftos: ret = deopt_frame_manager_return_ftos; break;
386 case dtos: ret = deopt_frame_manager_return_dtos; break;
387 case vtos: ret = deopt_frame_manager_return_vtos; break;
388 }
389 } else {
390 ret = unctrap_frame_manager_entry; // re-execute the bytecode ( e.g. uncommon trap)
|
350 break;
351 case T_DOUBLE :
352 __ movptr(rdx, STATE(_stack)); // get top of stack
353 if ( UseSSE > 1) {
354 __ movdbl(xmm0, Address(rdx, wordSize));
355 } else {
356 __ fld_d(Address(rdx, wordSize)); // push double result
357 }
358 break;
359 case T_OBJECT :
360 __ movptr(rdx, STATE(_stack)); // get top of stack
361 __ movptr(rax, Address(rdx, wordSize)); // get result word 1
362 __ verify_oop(rax); // verify it
363 break;
364 default : ShouldNotReachHere();
365 }
366 __ ret(0);
367 return entry;
368 }
369
370 address CppInterpreter::return_entry(TosState state, int length, Bytecodes::Code code) {
371 // make it look good in the debugger
372 return CAST_FROM_FN_PTR(address, RecursiveInterpreterActivation);
373 }
374
375 address CppInterpreter::deopt_entry(TosState state, int length) {
376 address ret = NULL;
377 if (length != 0) {
378 switch (state) {
379 case atos: ret = deopt_frame_manager_return_atos; break;
380 case btos: ret = deopt_frame_manager_return_btos; break;
381 case ctos:
382 case stos:
383 case itos: ret = deopt_frame_manager_return_itos; break;
384 case ltos: ret = deopt_frame_manager_return_ltos; break;
385 case ftos: ret = deopt_frame_manager_return_ftos; break;
386 case dtos: ret = deopt_frame_manager_return_dtos; break;
387 case vtos: ret = deopt_frame_manager_return_vtos; break;
388 }
389 } else {
390 ret = unctrap_frame_manager_entry; // re-execute the bytecode ( e.g. uncommon trap)
|