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>