[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