diff src/cpu/x86/vm/sharedRuntime_x86_64.cpp @ 2935:9b8f30608e62

deoptimization action (invalidate, reprofile, ...) more debug properties and assertions
author Lukas Stadler <lukas.stadler@jku.at>
date Fri, 10 Jun 2011 15:01:14 +0200
parents 1e13559b112d
children c7783b6773ea
line wrap: on
line diff
--- a/src/cpu/x86/vm/sharedRuntime_x86_64.cpp	Thu Jun 09 20:25:38 2011 +0200
+++ b/src/cpu/x86/vm/sharedRuntime_x86_64.cpp	Fri Jun 10 15:01:14 2011 +0200
@@ -140,6 +140,7 @@
   static int rax_offset_in_bytes(void)    { return BytesPerInt * rax_off; }
   static int rdx_offset_in_bytes(void)    { return BytesPerInt * rdx_off; }
   static int rbx_offset_in_bytes(void)    { return BytesPerInt * rbx_off; }
+  static int r10_offset_in_bytes(void)    { return BytesPerInt * r10_off; }
   static int xmm0_offset_in_bytes(void)   { return BytesPerInt * xmm0_off; }
   static int return_offset_in_bytes(void) { return BytesPerInt * return_off; }
 
@@ -2669,9 +2670,14 @@
   // fetch_unroll_info needs to call last_java_frame()
   __ set_last_Java_frame(noreg, noreg, NULL);
 
+
   //  __ movl(c_rarg1, (int32_t)Deoptimization::Unpack_reexecute);
   //  __ movl(r14, c_rarg1); // save into r14 for later call to unpack_frames
-  __ movl(c_rarg1, (int32_t)-1);
+
+  assert(r10 == rscratch1, "scratch register should be r10");
+  __ movptr(c_rarg1, Address(rsp, RegisterSaver::r10_offset_in_bytes()));
+  __ orq(c_rarg1, ~(int32_t)Deoptimization::make_trap_request(Deoptimization::Reason_unreached, Deoptimization::Action_none));
+  __ notq(c_rarg1);
   __ movl(r14, (int32_t)Deoptimization::Unpack_reexecute);
   __ mov(c_rarg0, r15_thread);
   __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::uncommon_trap)));