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