diff test/test_align.h @ 45:7955bed1d169 default tip

*: add preliminary floating point support no x86 intrinsics just yet, but I did add altivec since it's (arguably) the simplest :)
author Paper <paper@tflc.us>
date Wed, 30 Apr 2025 18:36:38 -0400
parents 641d8c79b1da
children
line wrap: on
line diff
--- a/test/test_align.h	Tue Apr 29 16:54:13 2025 -0400
+++ b/test/test_align.h	Wed Apr 30 18:36:38 2025 -0400
@@ -2,34 +2,35 @@
 {
 	int ret = 0;
 
-#define RUN_TEST(sign, csign, bits, size) \
+#define RUN_TEST(type, ctype, bits, size) \
 	do { \
+		int i; \
 		/* allocate the aligned array */ \
-		V##csign##INT##bits##x##size##_ALIGNED_ARRAY(vec_arr); \
+		V##ctype##bits##x##size##_ALIGNED_ARRAY(vec_arr); \
 	\
 		/* fill the values */ \
-		for (int i = 0; i < size; i++) \
+		for (i = 0; i < size; i++) \
 			vec_arr[i] = i; \
 	\
 		/* try to load it */ \
-		v##sign##int##bits##x##size vec = v##sign##int##bits##x##size##_load_aligned(vec_arr); \
+		v##type##bits##x##size vec = v##type##bits##x##size##_load(vec_arr); \
 	\
 		/* now allocate an output array */ \
-		V##csign##INT##bits##x##size##_ALIGNED_ARRAY(vec_arr_out); \
+		V##ctype##bits##x##size##_ALIGNED_ARRAY(vec_arr_out); \
 	\
 		/* try storing it */ \
-		v##sign##int##bits##x##size##_store_aligned(vec, vec_arr_out); \
+		v##type##bits##x##size##_store_aligned(vec, vec_arr_out); \
 	\
 		/* mark success or failure */ \
-		ret |= !!memcmp(vec_arr, vec_arr_out, size * sizeof(*vec_arr)); \
+		ret |= !!memcmp(vec_arr, vec_arr_out, size * (bits / 8)); \
 	\
-		ret |= !V##csign##INT##bits##x##size##_PTR_ALIGNED(vec_arr); \
-		ret |= !V##csign##INT##bits##x##size##_PTR_ALIGNED(vec_arr_out); \
+		ret |= !V##ctype##bits##x##size##_PTR_ALIGNED(vec_arr); \
+		ret |= !V##ctype##bits##x##size##_PTR_ALIGNED(vec_arr_out); \
 	} while (0);
 
 #define RUN_TESTS(bits, size) \
-	RUN_TEST( ,  , bits, size) \
-	RUN_TEST(u, U, bits, size)
+	RUN_TEST(int, INT, bits, size) \
+	RUN_TEST(uint, UINT, bits, size)
 
 	RUN_TESTS(8, 2)
 
@@ -56,6 +57,17 @@
 	RUN_TESTS(64, 8)
 
 #undef RUN_TESTS
+
+	/* floating point */
+	RUN_TEST(f, F, 32, 2)
+	RUN_TEST(f, F, 32, 4)
+	RUN_TEST(f, F, 32, 8)
+	RUN_TEST(f, F, 32, 16)
+
+	RUN_TEST(f, F, 64, 2)
+	RUN_TEST(f, F, 64, 4)
+	RUN_TEST(f, F, 64, 8)
+
 #undef RUN_TEST
 
 	return ret;