RFR: 8322179: RISC-V: Implement SHA-1 intrinsic [v2]
Antonios Printezis
tonyp at openjdk.org
Tue Dec 19 09:21:41 UTC 2023
On Mon, 18 Dec 2023 14:04:52 GMT, Hamlin Li <mli at openjdk.org> wrote:
>> Hi,
>> Can you review this patch to implement SHA-1 intrinsic for riscv?
>> Thanks!
>>
>>
>> ## Test
>>
>> ### Functionality
>>
>> tests under `test/hotspot/jtreg/compiler/intrinsics/sha`
>> tests found via `find test/jdk -iname "*SHA1*.java"`
>>
>> ### Performance
>>
>> tested on `T-HEAD Light Lichee Pi 4A`
>>
>> benchmark tests `MessageDigests.java GetMessageDigest.java MessageDigestBench.java MacBench.java` which are under `test/micro/org/openjdk/bench/`.
>>
>> **when intrinsic is enabled**
>>
>> o.o.b.java.security.GetMessageDigest.cloneInstance N/A N/A SHA-1 N/A N/A avgt 10 489.860 ? 6.277 ns/op
>> o.o.b.java.security.GetMessageDigest.getInstance N/A N/A SHA-1 N/A N/A avgt 10 3477.197 ? 204.203 ns/op
>> o.o.b.java.security.GetMessageDigest.getInstanceWithProvider N/A N/A SHA-1 N/A N/A avgt 10 4111.164 ? 108.861 ns/op
>> o.o.b.java.security.MessageDigests.digest N/A N/A SHA-1 64 DEFAULT avgt 10 3454.207 ? 53.924 ns/op
>> o.o.b.java.security.MessageDigests.digest N/A N/A SHA-1 16384 DEFAULT avgt 10 184063.834 ? 677.635 ns/op
>> o.o.b.java.security.MessageDigests.getAndDigest N/A N/A SHA-1 64 DEFAULT avgt 10 8260.011 ? 150.045 ns/op
>> o.o.b.java.security.MessageDigests.getAndDigest N/A N/A SHA-1 16384 DEFAULT avgt 10 191325.246 ? 3298.882 ns/op
>> o.o.b.javax.crypto.full.MacBench.mac HmacSHA1 128 N/A N/A avgt 10 8220.886 ? 53.684 ns/op
>> o.o.b.javax.crypto.full.MacBench.mac HmacSHA1 1024 N/A N/A avgt 10 18006.955 ? 92.432 ns/op
>> o.o.b.javax.crypto.small.MessageDigestBench.digest SHA1 1048576 N/A N/A avgt 10 11688843.558 ? 34924.678 ns/op
>>
>>
>> **when intrinsic is disabled**
>>
>> o.o.b.java.security.GetMessageDigest.cloneInstance N/A N/A SHA-1 N/A N/A avgt 10 496.890 ? 6.695 ns/op
>> o.o.b.java.security.GetMessageDigest.getInstance ...
>
> Hamlin Li has updated the pull request incrementally with one additional commit since the last revision:
>
> Add some comments
src/hotspot/cpu/riscv/stubGenerator_riscv.cpp line 4513:
> 4511: // Maj(x, y, z) = (x & y) ^ (x & z) ^ (y & z) , 40 <= t <= 59
> 4512: // Parity(x, y, z) = x ^ y ^ z , 60 <= t <= 79
> 4513: void sha1_f(int round, Register dst, Register x, Register y, Register z, Register tmp) {
Ditto re: tmp (just use t0 or t1 directly)
src/hotspot/cpu/riscv/stubGenerator_riscv.cpp line 4542:
> 4540: // b = a
> 4541: // a = T
> 4542: void sha1_process_round(int round, Register a, Register b, Register c, Register d, Register e,
Ditto re: tmp1 / tmp2 (use t0 / t1)
src/hotspot/cpu/riscv/stubGenerator_riscv.cpp line 4714:
> 4712: }
> 4713:
> 4714: int64_t mask32 = 0xffffffff;
See earlier comment. You can save a few instructions by assigning mask32 to a register and use `andr`.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/17130#discussion_r1431060923
PR Review Comment: https://git.openjdk.org/jdk/pull/17130#discussion_r1431061207
PR Review Comment: https://git.openjdk.org/jdk/pull/17130#discussion_r1431073155
More information about the hotspot-dev
mailing list