7630 movptr(rax, buffer.addr());
7631 push(rax);
7632 // call indirectly to solve generation ordering problem
7633 movptr(rax, ExternalAddress(StubRoutines::verify_oop_subroutine_entry_address()));
7634 call(rax);
7635 }
7636
7637
7638 RegisterOrConstant MacroAssembler::delayed_value_impl(intptr_t* delayed_value_addr,
7639 Register tmp,
7640 int offset) {
7641 intptr_t value = *delayed_value_addr;
7642 if (value != 0)
7643 return RegisterOrConstant(value + offset);
7644
7645 // load indirectly to solve generation ordering problem
7646 movptr(tmp, ExternalAddress((address) delayed_value_addr));
7647
7648 #ifdef ASSERT
7649 Label L;
7650 testl(tmp, tmp);
7651 jccb(Assembler::notZero, L);
7652 hlt();
7653 bind(L);
7654 #endif
7655
7656 if (offset != 0)
7657 addptr(tmp, offset);
7658
7659 return RegisterOrConstant(tmp);
7660 }
7661
7662
7663 // registers on entry:
7664 // - rax ('check' register): required MethodType
7665 // - rcx: method handle
7666 // - rdx, rsi, or ?: killable temp
7667 void MacroAssembler::check_method_handle_type(Register mtype_reg, Register mh_reg,
7668 Register temp_reg,
7669 Label& wrong_method_type) {
7670 if (UseCompressedOops) unimplemented(); // field accesses must decode
|
7630 movptr(rax, buffer.addr());
7631 push(rax);
7632 // call indirectly to solve generation ordering problem
7633 movptr(rax, ExternalAddress(StubRoutines::verify_oop_subroutine_entry_address()));
7634 call(rax);
7635 }
7636
7637
7638 RegisterOrConstant MacroAssembler::delayed_value_impl(intptr_t* delayed_value_addr,
7639 Register tmp,
7640 int offset) {
7641 intptr_t value = *delayed_value_addr;
7642 if (value != 0)
7643 return RegisterOrConstant(value + offset);
7644
7645 // load indirectly to solve generation ordering problem
7646 movptr(tmp, ExternalAddress((address) delayed_value_addr));
7647
7648 #ifdef ASSERT
7649 Label L;
7650 testptr(tmp, tmp);
7651 jccb(Assembler::notZero, L);
7652 hlt();
7653 bind(L);
7654 #endif
7655
7656 if (offset != 0)
7657 addptr(tmp, offset);
7658
7659 return RegisterOrConstant(tmp);
7660 }
7661
7662
7663 // registers on entry:
7664 // - rax ('check' register): required MethodType
7665 // - rcx: method handle
7666 // - rdx, rsi, or ?: killable temp
7667 void MacroAssembler::check_method_handle_type(Register mtype_reg, Register mh_reg,
7668 Register temp_reg,
7669 Label& wrong_method_type) {
7670 if (UseCompressedOops) unimplemented(); // field accesses must decode
|