--- common/ppc/ppccommon.h	2021-01-10 14:00:05.489543000 -0500
+++ common/ppc/ppccommon.h	2021-01-10 14:03:38.828554000 -0500
@@ -90,6 +90,37 @@
   vec_s8_t v;
 } vec_s8_u;
 
+// vec_xxpermdi is quite useful but some version of clang do not expose it
+#if !HAVE_VSX || (defined(__clang__) && __clang_major__ < 6)
+static const vec_u8_t xxpermdi0_perm = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
+                                         0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
+                                         0x14, 0x15, 0x16, 0x17 };
+static const vec_u8_t xxpermdi1_perm = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
+                                         0x06, 0x07, 0x18, 0x19, 0x1A, 0x1B,
+                                         0x1C, 0x1D, 0x1E, 0x1F };
+static const vec_u8_t xxpermdi2_perm = { 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
+                                         0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13,
+                                         0x14, 0x15, 0x16, 0x17 };
+static const vec_u8_t xxpermdi3_perm = { 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
+                                         0x0E, 0x0F, 0x18, 0x19, 0x1A, 0x1B,
+                                         0x1C, 0x1D, 0x1E, 0x1F };
+#define xxpermdi(a, b, c) vec_perm(a, b, xxpermdi##c##_perm)
+#elif (defined(__GNUC__) && (__GNUC__ > 6 || (__GNUC__ == 6 && __GNUC_MINOR__ >= 3))) || \
+      (defined(__clang__) && __clang_major__ >= 7) && __POWER7_VECTOR__ 
+#define xxpermdi(a, b, c) vec_xxpermdi(a, b, c)
+#endif
+
+// vec_xxpermdi has its endianness bias exposed in early gcc and clang
+#ifdef WORDS_BIGENDIAN
+#ifndef xxpermdi
+#define xxpermdi(a, b, c) vec_xxpermdi(a, b, c)
+#endif
+#else
+#ifndef xxpermdi
+#define xxpermdi(a, b, c) vec_xxpermdi(b, a, ((c >> 1) | (c & 1) << 1) ^ 3)
+#endif
+#endif
+
 /***********************************************************************
  * Null vector
  **********************************************************************/
@@ -150,7 +181,7 @@
  **********************************************************************/
 #ifndef __POWER9_VECTOR__
 #define VEC_STORE8( v, p ) \
-    vec_vsx_st( vec_xxpermdi( v, vec_vsx_ld( 0, p ), 1 ), 0, p )
+    vec_vsx_st( xxpermdi( v, vec_vsx_ld( 0, p ), 1 ), 0, p )
 #else
 #define VEC_STORE8( v, p ) vec_xst_len( v, p, 8 )
 #endif
@@ -304,33 +335,3 @@
 #define vec_absd( a, b ) vec_sub( vec_max( a, b ), vec_min( a, b ) )
 #endif
 
-// vec_xxpermdi is quite useful but some version of clang do not expose it
-#if !HAVE_VSX || (defined(__clang__) && __clang_major__ < 6)
-static const vec_u8_t xxpermdi0_perm = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
-                                         0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
-                                         0x14, 0x15, 0x16, 0x17 };
-static const vec_u8_t xxpermdi1_perm = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
-                                         0x06, 0x07, 0x18, 0x19, 0x1A, 0x1B,
-                                         0x1C, 0x1D, 0x1E, 0x1F };
-static const vec_u8_t xxpermdi2_perm = { 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
-                                         0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13,
-                                         0x14, 0x15, 0x16, 0x17 };
-static const vec_u8_t xxpermdi3_perm = { 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
-                                         0x0E, 0x0F, 0x18, 0x19, 0x1A, 0x1B,
-                                         0x1C, 0x1D, 0x1E, 0x1F };
-#define xxpermdi(a, b, c) vec_perm(a, b, xxpermdi##c##_perm)
-#elif (defined(__GNUC__) && (__GNUC__ > 6 || (__GNUC__ == 6 && __GNUC_MINOR__ >= 3))) || \
-      (defined(__clang__) && __clang_major__ >= 7)
-#define xxpermdi(a, b, c) vec_xxpermdi(a, b, c)
-#endif
-
-// vec_xxpermdi has its endianness bias exposed in early gcc and clang
-#ifdef WORDS_BIGENDIAN
-#ifndef xxpermdi
-#define xxpermdi(a, b, c) vec_xxpermdi(a, b, c)
-#endif
-#else
-#ifndef xxpermdi
-#define xxpermdi(a, b, c) vec_xxpermdi(b, a, ((c >> 1) | (c & 1) << 1) ^ 3)
-#endif
-#endif
