1723 const VMRegPair* regs) {
1724 Register temp_reg = rbx; // not part of any compiled calling seq
1725 if (VerifyOops) {
1726 for (int i = 0; i < method->size_of_parameters(); i++) {
1727 if (sig_bt[i] == T_OBJECT ||
1728 sig_bt[i] == T_ARRAY) {
1729 VMReg r = regs[i].first();
1730 assert(r->is_valid(), "bad oop arg");
1731 if (r->is_stack()) {
1732 __ movptr(temp_reg, Address(rsp, r->reg2stack() * VMRegImpl::stack_slot_size + wordSize));
1733 __ verify_oop(temp_reg);
1734 } else {
1735 __ verify_oop(r->as_Register());
1736 }
1737 }
1738 }
1739 }
1740 }
1741
1742 static void gen_special_dispatch(MacroAssembler* masm,
1743 methodHandle method,
1744 const BasicType* sig_bt,
1745 const VMRegPair* regs) {
1746 verify_oop_args(masm, method, sig_bt, regs);
1747 vmIntrinsics::ID iid = method->intrinsic_id();
1748
1749 // Now write the args into the outgoing interpreter space
1750 bool has_receiver = false;
1751 Register receiver_reg = noreg;
1752 int member_arg_pos = -1;
1753 Register member_reg = noreg;
1754 int ref_kind = MethodHandles::signature_polymorphic_intrinsic_ref_kind(iid);
1755 if (ref_kind != 0) {
1756 member_arg_pos = method->size_of_parameters() - 1; // trailing MemberName argument
1757 member_reg = rbx; // known to be free at this point
1758 has_receiver = MethodHandles::ref_kind_has_receiver(ref_kind);
1759 } else if (iid == vmIntrinsics::_invokeBasic) {
1760 has_receiver = true;
1761 } else {
1762 fatal("unexpected intrinsic id %d", iid);
1763 }
|
1723 const VMRegPair* regs) {
1724 Register temp_reg = rbx; // not part of any compiled calling seq
1725 if (VerifyOops) {
1726 for (int i = 0; i < method->size_of_parameters(); i++) {
1727 if (sig_bt[i] == T_OBJECT ||
1728 sig_bt[i] == T_ARRAY) {
1729 VMReg r = regs[i].first();
1730 assert(r->is_valid(), "bad oop arg");
1731 if (r->is_stack()) {
1732 __ movptr(temp_reg, Address(rsp, r->reg2stack() * VMRegImpl::stack_slot_size + wordSize));
1733 __ verify_oop(temp_reg);
1734 } else {
1735 __ verify_oop(r->as_Register());
1736 }
1737 }
1738 }
1739 }
1740 }
1741
1742 static void gen_special_dispatch(MacroAssembler* masm,
1743 const methodHandle& method,
1744 const BasicType* sig_bt,
1745 const VMRegPair* regs) {
1746 verify_oop_args(masm, method, sig_bt, regs);
1747 vmIntrinsics::ID iid = method->intrinsic_id();
1748
1749 // Now write the args into the outgoing interpreter space
1750 bool has_receiver = false;
1751 Register receiver_reg = noreg;
1752 int member_arg_pos = -1;
1753 Register member_reg = noreg;
1754 int ref_kind = MethodHandles::signature_polymorphic_intrinsic_ref_kind(iid);
1755 if (ref_kind != 0) {
1756 member_arg_pos = method->size_of_parameters() - 1; // trailing MemberName argument
1757 member_reg = rbx; // known to be free at this point
1758 has_receiver = MethodHandles::ref_kind_has_receiver(ref_kind);
1759 } else if (iid == vmIntrinsics::_invokeBasic) {
1760 has_receiver = true;
1761 } else {
1762 fatal("unexpected intrinsic id %d", iid);
1763 }
|