Inspired by Ard Biesheuvel's RFC patches for accelerating AES under emulation, provide a set of primitives that maps between the guest and host fragments.
Changes for v3: * Move host/include/*/{,crypto/}aes-round.h. * Add some r-b. Patches missing r-b: 02-tests-multiarch-Add-test-aes.patch 05-crypto-Add-aesenc_SB_SR_AK.patch 08-target-arm-Use-aesenc_SB_SR_AK.patch 10-target-riscv-Use-aesenc_SB_SR_AK.patch 11-crypto-Add-aesdec_ISB_ISR_AK.patch 13-target-arm-Use-aesdec_ISB_ISR_AK.patch 15-target-riscv-Use-aesdec_ISB_ISR_AK.patch 16-crypto-Add-aesenc_MC.patch 17-target-arm-Use-aesenc_MC.patch 18-crypto-Add-aesdec_IMC.patch 19-target-i386-Use-aesdec_IMC.patch 20-target-arm-Use-aesdec_IMC.patch 21-target-riscv-Use-aesdec_IMC.patch 22-crypto-Add-aesenc_SB_SR_MC_AK.patch 23-target-i386-Use-aesenc_SB_SR_MC_AK.patch 25-target-riscv-Use-aesenc_SB_SR_MC_AK.patch 26-crypto-Add-aesdec_ISB_ISR_IMC_AK.patch 27-target-i386-Use-aesdec_ISB_ISR_IMC_AK.patch 28-target-riscv-Use-aesdec_ISB_ISR_IMC_AK.patch 35-host-include-i386-Implement-aes-round.h.patch 36-host-include-aarch64-Implement-aes-round.h.patch r~ Richard Henderson (37): util: Add cpuinfo-ppc.c tests/multiarch: Add test-aes target/arm: Move aesmc and aesimc tables to crypto/aes.c crypto/aes: Add constants for ShiftRows, InvShiftRows crypto: Add aesenc_SB_SR_AK target/i386: Use aesenc_SB_SR_AK target/arm: Demultiplex AESE and AESMC target/arm: Use aesenc_SB_SR_AK target/ppc: Use aesenc_SB_SR_AK target/riscv: Use aesenc_SB_SR_AK crypto: Add aesdec_ISB_ISR_AK target/i386: Use aesdec_ISB_ISR_AK target/arm: Use aesdec_ISB_ISR_AK target/ppc: Use aesdec_ISB_ISR_AK target/riscv: Use aesdec_ISB_ISR_AK crypto: Add aesenc_MC target/arm: Use aesenc_MC crypto: Add aesdec_IMC target/i386: Use aesdec_IMC target/arm: Use aesdec_IMC target/riscv: Use aesdec_IMC crypto: Add aesenc_SB_SR_MC_AK target/i386: Use aesenc_SB_SR_MC_AK target/ppc: Use aesenc_SB_SR_MC_AK target/riscv: Use aesenc_SB_SR_MC_AK crypto: Add aesdec_ISB_ISR_IMC_AK target/i386: Use aesdec_ISB_ISR_IMC_AK target/riscv: Use aesdec_ISB_ISR_IMC_AK crypto: Add aesdec_ISB_ISR_AK_IMC target/ppc: Use aesdec_ISB_ISR_AK_IMC crypto: Remove AES_shifts, AES_ishifts crypto: Implement aesdec_IMC with AES_imc_rot crypto: Remove AES_imc crypto: Unexport AES_*_rot, AES_TeN, AES_TdN host/include/i386: Implement aes-round.h host/include/aarch64: Implement aes-round.h host/include/ppc: Implement aes-round.h MAINTAINERS | 1 + meson.build | 9 + host/include/aarch64/host/cpuinfo.h | 1 + host/include/aarch64/host/crypto/aes-round.h | 205 +++++ host/include/generic/host/crypto/aes-round.h | 33 + host/include/i386/host/cpuinfo.h | 1 + host/include/i386/host/crypto/aes-round.h | 152 ++++ host/include/ppc/host/cpuinfo.h | 30 + host/include/ppc/host/crypto/aes-round.h | 182 +++++ host/include/ppc64/host/cpuinfo.h | 1 + host/include/ppc64/host/crypto/aes-round.h | 1 + host/include/x86_64/host/crypto/aes-round.h | 1 + include/crypto/aes-round.h | 164 ++++ include/crypto/aes.h | 30 - target/arm/helper.h | 2 + target/i386/ops_sse.h | 60 +- tcg/ppc/tcg-target.h | 16 +- target/arm/tcg/sve.decode | 4 +- crypto/aes.c | 808 ++++++++++++------- target/arm/tcg/crypto_helper.c | 249 ++---- target/arm/tcg/translate-a64.c | 13 +- target/arm/tcg/translate-neon.c | 4 +- target/arm/tcg/translate-sve.c | 8 +- target/ppc/int_helper.c | 50 +- target/riscv/crypto_helper.c | 138 +--- tests/tcg/aarch64/test-aes.c | 58 ++ tests/tcg/i386/test-aes.c | 68 ++ tests/tcg/ppc64/test-aes.c | 116 +++ tests/tcg/riscv64/test-aes.c | 76 ++ util/cpuinfo-aarch64.c | 2 + util/cpuinfo-i386.c | 3 + util/cpuinfo-ppc.c | 64 ++ tcg/ppc/tcg-target.c.inc | 44 +- tests/tcg/multiarch/test-aes-main.c.inc | 183 +++++ tests/tcg/aarch64/Makefile.target | 4 + tests/tcg/i386/Makefile.target | 4 + tests/tcg/ppc64/Makefile.target | 1 + tests/tcg/riscv64/Makefile.target | 13 + util/meson.build | 2 + 39 files changed, 2080 insertions(+), 721 deletions(-) create mode 100644 host/include/aarch64/host/crypto/aes-round.h create mode 100644 host/include/generic/host/crypto/aes-round.h create mode 100644 host/include/i386/host/crypto/aes-round.h create mode 100644 host/include/ppc/host/cpuinfo.h create mode 100644 host/include/ppc/host/crypto/aes-round.h create mode 100644 host/include/ppc64/host/cpuinfo.h create mode 100644 host/include/ppc64/host/crypto/aes-round.h create mode 100644 host/include/x86_64/host/crypto/aes-round.h create mode 100644 include/crypto/aes-round.h create mode 100644 tests/tcg/aarch64/test-aes.c create mode 100644 tests/tcg/i386/test-aes.c create mode 100644 tests/tcg/ppc64/test-aes.c create mode 100644 tests/tcg/riscv64/test-aes.c create mode 100644 util/cpuinfo-ppc.c create mode 100644 tests/tcg/multiarch/test-aes-main.c.inc -- 2.34.1