riscv: Clean up extension test macros
authorChristoph Müllner <christoph.muellner@vrull.eu>
Tue, 17 Jan 2023 18:31:58 +0000 (19:31 +0100)
committerPauli <pauli@openssl.org>
Thu, 16 Mar 2023 02:12:19 +0000 (13:12 +1100)
commit86c69fe84118f0dca656d9bfc1131052e2a8e9b8
treee753c237e45ffaa2e24f7a4e8877b51fd9120a18
parent04af51c276e7d785a194eb9ed199abf250c5b3b6
riscv: Clean up extension test macros

In RISC-V we have multiple extensions, that can be
used to accelerate processing.
The known extensions are defined in riscv_arch.def.
From that file test functions of the following
form are generated: RISCV_HAS_$ext().

In recent commits new ways to define the availability
of these test macros have been defined. E.g.:
  #define RV32I_ZKND_ZKNE_CAPABLE   \
          (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE())
  [...]
  #define RV64I_ZKND_ZKNE_CAPABLE   \
          (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE())

This leaves us with two different APIs to test capabilities.
Further, creating the same macros for RV32 and RV64 results
in duplicated code (see example above).

This inconsistent situation makes it hard to integrate
further code. So let's clean this up with the following steps:
* Replace RV32I_* and RV64I_* macros by RICSV_HAS_* macros
* Move all test macros into riscv_arch.h
* Use "AND" and "OR" to combine tests with more than one extension
* Rename include files for accelerated processing (remove extension
  postfix).

We end up with compile time tests for RV32/RV64 and run-time tests
for available extensions. Adding new routines (e.g. for vector crypto
instructions) should be straightforward.

Testing showed no regressions.

Signed-off-by: Christoph Müllner <christoph.muellner@vrull.eu>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/20078)
14 files changed:
crypto/modes/gcm128.c
include/crypto/aes_platform.h
include/crypto/riscv_arch.h
providers/implementations/ciphers/cipher_aes_ccm_hw.c
providers/implementations/ciphers/cipher_aes_ccm_hw_rv32i.inc [moved from providers/implementations/ciphers/cipher_aes_ccm_hw_rv32i_zknd_zkne.inc with 95% similarity]
providers/implementations/ciphers/cipher_aes_ccm_hw_rv64i.inc [moved from providers/implementations/ciphers/cipher_aes_ccm_hw_rv64i_zknd_zkne.inc with 93% similarity]
providers/implementations/ciphers/cipher_aes_gcm_hw.c
providers/implementations/ciphers/cipher_aes_gcm_hw_rv32i.inc [moved from providers/implementations/ciphers/cipher_aes_gcm_hw_rv32i_zknd_zkne.inc with 95% similarity]
providers/implementations/ciphers/cipher_aes_gcm_hw_rv64i.inc [moved from providers/implementations/ciphers/cipher_aes_gcm_hw_rv64i_zknd_zkne.inc with 97% similarity]
providers/implementations/ciphers/cipher_aes_hw.c
providers/implementations/ciphers/cipher_aes_hw_rv32i.inc [moved from providers/implementations/ciphers/cipher_aes_hw_rv32i_zknd_zkne.inc with 97% similarity]
providers/implementations/ciphers/cipher_aes_hw_rv64i.inc [moved from providers/implementations/ciphers/cipher_aes_hw_rv64i_zknd_zkne.inc with 97% similarity]
providers/implementations/ciphers/cipher_aes_ocb_hw.c
providers/implementations/ciphers/cipher_aes_xts_hw.c