diff options
author | Deepankar Bhattacharjee <deepankar.b@in.ibm.com> | 2021-09-20 10:45:15 -0400 |
---|---|---|
committer | Pauli <ppzgs1@gmail.com> | 2022-02-22 16:58:55 +1100 |
commit | f596bbe4da779b56eea34d96168b557d78e1149a (patch) | |
tree | 9371dd2979f2d8bfecc72b81034c0d10d3e5bfd0 /crypto/ppccap.c | |
parent | 7b3041eba1c6e177eede0d6311d53a6b9ff58051 (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)
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 da371a5345..664627c1af 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 |