diff options
author | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2023-02-26 13:47:08 +0200 |
---|---|---|
committer | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2023-02-26 14:58:36 +0200 |
commit | 100063cf4e1ca3350f05a343d8fa0ccf305debb1 (patch) | |
tree | 1b6aab37b37c1d63b8cfe96f33c3d4cf0a74ffe0 /cipher/rijndael-ppc.c | |
parent | 84f2e2d0b51b7b3e75d96d8188ae6a8d8174542b (diff) | |
download | libgcrypt-100063cf4e1ca3350f05a343d8fa0ccf305debb1.tar.gz |
aes-ppc: use target and optimize attributes for P8 and P9
* cipher/rijndael-ppc-functions.h: Add PPC_OPT_ATTR attribute
macro for all functions.
* cipher/rijndael-ppc.c (FUNC_ATTR_OPT, PPC_OPT_ATTR): New.
(_gcry_aes_ppc8_setkey, _gcry_aes_ppc8_prepare_decryption): Add
PPC_OPT_ATTR attribute macro.
* cipher/rijndael-ppc9le.c (FUNC_ATTR_OPT, PPC_OPT_ATTR): New.
--
This change makes sure that PPC accelerated AES gets compiled
with proper optimization level and right target setting.
Benchmark on POWER9:
AES | nanosecs/byte mebibytes/sec cycles/byte
ECB enc | 0.305 ns/B 3129 MiB/s 0.701 c/B
ECB dec | 0.305 ns/B 3127 MiB/s 0.701 c/B
CBC enc | 1.66 ns/B 575.3 MiB/s 3.81 c/B
CBC dec | 0.318 ns/B 2997 MiB/s 0.732 c/B
CFB enc | 1.66 ns/B 574.7 MiB/s 3.82 c/B
CFB dec | 0.319 ns/B 2987 MiB/s 0.734 c/B
OFB enc | 2.15 ns/B 443.4 MiB/s 4.95 c/B
OFB dec | 2.15 ns/B 443.3 MiB/s 4.95 c/B
CTR enc | 0.328 ns/B 2907 MiB/s 0.754 c/B
CTR dec | 0.328 ns/B 2906 MiB/s 0.755 c/B
XTS enc | 0.516 ns/B 1849 MiB/s 1.19 c/B
XTS dec | 0.515 ns/B 1850 MiB/s 1.19 c/B
CCM enc | 1.98 ns/B 480.6 MiB/s 4.56 c/B
CCM dec | 1.98 ns/B 480.5 MiB/s 4.56 c/B
CCM auth | 1.66 ns/B 574.9 MiB/s 3.82 c/B
EAX enc | 1.99 ns/B 480.2 MiB/s 4.57 c/B
EAX dec | 1.99 ns/B 480.2 MiB/s 4.57 c/B
EAX auth | 1.66 ns/B 575.2 MiB/s 3.81 c/B
GCM enc | 0.552 ns/B 1727 MiB/s 1.27 c/B
GCM dec | 0.552 ns/B 1728 MiB/s 1.27 c/B
GCM auth | 0.225 ns/B 4240 MiB/s 0.517 c/B
OCB enc | 0.381 ns/B 2504 MiB/s 0.876 c/B
OCB dec | 0.385 ns/B 2477 MiB/s 0.886 c/B
OCB auth | 0.356 ns/B 2682 MiB/s 0.818 c/B
SIV enc | 1.98 ns/B 480.9 MiB/s 4.56 c/B
SIV dec | 2.11 ns/B 452.9 MiB/s 4.84 c/B
SIV auth | 1.66 ns/B 575.4 MiB/s 3.81 c/B
GCM-SIV enc | 0.726 ns/B 1314 MiB/s 1.67 c/B
GCM-SIV dec | 0.843 ns/B 1131 MiB/s 1.94 c/B
GCM-SIV auth | 0.377 ns/B 2527 MiB/s 0.868 c/B
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Diffstat (limited to 'cipher/rijndael-ppc.c')
-rw-r--r-- | cipher/rijndael-ppc.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/cipher/rijndael-ppc.c b/cipher/rijndael-ppc.c index d16fbb40..f376e0f1 100644 --- a/cipher/rijndael-ppc.c +++ b/cipher/rijndael-ppc.c @@ -34,6 +34,19 @@ #include "rijndael-ppc-common.h" +#ifdef HAVE_GCC_ATTRIBUTE_OPTIMIZE +# define FUNC_ATTR_OPT __attribute__((optimize("-O2"))) +#else +# define FUNC_ATTR_OPT +#endif + +#ifdef HAVE_GCC_ATTRIBUTE_PPC_TARGET +# define PPC_OPT_ATTR __attribute__((target("cpu=power8"))) FUNC_ATTR_OPT +#else +# define PPC_OPT_ATTR FUNC_ATTR_OPT +#endif + + #ifndef WORDS_BIGENDIAN static const block vec_bswap32_const_neg = { ~3, ~2, ~1, ~0, ~7, ~6, ~5, ~4, ~11, ~10, ~9, ~8, ~15, ~14, ~13, ~12 }; @@ -124,7 +137,7 @@ keysched_idx(unsigned int in) } -void +void PPC_OPT_ATTR _gcry_aes_ppc8_setkey (RIJNDAEL_context *ctx, const byte *key) { u32 tk_u32[MAXKC]; @@ -179,7 +192,7 @@ _gcry_aes_ppc8_setkey (RIJNDAEL_context *ctx, const byte *key) } -void +void PPC_OPT_ATTR _gcry_aes_ppc8_prepare_decryption (RIJNDAEL_context *ctx) { internal_aes_ppc_prepare_decryption (ctx); |