Mercurial > vec
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)