[aarch64-port-dev ] RFR(S): 8154537: AArch64: some integer rotate instructions are never emitted

Andrew Haley aph at redhat.com
Fri Jul 28 17:59:55 UTC 2017


I'm looking at the webrev in
http://cr.openjdk.java.net/~roland/8154537/webrev.00/ and I see the
the changes were made to aarch64.ad but not to ad_aarch64.m4.  This is
problematic because some .m4 files are used to generate the .ad file,
and if anyone regenerates the .ad file the bug will regress.

I think this is the change we need to make.  It won't affect generated
code at all, but it is something of a ticking bomb.

diff -r 214a94e9366c src/cpu/aarch64/vm/aarch64_ad.m4
--- a/src/cpu/aarch64/vm/aarch64_ad.m4	Mon Jul 17 12:11:32 2017 +0000
+++ b/src/cpu/aarch64/vm/aarch64_ad.m4	Fri Jul 28 18:57:25 2017 +0100
@@ -268,21 +268,21 @@
   ins_pipe(ialu_reg_reg_vshift);
 %}')dnl
 define(ROL_INSN, `
-instruct $3$1_rReg_Var_C$2(iRegLNoSp dst, iRegL src, iRegI shift, immI$2 c$2, rFlagsReg cr)
+instruct $3$1_rReg_Var_C$2(iReg$1NoSp dst, iReg$1 src, iRegI shift, immI$2 c$2, rFlagsReg cr)
 %{
   match(Set dst (Or$1 (LShift$1 src shift) (URShift$1 src (SubI c$2 shift))));

   expand %{
-    $3L_rReg(dst, src, shift, cr);
+    $3$1_rReg(dst, src, shift, cr);
   %}
 %}')dnl
 define(ROR_INSN, `
-instruct $3$1_rReg_Var_C$2(iRegLNoSp dst, iRegL src, iRegI shift, immI$2 c$2, rFlagsReg cr)
+instruct $3$1_rReg_Var_C$2(iReg$1NoSp dst, iReg$1 src, iRegI shift, immI$2 c$2, rFlagsReg cr)
 %{
   match(Set dst (Or$1 (URShift$1 src shift) (LShift$1 src (SubI c$2 shift))));

   expand %{
-    $3L_rReg(dst, src, shift, cr);
+    $3$1_rReg(dst, src, shift, cr);
   %}
 %}')dnl
 ROL_EXPAND(L, rol, rorv)

-- 
Andrew Haley
Java Platform Lead Engineer
Red Hat UK Ltd. <https://www.redhat.com>
EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671


More information about the aarch64-port-dev mailing list