Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8157906

aarch64: some more integer rotate instructions are never emitted

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 9
    • 9
    • hotspot
    • None
    • 9
    • b126
    • aarch64
    • linux

            The left rotate instructions have the same issue with https://bugs.openjdk.java.net/browse/JDK-8154537.

            (src << shift) | (src >>> -shift) with src an int have some support in the aarch64.ad ad file: rolI_rReg_Var_C_32 and rolI_rReg_Var_C0, but their definitions is broken and never match any ideal graph subtree.

            Simpe test case:
        import java.lang.Integer.*;

        public class test {
          public static int foo (int x) {
            return Integer.rotateLeft(x, 1);
          }

          public static void main(String[] args) {
            int x = 0x1234;

            for (int i = 0; i < 50000; i++) {
              x = foo(x);
            }
          }
        }

            before optimizing:
          0x0000007f74d13454: neg w11, w2
          0x0000007f74d13458: lsr w12, w1, w11
          0x0000007f74d1345c: lsl w10, w1, w2
          0x0000007f74d13460: orr w0, w10, w12 ;*ior {reexecute=0 rethrow=0 return_oop=0}
                                                        ; - java.lang.Integer::rotateLeft@7 (line 1751)
        after optimizing:
          0x0000007f6cd135d4: neg w8, w2
          0x0000007f6cd135d8: ror w0, w1, w8 ;*ior {reexecute=0 rethrow=0 return_oop=0}
                                                        ; - java.lang.Integer::rotateLeft@7 (line 1751)

              fyang Fei Yang
              fyang Fei Yang
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved: