< prev index next >

src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp

Print this page

        

*** 2382,2391 **** --- 2382,2392 ---- __ stop("SharedRuntime::generate_deopt_blob: last_Java_fp not cleared"); __ bind(L); } #endif // ASSERT __ mov(c_rarg0, rthread); + __ mov(c_rarg1, rcpool); __ lea(rscratch1, RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::fetch_unroll_info))); __ blrt(rscratch1, 1, 0, 1); __ bind(retaddr); // Need to have an oopmap that tells fetch_unroll_info where to
*** 2395,2404 **** --- 2396,2406 ---- __ reset_last_Java_frame(false, true); // Load UnrollBlock* into rdi __ mov(r5, r0); + __ ldrw(rcpool, Address(r5, Deoptimization::UnrollBlock::unpack_kind_offset_in_bytes())); Label noException; __ cmpw(rcpool, Deoptimization::Unpack_exception); // Was exception pending? __ br(Assembler::NE, noException); __ ldr(r0, Address(rthread, JavaThread::exception_oop_offset())); // QQQ this is useless it was NULL above
*** 2607,2616 **** --- 2609,2619 ---- // UnrollBlock* uncommon_trap(JavaThread* thread, jint unloaded_class_index); // // n.b. 2 gp args, 0 fp args, integral return type __ mov(c_rarg0, rthread); + __ movw(c_rarg2, (unsigned)Deoptimization::Unpack_uncommon_trap); __ lea(rscratch1, RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::uncommon_trap))); __ blrt(rscratch1, 2, 0, MacroAssembler::ret_type_integral); __ bind(retaddr);
*** 2626,2635 **** --- 2629,2648 ---- __ reset_last_Java_frame(false, true); // move UnrollBlock* into r4 __ mov(r4, r0); + #ifdef ASSERT + { Label L; + __ ldrw(rscratch1, Address(r4, Deoptimization::UnrollBlock::unpack_kind_offset_in_bytes())); + __ cmpw(rscratch1, (unsigned)Deoptimization::Unpack_uncommon_trap); + __ br(Assembler::EQ, L); + __ stop("SharedRuntime::generate_deopt_blob: last_Java_fp not cleared"); + __ bind(L); + } + #endif + // Pop all the frames we must move/replace. // // Frame picture (youngest to oldest) // 1: self-frame (no frame link) // 2: deopting frame (no frame link)
< prev index next >