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
|