summaryrefslogtreecommitdiffstats
path: root/crypto/ppccap.c
diff options
context:
space:
mode:
authorDeepankar Bhattacharjee <deepankar.b@in.ibm.com>2021-09-20 10:45:15 -0400
committerTomas Mraz <tomas@openssl.org>2022-11-11 10:04:10 +0100
commit41e2d8784195d4a1c730fea9f3c197f34a11cb97 (patch)
tree2cc2ef2c8ab0147659e8df95b02bd13213a774f0 /crypto/ppccap.c
parent659b645d15dbd189a27c64658dd3b6e6f4a426a8 (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.c9
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