changeset 7707:633e95b3b94b

8153496: aarch32: rthread corrupted in method handle dispatch Reviewed-by: enevill Contributed-by: akozlov@azul.com
author enevill
date Tue, 05 Apr 2016 09:27:42 +0100
parents e83061931aee
children 721c34089be7
files src/cpu/aarch32/vm/methodHandles_aarch32.cpp
diffstat 1 files changed, 4 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/aarch32/vm/methodHandles_aarch32.cpp	Tue Apr 05 09:18:33 2016 +0100
+++ b/src/cpu/aarch32/vm/methodHandles_aarch32.cpp	Tue Apr 05 09:27:42 2016 +0100
@@ -255,12 +255,12 @@
                                                     bool for_compiler_entry) {
   assert(is_signature_polymorphic(iid), "expected invoke iid");
   // temps used in this code are not used in *either* compiled or interpreted calling sequences
-  //assert(false, "We don't have the registers!");
+  // use interpreter caching registers (caller-save in compiler).
+  // Starting from r5 as r4 used by gen_special_dispatch.
   Register temp1 = r5;
-  Register temp2 = r7;
-  Register temp3 = r8; //r14;  // r13 is live by this point: it contains the sender SP
+  Register temp2 = r6;
+  Register temp3 = r7;
   assert_different_registers(temp1, temp2, temp3, receiver_reg, member_reg);
-  // FIXME These registers were somewhat plucked randomly from thin air
   if (for_compiler_entry) {
     assert(receiver_reg == (iid == vmIntrinsics::_linkToStatic ? noreg : j_rarg0), "only valid assignment");
     assert_different_registers(temp1,        j_rarg0, j_rarg1, j_rarg2, j_rarg3);