8203699: java/lang/invoke/SpecialInterfaceCall fails with SIGILL on aarch64
authoradinn
Wed, 23 May 2018 15:57:51 +0000
changeset 50270 cc2b36619704
parent 50269 d8327f838b88
child 50271 697b49a04e19
8203699: java/lang/invoke/SpecialInterfaceCall fails with SIGILL on aarch64 Summary: fastdebug build fails with SIGILL Reviewed-by: shade, drwhite, aph
src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp
--- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp	Fri May 25 07:22:37 2018 -0700
+++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp	Wed May 23 15:57:51 2018 +0000
@@ -1224,7 +1224,6 @@
   assert(sub_klass != r0, "killed reg"); // killed by mov(r0, super)
   assert(sub_klass != r2, "killed reg"); // killed by lea(r2, &pst_counter)
 
-  // Get super_klass value into r0 (even if it was in r5 or r2).
   RegSet pushed_registers;
   if (!IS_A_TEMP(r2))    pushed_registers += r2;
   if (!IS_A_TEMP(r5))    pushed_registers += r5;
@@ -1235,6 +1234,11 @@
 
   push(pushed_registers, sp);
 
+  // Get super_klass value into r0 (even if it was in r5 or r2).
+  if (super_klass != r0) {
+    mov(r0, super_klass);
+  }
+
 #ifndef PRODUCT
   mov(rscratch2, (address)&SharedRuntime::_partial_subtype_ctr);
   Address pst_counter_addr(rscratch2);