< prev index next >

src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp

Print this page
rev 8979 : [mq]: vmerr_static


1177 static void gen_special_dispatch(MacroAssembler* masm,
1178                                  methodHandle method,
1179                                  const BasicType* sig_bt,
1180                                  const VMRegPair* regs) {
1181   verify_oop_args(masm, method, sig_bt, regs);
1182   vmIntrinsics::ID iid = method->intrinsic_id();
1183 
1184   // Now write the args into the outgoing interpreter space
1185   bool     has_receiver   = false;
1186   Register receiver_reg   = noreg;
1187   int      member_arg_pos = -1;
1188   Register member_reg     = noreg;
1189   int      ref_kind       = MethodHandles::signature_polymorphic_intrinsic_ref_kind(iid);
1190   if (ref_kind != 0) {
1191     member_arg_pos = method->size_of_parameters() - 1;  // trailing MemberName argument
1192     member_reg = r19;  // known to be free at this point
1193     has_receiver = MethodHandles::ref_kind_has_receiver(ref_kind);
1194   } else if (iid == vmIntrinsics::_invokeBasic) {
1195     has_receiver = true;
1196   } else {
1197     fatal(err_msg_res("unexpected intrinsic id %d", iid));
1198   }
1199 
1200   if (member_reg != noreg) {
1201     // Load the member_arg into register, if necessary.
1202     SharedRuntime::check_member_name_argument_is_last_argument(method, sig_bt, regs);
1203     VMReg r = regs[member_arg_pos].first();
1204     if (r->is_stack()) {
1205       __ ldr(member_reg, Address(sp, r->reg2stack() * VMRegImpl::stack_slot_size));
1206     } else {
1207       // no data motion is needed
1208       member_reg = r->as_Register();
1209     }
1210   }
1211 
1212   if (has_receiver) {
1213     // Make sure the receiver is loaded into a register.
1214     assert(method->size_of_parameters() > 0, "oob");
1215     assert(sig_bt[0] == T_OBJECT, "receiver argument must be an object");
1216     VMReg r = regs[0].first();
1217     assert(r->is_valid(), "bad receiver arg");




1177 static void gen_special_dispatch(MacroAssembler* masm,
1178                                  methodHandle method,
1179                                  const BasicType* sig_bt,
1180                                  const VMRegPair* regs) {
1181   verify_oop_args(masm, method, sig_bt, regs);
1182   vmIntrinsics::ID iid = method->intrinsic_id();
1183 
1184   // Now write the args into the outgoing interpreter space
1185   bool     has_receiver   = false;
1186   Register receiver_reg   = noreg;
1187   int      member_arg_pos = -1;
1188   Register member_reg     = noreg;
1189   int      ref_kind       = MethodHandles::signature_polymorphic_intrinsic_ref_kind(iid);
1190   if (ref_kind != 0) {
1191     member_arg_pos = method->size_of_parameters() - 1;  // trailing MemberName argument
1192     member_reg = r19;  // known to be free at this point
1193     has_receiver = MethodHandles::ref_kind_has_receiver(ref_kind);
1194   } else if (iid == vmIntrinsics::_invokeBasic) {
1195     has_receiver = true;
1196   } else {
1197     fatal("unexpected intrinsic id %d", iid);
1198   }
1199 
1200   if (member_reg != noreg) {
1201     // Load the member_arg into register, if necessary.
1202     SharedRuntime::check_member_name_argument_is_last_argument(method, sig_bt, regs);
1203     VMReg r = regs[member_arg_pos].first();
1204     if (r->is_stack()) {
1205       __ ldr(member_reg, Address(sp, r->reg2stack() * VMRegImpl::stack_slot_size));
1206     } else {
1207       // no data motion is needed
1208       member_reg = r->as_Register();
1209     }
1210   }
1211 
1212   if (has_receiver) {
1213     // Make sure the receiver is loaded into a register.
1214     assert(method->size_of_parameters() > 0, "oob");
1215     assert(sig_bt[0] == T_OBJECT, "receiver argument must be an object");
1216     VMReg r = regs[0].first();
1217     assert(r->is_valid(), "bad receiver arg");


< prev index next >