diff include/vec/impl/fallback.h @ 17:41dd962abdd1

*: allow compiling vec in a C++ translation unit this is stupid, but whatever
author Paper <paper@tflc.us>
date Wed, 20 Nov 2024 12:02:15 -0500
parents e05c257c6a23
children e26874655738
line wrap: on
line diff
--- a/include/vec/impl/fallback.h	Wed Nov 20 04:16:56 2024 -0500
+++ b/include/vec/impl/fallback.h	Wed Nov 20 12:02:15 2024 -0500
@@ -25,6 +25,8 @@
 #ifndef VEC_IMPL_FALLBACK_H_
 #define VEC_IMPL_FALLBACK_H_
 
+#include <string.h>
+
 // Fallback implementations - this is what an implementation should use if it
 // doesn't support a specific function. Note that the load_aligned and
 // store_aligned functions are not implemented here - this is on purpose;
@@ -60,25 +62,25 @@
 	} while (0)
 
 #define VEC_DEFINE_FALLBACK_OPERATIONS_SIGN(sign, csign, bits, size) \
-	static v##sign##int##bits##x##size v##sign##int##bits##x##size##_fallback_splat(sign##int##bits##_t x) \
+	static v##sign##int##bits##x##size v##sign##int##bits##x##size##_fallback_splat(vec_##sign##int##bits x) \
 	{ \
 		V##csign##INT##bits##x##size##_ALIGNED_ARRAY(arr); \
 		for (int i = 0; i < size; i++) arr[i] = x; \
 		return v##sign##int##bits##x##size##_load_aligned(arr); \
 	} \
 	\
-	static v##sign##int##bits##x##size v##sign##int##bits##x##size##_fallback_load(const sign##int##bits##_t in[size]) \
+	static v##sign##int##bits##x##size v##sign##int##bits##x##size##_fallback_load(const vec_##sign##int##bits in[size]) \
 	{ \
 		V##csign##INT##bits##x##size##_ALIGNED_ARRAY(arr); \
-		memcpy(arr, in, sizeof(sign##int##bits##_t) * size); \
+		memcpy(arr, in, sizeof(vec_##sign##int##bits) * size); \
 		return v##sign##int##bits##x##size##_load_aligned(arr); \
 	} \
 	\
-	static v##sign##int##bits##x##size v##sign##int##bits##x##size##_fallback_store(v##sign##int##bits##x##size vec, sign##int##bits##_t out[size]) \
+	static void v##sign##int##bits##x##size##_fallback_store(v##sign##int##bits##x##size vec, vec_##sign##int##bits out[size]) \
 	{ \
 		V##csign##INT##bits##x##size##_ALIGNED_ARRAY(arr); \
 		v##sign##int##bits##x##size##_store_aligned(vec, arr); \
-		memcpy(out, arr, sizeof(sign##int##bits##_t) * size); \
+		memcpy(out, arr, sizeof(vec_##sign##int##bits) * size); \
 	} \
 	\
 	static v##sign##int##bits##x##size v##sign##int##bits##x##size##_fallback_add(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \
@@ -123,7 +125,7 @@
 	\
 	static v##sign##int##bits##x##size v##sign##int##bits##x##size##_fallback_not(v##sign##int##bits##x##size vec) \
 	{ \
-		return v##sign##int##bits##x##size##_xor(vec, v##sign##int##bits##x##size##_splat((sign##int##bits##_t)UINT##bits##_MAX)); \
+		return v##sign##int##bits##x##size##_xor(vec, v##sign##int##bits##x##size##_splat((vec_##sign##int##bits)UINT##bits##_MAX)); \
 	} \
 	\
 	static v##sign##int##bits##x##size v##sign##int##bits##x##size##_fallback_cmplt(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \
@@ -170,6 +172,13 @@
 	VEC_DEFINE_FALLBACK_OPERATIONS_SIGN( ,  , bits, size) \
 	VEC_DEFINE_FALLBACK_OPERATIONS_SIGN(u, U, bits, size)
 
+// 16-bit
+VEC_DEFINE_FALLBACK_OPERATIONS(8, 2)
+
+// 32-bit
+VEC_DEFINE_FALLBACK_OPERATIONS(8, 4)
+VEC_DEFINE_FALLBACK_OPERATIONS(16, 2)
+
 // 64-bit
 VEC_DEFINE_FALLBACK_OPERATIONS(8, 8)
 VEC_DEFINE_FALLBACK_OPERATIONS(16, 4)