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 12:52:26 GMT, Andrew Haley <aph 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 10...
>
> 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".
Or even "low" and "high".
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/21559#discussion_r1804733207
More information about the hotspot-compiler-dev
mailing list