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