[PATCH 1/3] hwf-ppc: add detection for PowerISA 3.00
Jussi Kivilinna
jussi.kivilinna at iki.fi
Sat Aug 31 01:49:37 CEST 2019
* src/g10lib.h (HWF_PPC_ARCH_3_00): New.
* src/hwf-ppc.c (feature_map_s): Remove unused 'feature_match'.
(PPC_FEATURE2_ARCH_3_00): New.
(ppc_features, get_hwcap): Add PowerISA 3.00.
* src/hwfeatures.c (hwflist): Rename "ppc-crypto" to "ppc-vcrypto"; Add
"ppc-arch_3_00".
--
Signed-off-by: Jussi Kivilinna <jussi.kivilinna at iki.fi>
---
0 files changed
diff --git a/src/g10lib.h b/src/g10lib.h
index 41e18c137..bbdaf58be 100644
--- a/src/g10lib.h
+++ b/src/g10lib.h
@@ -237,6 +237,7 @@ char **_gcry_strtokenize (const char *string, const char *delim);
#define HWF_ARM_PMULL (1 << 21)
#define HWF_PPC_VCRYPTO (1 << 22)
+#define HWF_PPC_ARCH_3_00 (1 << 23)
gpg_err_code_t _gcry_disable_hw_feature (const char *name);
void _gcry_detect_hw_features (void);
diff --git a/src/hwf-ppc.c b/src/hwf-ppc.c
index 1bf2edf70..2ed60c0f1 100644
--- a/src/hwf-ppc.c
+++ b/src/hwf-ppc.c
@@ -70,7 +70,6 @@ struct feature_map_s
{
unsigned int hwcap_flag;
unsigned int hwcap2_flag;
- const char *feature_match;
unsigned int hwf_flag;
};
@@ -87,12 +86,16 @@ struct feature_map_s
#ifndef PPC_FEATURE2_VEC_CRYPTO
# define PPC_FEATURE2_VEC_CRYPTO 0x02000000
#endif
+#ifndef PPC_FEATURE2_ARCH_3_00
+# define PPC_FEATURE2_ARCH_3_00 0x00800000
+#endif
static const struct feature_map_s ppc_features[] =
{
#ifdef ENABLE_PPC_CRYPTO_SUPPORT
- { 0, PPC_FEATURE2_VEC_CRYPTO, " crypto", HWF_PPC_VCRYPTO },
+ { 0, PPC_FEATURE2_VEC_CRYPTO, HWF_PPC_VCRYPTO },
#endif
+ { 0, PPC_FEATURE2_ARCH_3_00, HWF_PPC_ARCH_3_00 },
};
#endif
@@ -114,22 +117,23 @@ get_hwcap(unsigned int *hwcap, unsigned int *hwcap2)
}
#if 0 // TODO: configure.ac detection for __builtin_cpu_supports
-#if defined(__GLIBC__) && defined(__GNUC__)
-#if __GNUC__ >= 6
- /* Returns 0 if glibc support doesn't exist, so we can
- * only trust positive results. This function will need updating
- * if we ever need more than one cpu feature.
- */
- // TODO: fix, false if ENABLE_PPC_CRYPTO_SUPPORT
- if (sizeof(ppc_features)/sizeof(ppc_features[0]) == 0) {
- if (__builtin_cpu_supports("vcrypto")) {
- stored_hwcap = 0;
- stored_hwcap2 = PPC_FEATURE2_VEC_CRYPTO;
- hwcap_initialized = 1;
- return 0;
+ // TODO: move to 'detect_ppc_builtin_cpu_supports'
+#if defined(__GLIBC__) && defined(__GNUC__) && __GNUC__ >= 6
+ /* __builtin_cpu_supports returns 0 if glibc support doesn't exist, so
+ * we can only trust positive results. */
+#ifdef ENABLE_PPC_CRYPTO_SUPPORT
+ if (__builtin_cpu_supports("vcrypto")) /* TODO: Configure.ac */
+ {
+ stored_hwcap2 |= PPC_FEATURE2_VEC_CRYPTO;
+ hwcap_initialized = 1;
}
- }
#endif
+
+ if (__builtin_cpu_supports("arch_3_00")) /* TODO: Configure.ac */
+ {
+ stored_hwcap2 |= PPC_FEATURE2_ARCH_3_00;
+ hwcap_initialized = 1;
+ }
#endif
#endif
@@ -188,6 +192,7 @@ get_hwcap(unsigned int *hwcap, unsigned int *hwcap2)
err = 0;
fclose(f);
+
*hwcap = stored_hwcap;
*hwcap2 = stored_hwcap2;
return err;
diff --git a/src/hwfeatures.c b/src/hwfeatures.c
index fe5137538..1021bd3b1 100644
--- a/src/hwfeatures.c
+++ b/src/hwfeatures.c
@@ -67,7 +67,8 @@ static struct
{ HWF_ARM_SHA2, "arm-sha2" },
{ HWF_ARM_PMULL, "arm-pmull" },
#elif defined(HAVE_CPU_ARCH_PPC)
- { HWF_PPC_VCRYPTO, "ppc-crypto" },
+ { HWF_PPC_VCRYPTO, "ppc-vcrypto" },
+ { HWF_PPC_ARCH_3_00, "ppc-arch_3_00" },
#endif
};
More information about the Gcrypt-devel
mailing list