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
committerPauli <ppzgs1@gmail.com>2022-02-22 16:58:55 +1100
commitf596bbe4da779b56eea34d96168b557d78e1149a (patch)
tree9371dd2979f2d8bfecc72b81034c0d10d3e5bfd0 /crypto/ppccap.c
parent7b3041eba1c6e177eede0d6311d53a6b9ff58051 (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.c9
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