Home GnuPG

Add SHA3 acceleration for RISC-V Zbb extension

Description

Add SHA3 acceleration for RISC-V Zbb extension

* cipher/keccak.c (USE_RISCV_ZBB): New.
[NEED_COMMON64, HAVE_GCC_INLINE_ASM_RISCV] (load_aligned_u64)
(HAVE_ALIGNED_ABSORB_LANES64, aligned_absorb_lanes64_8)
(aligned_absorb_lanes64_4, aligned_absorb_lanes64_2)
(aligned_absorb_lanes64_1, HAVE_ALIGNED_EXTRACT64)
(aligned_extract64): New.
[NEED_COMMON64] (keccak_extract64): Add 'aligned_extract64' path.
[USE_64BIT] (absorb_lanes64_8, absorb_lanes64_4, absorb_lanes64_2)
(absorb_lanes64_1): Rename these functions to …
[USE_64BIT] (unaligned_absorb_lanes64_8, unaligned_absorb_lanes64_4)
(unaligned_absorb_lanes64_2, unaligned_absorb_lanes64_1): … these.
[USE_64BIT] (absorb_lanes64_21, absorb_lanes64_18, absorb_lanes64_17)
(absorb_lanes64_13, absorb_lanes64_9): New.
[USE_RISCV_ZBB]: (ANDN64, ROL64, keccak_riscv_zbb_64_ops): New.
(keccak_init) [USE_RISCV_ZBB]: Use 'keccak_riscv_zbb_64_ops' if
HWF_RISCV_IMAFDC and HWF_RISCV_ZBB available.
* cipher/keccak_permute_64.h (KECCAK_F1600_ABSORB_FUNC_NAME): Use
absorb_lanes64_21, absorb_lanes64_18, absorb_lanes64_17,
absorb_lanes64_13 and absorb_lanes64_9.

Patch adds RISC-V Zbb extension acceleration for SHA3.

Benchmark on SpacemiT K1 (1600 Mhz):

Before:

|  nanosecs/byte   mebibytes/sec   cycles/byte

SHA3-256 | 22.98 ns/B 41.51 MiB/s 36.76 c/B

After (2.2x faster):

|  nanosecs/byte   mebibytes/sec   cycles/byte

SHA3-256 | 11.15 ns/B 85.57 MiB/s 16.53 c/B

  • Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>

Details

Provenance
jukiviliAuthored on Jan 2 2025, 7:32 PM
Parents
rC8dbee93ac2f1: chacha20: add RISC-V vector intrinsics implementation
Branches
Unknown
Tags
Unknown