Relates :
|
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)