< prev index next >
src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp
Print this page
@@ -2382,10 +2382,11 @@
__ 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,10 +2396,11 @@
__ 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,10 +2609,11 @@
// 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,10 +2629,20 @@
__ 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 >