< prev index next > src/hotspot/cpu/aarch64/templateTable_aarch64.cpp
Print this page
__ jump_from_interpreted(method, r0);
__ bind(notFinal);
// get receiver klass
! __ null_check(recv, oopDesc::klass_offset_in_bytes());
__ load_klass(r0, recv);
// profile this call
__ profile_virtual_call(r0, rlocals, r3);
__ jump_from_interpreted(method, r0);
__ bind(notFinal);
// get receiver klass
! __ null_check(recv, oopDesc::mark_offset_in_bytes());
__ load_klass(r0, recv);
// profile this call
__ profile_virtual_call(r0, rlocals, r3);
// Check for private method invocation - indicated by vfinal
Label notVFinal;
__ tbz(r3, ConstantPoolCacheEntry::is_vfinal_shift, notVFinal);
// Get receiver klass into r3 - also a null check
! __ null_check(r2, oopDesc::klass_offset_in_bytes());
__ load_klass(r3, r2);
Label subtype;
__ check_klass_subtype(r3, r0, r4, subtype);
// If we get here the typecheck failed
// Check for private method invocation - indicated by vfinal
Label notVFinal;
__ tbz(r3, ConstantPoolCacheEntry::is_vfinal_shift, notVFinal);
// Get receiver klass into r3 - also a null check
! __ null_check(r2, oopDesc::mark_offset_in_bytes());
__ load_klass(r3, r2);
Label subtype;
__ check_klass_subtype(r3, r0, r4, subtype);
// If we get here the typecheck failed
__ bind(notVFinal);
// Get receiver klass into r3 - also a null check
__ restore_locals();
! __ null_check(r2, oopDesc::klass_offset_in_bytes());
__ load_klass(r3, r2);
Label no_such_method;
// Preserve method for throw_AbstractMethodErrorVerbose.
__ bind(notVFinal);
// Get receiver klass into r3 - also a null check
__ restore_locals();
! __ null_check(r2, oopDesc::mark_offset_in_bytes());
__ load_klass(r3, r2);
Label no_such_method;
// Preserve method for throw_AbstractMethodErrorVerbose.
__ cbnz(r3, loop);
}
// initialize object header only.
__ bind(initialize_header);
! __ mov(rscratch1, (intptr_t)markWord::prototype().value());
__ str(rscratch1, Address(r0, oopDesc::mark_offset_in_bytes()));
- __ store_klass_gap(r0, zr); // zero klass gap for compressed oops
- __ store_klass(r0, r4); // store klass last
{
SkipIfEqual skip(_masm, &DTraceAllocProbes, false);
// Trigger dtrace event for fastpath
__ push(atos); // save the return value
__ cbnz(r3, loop);
}
// initialize object header only.
__ bind(initialize_header);
! __ ldr(rscratch1, Address(r4, Klass::prototype_header_offset()));
__ str(rscratch1, Address(r0, oopDesc::mark_offset_in_bytes()));
{
SkipIfEqual skip(_masm, &DTraceAllocProbes, false);
// Trigger dtrace event for fastpath
__ push(atos); // save the return value
call_VM(r0, CAST_FROM_FN_PTR(address, InterpreterRuntime::quicken_io_cc));
// vm_result_2 has metadata result
__ get_vm_result_2(r0, rthread);
__ pop(r3); // restore receiver
__ verify_oop(r3);
! __ load_klass(r3, r3);
__ b(resolved);
// Get superklass in r0 and subklass in r3
__ bind(quicked);
__ load_klass(r3, r0);
call_VM(r0, CAST_FROM_FN_PTR(address, InterpreterRuntime::quicken_io_cc));
// vm_result_2 has metadata result
__ get_vm_result_2(r0, rthread);
__ pop(r3); // restore receiver
__ verify_oop(r3);
! __ load_klass(rscratch1, r3);
+ __ mov(r3, rscratch1);
__ b(resolved);
// Get superklass in r0 and subklass in r3
__ bind(quicked);
__ load_klass(r3, r0);
< prev index next >