Home GnuPG

Add RISC-V Zbb+Zbc implementation of CRC

Description

Add RISC-V Zbb+Zbc implementation of CRC

* cipher/Makefile.am: Add 'crc-riscv-zbb-zbc.c'.
* cipher/crc-riscv-zbb-zbc.c: New.
* cipher/crc.c (USE_RISCV_ZBB_ZBC): New.
(CRC_CONTEXT) [USE_RISCV_ZBB_ZBC]: Add 'use_riscv_zbc'.
[USE_RISCV_ZBB_ZBC] (_gcry_crc32_riscv_zbb_zbc)
(_gcry_crc24rfc2440_riscv_zbb_zbc): New.
(crc32_init): Rename to ...
(generic_crc32_init): ... this; Add 'init_value' parameter.
(generic_crc32_init) [USE_RISCV_ZBB_ZBC]: Add HW feature check for RISC-V
Zbb+Zbc implementation.
(crc24rfc2440_init) [USE_RISCV_ZBB_ZBC]: Likewise.
(crc32_init, crc32rfc1510_init): Use 'generic_crc32_init'.
(crc32_write) [USE_RISCV_ZBB_ZBC]: Add RISC-V Zbb+Zbc implementation.
(crc24rfc2440_write) [USE_RISCV_ZBB_ZBC]: Likewise.
* configure.ac: Add 'crc-riscv-zbb-zbc.lo'.

Benchmark on SpacemiT K1:

Before:

|  nanosecs/byte   mebibytes/sec   cycles/byte  auto Mhz

CRC32 | 3.01 ns/B 316.6 MiB/s 4.82 c/B 1600
CRC24RFC2440 | 3.11 ns/B 306.9 MiB/s 4.97 c/B 1600

After:

|  nanosecs/byte   mebibytes/sec   cycles/byte  auto Mhz

CRC32 | 0.275 ns/B 3472 MiB/s 0.439 c/B 1600
CRC24RFC2440 | 0.394 ns/B 2418 MiB/s 0.631 c/B 1600

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

Details

Provenance
jukiviliAuthored on Aug 12 2025, 9:29 PM
Parents
rCcc2a4b63889e: Add RISC-V vector cryptography implementation of GHASH
Branches
Unknown
Tags
Unknown