diff options
author | Deepankar Bhattacharjee <deepankar.b@in.ibm.com> | 2021-09-20 10:45:15 -0400 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2022-11-11 10:04:10 +0100 |
commit | 41e2d8784195d4a1c730fea9f3c197f34a11cb97 (patch) | |
tree | 2cc2ef2c8ab0147659e8df95b02bd13213a774f0 /crypto/ppccap.c | |
parent | 659b645d15dbd189a27c64658dd3b6e6f4a426a8 (diff) |
chacha20 performance optimizations for ppc64le with 8x lanes,
Performance increase around 50%.
Co-authored-by: Madhusudhanan Duraisamy <madurais@in.ibm.com>
Co-authored-by: Nilamjyoti Goswami <nilamgoswami@in.ibm.com>
Co-authored-by: Siva Sundar Anbareeswaran <srisivasundar@in.ibm.com>
Reviewed-by: Danny Tsen <dtsen@us.ibm.com>
Tested-by: Danny Tsen <dtsen@us.ibm.com>
Signed-off-by: Danny <dtsen@us.ibm.com>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/16637)
(cherry picked from commit f596bbe4da779b56eea34d96168b557d78e1149a)
Diffstat (limited to 'crypto/ppccap.c')
-rw-r--r-- | crypto/ppccap.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/crypto/ppccap.c b/crypto/ppccap.c index 7d7634138f..3538435d21 100644 --- a/crypto/ppccap.c +++ b/crypto/ppccap.c @@ -45,6 +45,7 @@ void OPENSSL_ppc64_probe(void); void OPENSSL_altivec_probe(void); void OPENSSL_crypto207_probe(void); void OPENSSL_madd300_probe(void); +void OPENSSL_brd31_probe(void); long OPENSSL_rdtsc_mftb(void); long OPENSSL_rdtsc_mfspr268(void); @@ -131,6 +132,7 @@ static unsigned long getauxval(unsigned long key) #endif #define HWCAP_VEC_CRYPTO (1U << 25) #define HWCAP_ARCH_3_00 (1U << 23) +#define HWCAP_ARCH_3_1 (1U << 18) # if defined(__GNUC__) && __GNUC__>=2 __attribute__ ((constructor)) @@ -191,6 +193,9 @@ void OPENSSL_cpuid_setup(void) if (__power_set(0xffffffffU<<17)) /* POWER9 and later */ OPENSSL_ppccap_P |= PPC_MADD300; + if (__power_set(0xffffffffU<<18)) /* POWER10 and later */ + OPENSSL_ppccap_P |= PPC_BRD31; + return; # endif #endif @@ -246,6 +251,10 @@ void OPENSSL_cpuid_setup(void) if (hwcap2 & HWCAP_ARCH_3_00) { OPENSSL_ppccap_P |= PPC_MADD300; } + + if (hwcap2 & HWCAP_ARCH_3_1) { + OPENSSL_ppccap_P |= PPC_BRD31; + } } #endif |