RFR: 8341068: [s390x] intrinsics for divideUnsigned and remainderUnsigned methods in java.lang.Integer and java.lang.Long
Andrew Haley
aph at openjdk.org
Thu Oct 17 12:56:11 UTC 2024
On Thu, 17 Oct 2024 09:45:19 GMT, Amit Kumar <amitkumar at openjdk.org> wrote:
> Add match rules for UDivI, UModI, UDivL, UModL. And also adds `dlr` and `dlgr` instruction.
>
> Tier1 test are clean for fastdebug vm;
>
> Before this patch, `compiler/c2/TestDivModNodes.java` was failing (see jbs issue) but with this patch test is passing.
>
> 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 ...
src/hotspot/cpu/s390/s390.ad line 6258:
> 6256: // Unsigned Integer Register Division
> 6257: // NOTE: z_dlr requires even-odd pair. remainder will be in even register(r4) & quotient will be stored in odd register(r5)
> 6258: // for dividend, leftmost 32bits will be in r4 and rightmost 32bits will be in r5 register.
Suggestion:
// for dividend, upper 32bits will be in r4 and lower 32bits will be in r5 register.
This PR uses the terms "leftmost" and "rightmost" for numerically higher and lower parts of an integer. I wondered if this perhaps was common in s390.ad, but it is not. Please say "higher" and "lower".
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/21559#discussion_r1804731105
More information about the hotspot-compiler-dev
mailing list