[PATCH 4/6] tests/basic: add vector cluttering for ppc64

Jussi Kivilinna jussi.kivilinna at iki.fi
Tue Sep 8 13:46:40 CEST 2026


* tests/basic.c (CLUTTER_VECTOR_REGISTER_PPC): New.
(clutter_vector_registers) [CLUTTER_VECTOR_REGISTER_PPC]: Detect
ppc-arch_2_07 from hwflist; load all 64 VSX registers.
--

Signed-off-by: Jussi Kivilinna <jussi.kivilinna at iki.fi>
---
 tests/basic.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 64 insertions(+)

diff --git a/tests/basic.c b/tests/basic.c
index d9664d3c..4c5f6038 100644
--- a/tests/basic.c
+++ b/tests/basic.c
@@ -265,6 +265,11 @@ progress_handler (void *cb_data, const char *what, int printchar,
       defined(__riscv)
 # define CLUTTER_VECTOR_REGISTER_RISCV 1
 # undef CLUTTER_VECTOR_REGISTER_COUNT
+#elif defined(HAVE_COMPATIBLE_CC_PPC_ALTIVEC) && \
+      defined(HAVE_GCC_INLINE_ASM_PPC_ALTIVEC) && \
+      defined(__POWER8_VECTOR__)
+# define CLUTTER_VECTOR_REGISTER_PPC 1
+# define CLUTTER_VECTOR_REGISTER_COUNT 64
 #endif
 
 
@@ -371,6 +376,25 @@ clutter_vector_registers(void)
 
   if (!have_rvv)
     return;
+#elif defined(CLUTTER_VECTOR_REGISTER_PPC)
+  static int init;
+  static int have_ppc_vec;
+
+  if (!init)
+    {
+      char *string;
+
+      string = gcry_get_config (0, "hwflist");
+      if (string)
+	{
+	  have_ppc_vec = (strstr(string, "ppc-arch_2_07:") != NULL);
+	  xfree(string);
+	}
+      init = 1;
+    }
+
+  if (!have_ppc_vec)
+    return;
 #endif
 
 #ifdef CLUTTER_VECTOR_REGISTER_COUNT
@@ -628,6 +652,46 @@ clutter_vector_registers(void)
 		 "v20", "v21", "v22", "v23",
 		 "v24", "v25", "v26", "v27",
 		 "v28", "v29", "v30", "v31");
+#elif defined(CLUTTER_VECTOR_REGISTER_PPC)
+  #define FILL_VECS_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+	asm volatile("lxvd2x "#v0", %y0\n" \
+		     "lxvd2x "#v1", %y1\n" \
+		     "lxvd2x "#v2", %y2\n" \
+		     "lxvd2x "#v3", %y3\n" \
+		     "lxvd2x "#v4", %y4\n" \
+		     "lxvd2x "#v5", %y5\n" \
+		     "lxvd2x "#v6", %y6\n" \
+		     "lxvd2x "#v7", %y7\n" \
+		     "lxvd2x "#v8", %y8\n" \
+		     "lxvd2x "#v9", %y9\n" \
+		     : \
+		     : "Z" (data[v0][0]), "Z" (data[v1][0]), \
+		       "Z" (data[v2][0]), "Z" (data[v3][0]), \
+		       "Z" (data[v4][0]), "Z" (data[v5][0]), \
+		       "Z" (data[v6][0]), "Z" (data[v7][0]), \
+		       "Z" (data[v8][0]), "Z" (data[v9][0]) \
+		     : "vs" #v0, "vs" #v1, "vs" #v2, "vs" #v3, \
+		       "vs" #v4, "vs" #v5, "vs" #v6, "vs" #v7, \
+		       "vs" #v8, "vs" #v9, "memory");
+  #define FILL_VECS_4(v0, v1, v2, v3) \
+	asm volatile("lxvd2x "#v0", %y0\n" \
+		     "lxvd2x "#v1", %y1\n" \
+		     "lxvd2x "#v2", %y2\n" \
+		     "lxvd2x "#v3", %y3\n" \
+		     : \
+		     : "Z" (data[v0][0]), "Z" (data[v1][0]), \
+		       "Z" (data[v2][0]), "Z" (data[v3][0]) \
+		     : "vs" #v0, "vs" #v1, "vs" #v2, "vs" #v3, \
+		       "memory");
+  FILL_VECS_10(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
+  FILL_VECS_10(10, 11, 12, 13, 14, 15, 16, 17, 18, 19);
+  FILL_VECS_10(20, 21, 22, 23, 24, 25, 26, 27, 28, 29);
+  FILL_VECS_10(30, 31, 32, 33, 34, 35, 36, 37, 38, 39);
+  FILL_VECS_10(40, 41, 42, 43, 44, 45, 46, 47, 48, 49);
+  FILL_VECS_10(50, 51, 52, 53, 54, 55, 56, 57, 58, 59);
+  FILL_VECS_4(60, 61, 62, 63);
+  #undef FILL_VECS_10
+  #undef FILL_VECS_4
 #endif
 }
 
-- 
2.53.0



More information about the Gcrypt-devel mailing list