< prev index next >

src/cpu/x86/vm/sharedRuntime_x86_64.cpp

Print this page




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   }


< prev index next >