2597 __ dispatch_only(vtos, true);
2598
2599 // default case -> j = default offset
2600 __ bind(default_case);
2601 __ profile_switch_default(i);
2602 __ movl(j, Address(array, -2 * BytesPerInt));
2603 __ bswapl(j);
2604 LP64_ONLY(__ movslq(j, j));
2605
2606 NOT_LP64(__ restore_bcp());
2607 NOT_LP64(__ restore_locals());
2608
2609 __ load_unsigned_byte(rbx, Address(rbcp, j, Address::times_1));
2610 __ addptr(rbcp, j);
2611 __ dispatch_only(vtos, true);
2612 }
2613
2614 void TemplateTable::_return(TosState state) {
2615 transition(state, state);
2616
2617 assert(_desc->calls_vm(),
2618 "inconsistent calls_vm information"); // call in remove_activation
2619
2620 if (_desc->bytecode() == Bytecodes::_return_register_finalizer) {
2621 assert(state == vtos, "only valid state");
2622 Register robj = LP64_ONLY(c_rarg1) NOT_LP64(rax);
2623 __ movptr(robj, aaddress(0));
2624 __ load_klass(rdi, robj);
2625 __ movl(rdi, Address(rdi, Klass::access_flags_offset()));
2626 __ testl(rdi, JVM_ACC_HAS_FINALIZER);
2627 Label skip_register_finalizer;
2628 __ jcc(Assembler::zero, skip_register_finalizer);
2629
2630 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::register_finalizer), robj);
2631
2632 __ bind(skip_register_finalizer);
2633 }
2634
2635 if (SafepointMechanism::uses_thread_local_poll() && _desc->bytecode() != Bytecodes::_return_register_finalizer) {
2636 Label no_safepoint;
|
2597 __ dispatch_only(vtos, true);
2598
2599 // default case -> j = default offset
2600 __ bind(default_case);
2601 __ profile_switch_default(i);
2602 __ movl(j, Address(array, -2 * BytesPerInt));
2603 __ bswapl(j);
2604 LP64_ONLY(__ movslq(j, j));
2605
2606 NOT_LP64(__ restore_bcp());
2607 NOT_LP64(__ restore_locals());
2608
2609 __ load_unsigned_byte(rbx, Address(rbcp, j, Address::times_1));
2610 __ addptr(rbcp, j);
2611 __ dispatch_only(vtos, true);
2612 }
2613
2614 void TemplateTable::_return(TosState state) {
2615 transition(state, state);
2616
2617 // {
2618 // Label not_rb;
2619 // Register aa = rcx, bb = rdi;
2620 // __ movptr(aa, Address(rsp, 0));
2621 // __ lea(bb, ExternalAddress(StubRoutines::cont_returnBarrier()));
2622 // __ cmpq(aa, bb);
2623 // // __ cmpq(ExternalAddress(StubRoutines::cont_returnBarrier()).addr(), aa);
2624 // __ jcc(Assembler::notZero, not_rb);
2625 // __ stop("WQWWQWQW");
2626 // __ bind(not_rb);
2627 // }
2628 assert(_desc->calls_vm(),
2629 "inconsistent calls_vm information"); // call in remove_activation
2630
2631 if (_desc->bytecode() == Bytecodes::_return_register_finalizer) {
2632 assert(state == vtos, "only valid state");
2633 Register robj = LP64_ONLY(c_rarg1) NOT_LP64(rax);
2634 __ movptr(robj, aaddress(0));
2635 __ load_klass(rdi, robj);
2636 __ movl(rdi, Address(rdi, Klass::access_flags_offset()));
2637 __ testl(rdi, JVM_ACC_HAS_FINALIZER);
2638 Label skip_register_finalizer;
2639 __ jcc(Assembler::zero, skip_register_finalizer);
2640
2641 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::register_finalizer), robj);
2642
2643 __ bind(skip_register_finalizer);
2644 }
2645
2646 if (SafepointMechanism::uses_thread_local_poll() && _desc->bytecode() != Bytecodes::_return_register_finalizer) {
2647 Label no_safepoint;
|