comparison src/impl/x86/avx2.c @ 24:e49e70f7012f

impl/x86: add static assertions for alignment and size
author Paper <paper@tflc.us>
date Sun, 24 Nov 2024 03:32:53 -0500
parents e26874655738
children
comparison
equal deleted inserted replaced
23:e26874655738 24:e49e70f7012f
107 #define VEC_AVX2_DEFINE_OPERATIONS_SIGN(sign, bits, size) \ 107 #define VEC_AVX2_DEFINE_OPERATIONS_SIGN(sign, bits, size) \
108 union v##sign##int##bits##x##size##_impl_data { \ 108 union v##sign##int##bits##x##size##_impl_data { \
109 v##sign##int##bits##x##size vec; \ 109 v##sign##int##bits##x##size vec; \
110 __m256i avx2; \ 110 __m256i avx2; \
111 }; \ 111 }; \
112 \
113 VEC_STATIC_ASSERT(VEC_ALIGNOF(__m256i) <= VEC_ALIGNOF(v##sign##int##bits##x##size), "vec: v" #sign "int" #bits "x" #size " alignment needs to be expanded to fit intrinsic type size"); \
114 VEC_STATIC_ASSERT(sizeof(__m256i) <= sizeof(v##sign##int##bits##x##size), "vec: v" #sign "int" #bits "x" #size " needs to be expanded to fit intrinsic type size"); \
112 \ 115 \
113 static v##sign##int##bits##x##size v##sign##int##bits##x##size##_avx2_load_aligned(const vec_##sign##int##bits in[size]) \ 116 static v##sign##int##bits##x##size v##sign##int##bits##x##size##_avx2_load_aligned(const vec_##sign##int##bits in[size]) \
114 { \ 117 { \
115 union v##sign##int##bits##x##size##_impl_data vec; \ 118 union v##sign##int##bits##x##size##_impl_data vec; \
116 vec.avx2 = _mm256_load_si256((const __m256i *)in); \ 119 vec.avx2 = _mm256_load_si256((const __m256i *)in); \