hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp
changeset 360 21d113ecbf6a
parent 1 489c9b5090e2
child 670 ddf3e9583f2f
--- a/hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp	Fri Apr 11 09:56:35 2008 -0400
+++ b/hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp	Sun Apr 13 17:43:42 2008 -0400
@@ -664,7 +664,7 @@
 
   // work registers
   const Register method = rbx;
-  const Register t      = r12;
+  const Register t      = r11;
 
   // allocate space for parameters
   __ get_method(method);
@@ -844,6 +844,7 @@
     __ andq(rsp, -16); // align stack as required by ABI
     __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, JavaThread::check_special_condition_for_native_trans)));
     __ movq(rsp, r12); // restore sp
+    __ reinit_heapbase();
     __ bind(Continue);
   }
 
@@ -891,6 +892,7 @@
     __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::reguard_yellow_pages)));
     __ movq(rsp, r12); // restore sp
     __ popaq(); // XXX only restore smashed registers
+    __ reinit_heapbase();
 
     __ bind(no_reguard);
   }
@@ -1360,6 +1362,7 @@
   // rdx: return address/pc that threw exception
   __ restore_bcp();    // r13 points to call/send
   __ restore_locals();
+  __ reinit_heapbase();  // restore r12 as heapbase.
   // Entry point for exceptions thrown within interpreter code
   Interpreter::_throw_exception_entry = __ pc();
   // expression stack is undefined here
@@ -1658,6 +1661,7 @@
   __ andq(rsp, -16); // align stack as required by ABI
   __ call(RuntimeAddress(Interpreter::trace_code(t->tos_in())));
   __ movq(rsp, r12); // restore sp
+  __ reinit_heapbase();
 }