356 Register temp2_defc = temp2;
357 __ load_heap_oop(temp2_defc, member_clazz);
358 load_klass_from_Class(_masm, temp2_defc);
359 __ verify_klass_ptr(temp2_defc);
360 __ check_klass_subtype(temp1_recv_klass, temp2_defc, temp3, L_ok);
361 // If we get here, the type check failed!
362 __ STOP("receiver class disagrees with MemberName.clazz");
363 __ bind(L_ok);
364 }
365 BLOCK_COMMENT("} check_receiver");
366 }
367 if (iid == vmIntrinsics::_linkToSpecial ||
368 iid == vmIntrinsics::_linkToStatic) {
369 DEBUG_ONLY(temp1_recv_klass = noreg); // these guys didn't load the recv_klass
370 }
371
372 // Live registers at this point:
373 // member_reg - MemberName that was the trailing argument
374 // temp1_recv_klass - klass of stacked receiver, if needed
375 // rsi/r13 - interpreter linkage (if interpreted)
376 // rcx, rdx, rsi, rdi, r8, r8 - compiler arguments (if compiled)
377
378 Label L_incompatible_class_change_error;
379 switch (iid) {
380 case vmIntrinsics::_linkToSpecial:
381 if (VerifyMethodHandles) {
382 verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3);
383 }
384 __ movptr(rbx_method, member_vmtarget);
385 break;
386
387 case vmIntrinsics::_linkToStatic:
388 if (VerifyMethodHandles) {
389 verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3);
390 }
391 __ movptr(rbx_method, member_vmtarget);
392 break;
393
394 case vmIntrinsics::_linkToVirtual:
395 {
396 // same as TemplateTable::invokevirtual,
|
356 Register temp2_defc = temp2;
357 __ load_heap_oop(temp2_defc, member_clazz);
358 load_klass_from_Class(_masm, temp2_defc);
359 __ verify_klass_ptr(temp2_defc);
360 __ check_klass_subtype(temp1_recv_klass, temp2_defc, temp3, L_ok);
361 // If we get here, the type check failed!
362 __ STOP("receiver class disagrees with MemberName.clazz");
363 __ bind(L_ok);
364 }
365 BLOCK_COMMENT("} check_receiver");
366 }
367 if (iid == vmIntrinsics::_linkToSpecial ||
368 iid == vmIntrinsics::_linkToStatic) {
369 DEBUG_ONLY(temp1_recv_klass = noreg); // these guys didn't load the recv_klass
370 }
371
372 // Live registers at this point:
373 // member_reg - MemberName that was the trailing argument
374 // temp1_recv_klass - klass of stacked receiver, if needed
375 // rsi/r13 - interpreter linkage (if interpreted)
376 // rcx, rdx, rsi, rdi, r8 - compiler arguments (if compiled)
377
378 Label L_incompatible_class_change_error;
379 switch (iid) {
380 case vmIntrinsics::_linkToSpecial:
381 if (VerifyMethodHandles) {
382 verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3);
383 }
384 __ movptr(rbx_method, member_vmtarget);
385 break;
386
387 case vmIntrinsics::_linkToStatic:
388 if (VerifyMethodHandles) {
389 verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3);
390 }
391 __ movptr(rbx_method, member_vmtarget);
392 break;
393
394 case vmIntrinsics::_linkToVirtual:
395 {
396 // same as TemplateTable::invokevirtual,
|