< prev index next >

src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp

Print this page
rev 12173 : 8170106: AArch64: Multiple JVMCI issues
Reviewed-by: duke


2369   if (EnableJVMCI) {
2370     implicit_exception_uncommon_trap_offset = __ pc() - start;
2371 
2372     __ ldr(lr, Address(rthread, in_bytes(JavaThread::jvmci_implicit_exception_pc_offset())));
2373     __ str(zr, Address(rthread, in_bytes(JavaThread::jvmci_implicit_exception_pc_offset())));
2374 
2375     uncommon_trap_offset = __ pc() - start;
2376 
2377     // Save everything in sight.
2378     RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words);
2379     // fetch_unroll_info needs to call last_java_frame()
2380     Label retaddr;
2381     __ set_last_Java_frame(sp, noreg, retaddr, rscratch1);
2382 
2383     __ ldrw(c_rarg1, Address(rthread, in_bytes(JavaThread::pending_deoptimization_offset())));
2384     __ movw(rscratch1, -1);
2385     __ strw(rscratch1, Address(rthread, in_bytes(JavaThread::pending_deoptimization_offset())));
2386 
2387     __ movw(rcpool, (int32_t)Deoptimization::Unpack_reexecute);
2388     __ mov(c_rarg0, rthread);

2389     __ lea(rscratch1,
2390            RuntimeAddress(CAST_FROM_FN_PTR(address,
2391                                            Deoptimization::uncommon_trap)));
2392     __ blrt(rscratch1, 2, 0, MacroAssembler::ret_type_integral);
2393     __ bind(retaddr);
2394     oop_maps->add_gc_map( __ pc()-start, map->deep_copy());
2395 
2396     __ reset_last_Java_frame(false);
2397 
2398     __ b(after_fetch_unroll_info_call);
2399   } // EnableJVMCI
2400 #endif // INCLUDE_JVMCI
2401 
2402   int exception_offset = __ pc() - start;
2403 
2404   // Prolog for exception case
2405 
2406   // all registers are dead at this entry point, except for r0, and
2407   // r3 which contain the exception oop and exception pc
2408   // respectively.  Set them in TLS and fall thru to the




2369   if (EnableJVMCI) {
2370     implicit_exception_uncommon_trap_offset = __ pc() - start;
2371 
2372     __ ldr(lr, Address(rthread, in_bytes(JavaThread::jvmci_implicit_exception_pc_offset())));
2373     __ str(zr, Address(rthread, in_bytes(JavaThread::jvmci_implicit_exception_pc_offset())));
2374 
2375     uncommon_trap_offset = __ pc() - start;
2376 
2377     // Save everything in sight.
2378     RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words);
2379     // fetch_unroll_info needs to call last_java_frame()
2380     Label retaddr;
2381     __ set_last_Java_frame(sp, noreg, retaddr, rscratch1);
2382 
2383     __ ldrw(c_rarg1, Address(rthread, in_bytes(JavaThread::pending_deoptimization_offset())));
2384     __ movw(rscratch1, -1);
2385     __ strw(rscratch1, Address(rthread, in_bytes(JavaThread::pending_deoptimization_offset())));
2386 
2387     __ movw(rcpool, (int32_t)Deoptimization::Unpack_reexecute);
2388     __ mov(c_rarg0, rthread);
2389     __ movw(c_rarg2, rcpool); // exec mode
2390     __ lea(rscratch1,
2391            RuntimeAddress(CAST_FROM_FN_PTR(address,
2392                                            Deoptimization::uncommon_trap)));
2393     __ blrt(rscratch1, 2, 0, MacroAssembler::ret_type_integral);
2394     __ bind(retaddr);
2395     oop_maps->add_gc_map( __ pc()-start, map->deep_copy());
2396 
2397     __ reset_last_Java_frame(false);
2398 
2399     __ b(after_fetch_unroll_info_call);
2400   } // EnableJVMCI
2401 #endif // INCLUDE_JVMCI
2402 
2403   int exception_offset = __ pc() - start;
2404 
2405   // Prolog for exception case
2406 
2407   // all registers are dead at this entry point, except for r0, and
2408   // r3 which contain the exception oop and exception pc
2409   // respectively.  Set them in TLS and fall thru to the


< prev index next >