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>