643 __ delayed()->nop(); |
643 __ delayed()->nop(); |
644 __ load_klass(O1_scratch, O1_scratch); |
644 __ load_klass(O1_scratch, O1_scratch); |
645 |
645 |
646 // Live at this point: |
646 // Live at this point: |
647 // - G5_klass : klass required by the target method |
647 // - G5_klass : klass required by the target method |
|
648 // - O0_argslot : argslot index in vmarg; may be required in the failing path |
648 // - O1_scratch : argument klass to test |
649 // - O1_scratch : argument klass to test |
649 // - G3_method_handle: adapter method handle |
650 // - G3_method_handle: adapter method handle |
650 __ check_klass_subtype(O1_scratch, G5_klass, O0_argslot, O2_scratch, done); |
651 __ check_klass_subtype(O1_scratch, G5_klass, O2_scratch, O3_scratch, done); |
651 |
652 |
652 // If we get here, the type check failed! |
653 // If we get here, the type check failed! |
653 __ load_heap_oop(G3_amh_argument, O2_required); // required class |
654 __ load_heap_oop(G3_amh_argument, O2_required); // required class |
654 __ ld_ptr( vmarg, O1_actual); // bad object |
655 __ ld_ptr( vmarg, O1_actual); // bad object |
655 __ jump_to(AddressLiteral(from_interpreted_entry(_raise_exception)), O3_scratch); |
656 __ jump_to(AddressLiteral(from_interpreted_entry(_raise_exception)), O3_scratch); |