8203699: java/lang/invoke/SpecialInterfaceCall fails with SIGILL on aarch64
Summary: fastdebug build fails with SIGILL
Reviewed-by: shade, drwhite, aph
--- 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);