RFR: 8341068: [s390x] intrinsics for divideUnsigned and remainderUnsigned methods in java.lang.Integer and java.lang.Long

Amit Kumar amitkumar at openjdk.org
Thu Oct 17 09:50:44 UTC 2024


Add match rules for UDivI, UModI, UDivL, UModL. And also adds `dlr` and `dlgr` instruction. 

Tier1 test are clean for fastdebug vm; 

Without Patch: 


Benchmark                                  (BUFFER_SIZE)  (divisorType)  Mode  Cnt     Score     Error  Units
IntegerDivMod.testDivideRemainderUnsigned           1024          mixed  avgt   15  1935.176 ±   2.191  ns/op
IntegerDivMod.testDivideRemainderUnsigned           1024       positive  avgt   15  1934.915 ±   3.207  ns/op
IntegerDivMod.testDivideRemainderUnsigned           1024       negative  avgt   15  1934.325 ±   1.108  ns/op
IntegerDivMod.testDivideUnsigned                    1024          mixed  avgt   15  1809.782 ±  49.341  ns/op
IntegerDivMod.testDivideUnsigned                    1024       positive  avgt   15  1769.326 ±   2.607  ns/op
IntegerDivMod.testDivideUnsigned                    1024       negative  avgt   15  1784.053 ±  71.190  ns/op
IntegerDivMod.testRemainderUnsigned                 1024          mixed  avgt   15  2026.978 ±   1.534  ns/op
IntegerDivMod.testRemainderUnsigned                 1024       positive  avgt   15  2028.039 ±   3.812  ns/op
IntegerDivMod.testRemainderUnsigned                 1024       negative  avgt   15  2437.843 ± 636.808  ns/op
Finished running test 'micro:java.lang.IntegerDivMod'

 
Benchmark                               (BUFFER_SIZE)  (divisorType)  Mode  Cnt     Score    Error  Units
LongDivMod.testDivideRemainderUnsigned           1024          mixed  avgt   15  4524.897 ± 16.566  ns/op
LongDivMod.testDivideRemainderUnsigned           1024       positive  avgt   15  4373.714 ±  9.514  ns/op
LongDivMod.testDivideRemainderUnsigned           1024       negative  avgt   15  2018.309 ±  1.788  ns/op
LongDivMod.testDivideUnsigned                    1024          mixed  avgt   15  4320.382 ± 19.055  ns/op
LongDivMod.testDivideUnsigned                    1024       positive  avgt   15  3988.953 ±  8.770  ns/op
LongDivMod.testDivideUnsigned                    1024       negative  avgt   15  1069.703 ±  1.525  ns/op
LongDivMod.testRemainderUnsigned                 1024          mixed  avgt   15  5589.319 ±  4.247  ns/op
LongDivMod.testRemainderUnsigned                 1024       positive  avgt   15  3904.555 ±  3.191  ns/op
LongDivMod.testRemainderUnsigned                 1024       negative  avgt   15  1765.761 ±  1.539  ns/op
Finished running test 'micro:java.lang.LongDivMod'



with patch: 


Benchmark                                  (BUFFER_SIZE)  (divisorType)  Mode  Cnt     Score    Error  Units
IntegerDivMod.testDivideRemainderUnsigned           1024          mixed  avgt   15  1999.134 ± 35.303  ns/op
IntegerDivMod.testDivideRemainderUnsigned           1024       positive  avgt   15  2020.517 ±  2.988  ns/op
IntegerDivMod.testDivideRemainderUnsigned           1024       negative  avgt   15  2037.983 ±  4.524  ns/op
IntegerDivMod.testDivideUnsigned                    1024          mixed  avgt   15  2053.458 ±  0.893  ns/op
IntegerDivMod.testDivideUnsigned                    1024       positive  avgt   15  2049.918 ±  1.635  ns/op
IntegerDivMod.testDivideUnsigned                    1024       negative  avgt   15  2050.901 ±  3.557  ns/op
IntegerDivMod.testRemainderUnsigned                 1024          mixed  avgt   15  2908.612 ±  1.366  ns/op
IntegerDivMod.testRemainderUnsigned                 1024       positive  avgt   15  2909.734 ±  2.879  ns/op
IntegerDivMod.testRemainderUnsigned                 1024       negative  avgt   15  2908.976 ±  1.950  ns/op
Finished running test 'micro:java.lang.IntegerDivMod'


Benchmark                               (BUFFER_SIZE)  (divisorType)  Mode  Cnt     Score    Error  Units
LongDivMod.testDivideRemainderUnsigned           1024          mixed  avgt   15  2647.412 ± 36.127  ns/op
LongDivMod.testDivideRemainderUnsigned           1024       positive  avgt   15  2632.466 ±  1.573  ns/op
LongDivMod.testDivideRemainderUnsigned           1024       negative  avgt   15  2631.312 ±  2.185  ns/op
LongDivMod.testDivideUnsigned                    1024          mixed  avgt   15  2052.435 ±  0.971  ns/op
LongDivMod.testDivideUnsigned                    1024       positive  avgt   15  2053.224 ±  3.066  ns/op
LongDivMod.testDivideUnsigned                    1024       negative  avgt   15  2052.801 ±  1.749  ns/op
LongDivMod.testRemainderUnsigned                 1024          mixed  avgt   15  2904.972 ±  3.510  ns/op
LongDivMod.testRemainderUnsigned                 1024       positive  avgt   15  2904.937 ±  2.190  ns/op
LongDivMod.testRemainderUnsigned                 1024       negative  avgt   15  2905.771 ±  6.689  ns/op
Finished running test 'micro:java.lang.LongDivMod'

-------------

Commit messages:
 - adds unsigned division & modulus intrinsic

Changes: https://git.openjdk.org/jdk/pull/21559/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=21559&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8341068
  Stats: 101 lines in 3 files changed: 99 ins; 0 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/21559.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/21559/head:pull/21559

PR: https://git.openjdk.org/jdk/pull/21559


More information about the hotspot-compiler-dev mailing list