From: Michael R. Crusoe <crusoe@debian.org>
Subject: Enable compilation on non-x86, non-arm, non-powerpc
--- parasail.orig/src/cpuid.c
+++ parasail/src/cpuid.c
@@ -20,6 +20,9 @@
 
 static void run_cpuid(uint32_t eax, uint32_t ecx, uint32_t* abcd)
 {
+#if defined(__x86_64__) || defined(__i386__)
+// power & arm have their own cpuid_isa.c files
+
 #if defined(_MSC_VER)
     __cpuidex(abcd, eax, ecx);
 #else
@@ -33,6 +36,7 @@
               "+a" (eax), "+c" (ecx), "=d" (edx) );
     abcd[0] = eax; abcd[1] = ebx; abcd[2] = ecx; abcd[3] = edx;
 #endif
+#endif
 }     
 
 
@@ -42,29 +46,45 @@
 
 static int check_4th_gen_intel_core_features()
 {
+#if defined(__x86_64__) || defined(__i386__)
     const int the_4th_gen_features = 
         (_FEATURE_AVX2 | _FEATURE_FMA | _FEATURE_BMI | _FEATURE_LZCNT | _FEATURE_MOVBE);
     return _may_i_use_cpu_feature( the_4th_gen_features );
+#else
+    return 0;
+#endif
 }
 
 static int has_intel_avx512f_features()
 {
+#if defined(__x86_64__) || defined(__i386__)
     const unsigned long avx512f_features =
         (_FEATURE_AVX512F | _FEATURE_AVX512ER | _FEATURE_AVX512PF | _FEATURE_AVX512CD);
     return _may_i_use_cpu_feature( avx512f_features );
+#else
+    return 0;
+#endif
 }
 
 static int has_intel_avx512bw_features()
 {
+#if defined(__x86_64__) || defined(__i386__)
     const unsigned long avx512f_features =
         (_FEATURE_AVX512VL | _FEATURE_AVX512BW | _FEATURE_AVX512DQ);
     return _may_i_use_cpu_feature( avx512f_features );
+#else
+    return 0;
+#endif
 }
 
 static int has_intel_avx512vbmi_features()
 {
+#if defined(__x86_64__) || defined(__i386__)
     const unsigned long avx512vbmi_features = (_FEATURE_AVX512VBMI);
     return _may_i_use_cpu_feature( avx512vbmi_features );
+#else
+    return 0;
+#endif
 }
 
 #else /* non-Intel compiler */
@@ -102,6 +122,7 @@
 
 static int check_4th_gen_intel_core_features()
 {
+#if defined(__x86_64__) || defined(__i386__)
     uint32_t abcd[4];
     uint32_t fma_movbe_osxsave_mask = ((1U << 12) | (1U << 22) | (1U << 27));
     uint32_t avx2_bmi12_mask = (1U << 5) | (1U << 3) | (1U << 8);
@@ -129,9 +150,13 @@
         return 0;
 
     return 1;
+#else
+    return 0;
+#endif
 }
 
 static int has_intel_avx512f_features() {
+#if defined(__x86_64__) || defined(__i386__)
     uint32_t abcd[4];
     uint32_t osxsave_mask = (1U << 27); /* OSX. */
     uint32_t avx512f_mask = (1U << 16) | /* AVX-512F */
@@ -156,9 +181,13 @@
         return 0;
 
     return 1;
+#else
+    return 0;
+#endif
 }
 
 static int has_intel_avx512bw_features() {
+#if defined(__x86_64__) || defined(__i386__)
     uint32_t abcd[4];
     uint32_t osxsave_mask = (1U << 27); /* OSX. */
     uint32_t avx512bw_mask = (1U << 30) | /* AVX-512BW */
@@ -181,10 +210,14 @@
         return 0;
 
     return 1;
+#else
+    return 0;
+#endif
 }
 
 static int has_intel_avx512vbmi_features()
 {
+#if defined(__x86_64__) || defined(__i386__)
     uint32_t abcd[4];
     uint32_t osxsave_mask = (1U << 27); /* OSX. */
     uint32_t avx512vbmi_mask = (1U << 1); /* AVX-512VBMI */
@@ -203,6 +236,9 @@
         return 0;
 
     return 1;
+#else
+    return 0;
+#endif
 }
 
 #endif /* non-Intel compiler */
@@ -210,6 +246,7 @@
 
 static int check_sse41()
 {
+#if defined(__x86_64__) || defined(__i386__)
     uint32_t info[4];
     uint32_t nIds;
 
@@ -223,11 +260,15 @@
     }
 
     return 0;
+#else
+    return 0;
+#endif
 }
 
 
 static int check_sse2()
 {
+#if defined(__x86_64__) || defined(__i386__)
     uint32_t info[4];
     uint32_t nIds;
 
@@ -241,64 +282,91 @@
     }
 
     return 0;
+#else
+    return 0;
+#endif
 }
 
 
 int parasail_can_use_avx512vbmi()
 {
+#if defined(__x86_64__) || defined(__i386__)
     static int avx512vbmi_features_available = -1;
     /* test is performed once */
     if (avx512vbmi_features_available < 0 )
         avx512vbmi_features_available = has_intel_avx512vbmi_features();
     return avx512vbmi_features_available;
+#else
+    return 0;
+#endif
 }
 
 int parasail_can_use_avx512bw()
 {
+#if defined(__x86_64__) || defined(__i386__)
     static int avx512bw_features_available = -1;
     /* test is performed once */
     if (avx512bw_features_available < 0 )
         avx512bw_features_available = has_intel_avx512bw_features();
     return avx512bw_features_available;
+#else
+    return 0;
+#endif
 }
 
 int parasail_can_use_avx512f()
 {
+#if defined(__x86_64__) || defined(__i386__)
     static int avx512f_features_available = -1;
     /* test is performed once */
     if (avx512f_features_available < 0 )
         avx512f_features_available = has_intel_avx512f_features();
     return avx512f_features_available;
+#else
+    return 0;
+#endif
 }
 
 int parasail_can_use_avx2()
 {
+#if defined(__x86_64__) || defined(__i386__)
     static int the_4th_gen_features_available = -1;
     /* test is performed once */
     if (the_4th_gen_features_available < 0 )
         the_4th_gen_features_available = check_4th_gen_intel_core_features();
 
     return the_4th_gen_features_available;
+#else
+    return 0;
+#endif
 }
 
 int parasail_can_use_sse41()
 {
+#if defined(__x86_64__) || defined(__i386__)
     static int can_use_sse41 = -1;
     /* test is performed once */
     if (can_use_sse41 < 0)
         can_use_sse41 = check_sse41();
 
     return can_use_sse41;
+#else
+    return 0;
+#endif
 }
 
 int parasail_can_use_sse2()
 {
+#if defined(__x86_64__) || defined(__i386__)
     static int can_use_sse2 = -1;
     /* test is performed once */
     if (can_use_sse2 < 0)
         can_use_sse2 = check_sse2();
 
     return can_use_sse2;
+#else
+    return 0;
+#endif
 }
 
 int parasail_can_use_altivec()
