[aarch64-port-dev ] RFR(S): 8243597: AArch64: Add support for integer vector abs

Yang Zhang Yang.Zhang at arm.com
Wed May 6 08:46:28 UTC 2020


Hi,

Could you please help to review this patch?

JBS: https://bugs.openjdk.java.net/browse/JDK-8243597
Webrev: http://cr.openjdk.java.net/~yzhang/8243597/webrev.00/

In JDK-8222074 [1], x86 enables auto vectorization for integer vector
abs, and jtreg tests are also added.

In this patch, the missing AbsVB/S/I/L support for AArch64 is added.

Testing:
Full jtreg test
Vector API tests which cover vector abs

Test case:
  public static void absvs(short[] a, short[] b, short[] c) {
      for (int i = 0; i < a.length; i++) {
          c[i] = (short)Math.abs((a[i] + b[i]));
      }
  }

Assembly code generated by C2:
  0x0000ffffaca3f3ac:   ldr	q17, [x16, #16]
  0x0000ffffaca3f3b0:   ldr	q16, [x15, #16]
  0x0000ffffaca3f3b4:   add	v16.8h, v16.8h, v17.8h
  0x0000ffffaca3f3b8:   abs	v16.8h, v16.8h
  0x0000ffffaca3f3c0:   str	q16, [x12, #16]

Similar test cases for byte/int/long are also tested and NEON abs
instruction is generated by C2.

Performance:
JMH tests are uploaded.
http://cr.openjdk.java.net/~yzhang/8243597/TestScalar.java
http://cr.openjdk.java.net/~yzhang/8243597/TestVect.java

Vector abs:

Before:
Benchmark               (size)  Mode  Cnt     Score   Error  Units
TestVect.testVectAbsVB    1024  avgt    5  1041.720 ? 2.606  us/op
TestVect.testVectAbsVI    1024  avgt    5   659.788 ? 2.057  us/op
TestVect.testVectAbsVL    1024  avgt    5   711.043 ? 5.489  us/op
TestVect.testVectAbsVS    1024  avgt    5   659.157 ? 2.531  us/op

After
Benchmark               (size)  Mode  Cnt    Score   Error  Units
TestVect.testVectAbsVB    1024  avgt    5   88.821 ? 1.886  us/op
TestVect.testVectAbsVI    1024  avgt    5  199.081 ? 2.539  us/op
TestVect.testVectAbsVL    1024  avgt    5  447.536 ? 1.195  us/op
TestVect.testVectAbsVS    1024  avgt    5  119.172 ? 0.340  us/op

Scalar abs:

Before:
Benchmark            (size)  Mode  Cnt     Score   Error  Units
TestScalar.testAbsI    1024  avgt    5  3770.345 ± 6.760  us/op
TestScalar.testAbsL    1024  avgt    5  3767.570 ± 9.097  us/op

After:
Benchmark            (size)  Mode  Cnt     Score   Error  Units
TestScalar.testAbsI    1024  avgt    5  3141.312 ± 2.000  us/op
TestScalar.testAbsL    1024  avgt    5  3103.143 ± 8.989  us/op

[1] https://bugs.openjdk.java.net/browse/JDK-8222074

Regards
Yang


More information about the hotspot-compiler-dev mailing list