diff --git a/src/util/simd_types.h b/src/util/simd_types.h index a6c87db7..64844dcb 100644 --- a/src/util/simd_types.h +++ b/src/util/simd_types.h @@ -43,7 +43,7 @@ typedef struct ALIGN_DIRECTIVE {u64a hi; u64a lo;} m128; #if defined(HAVE_AVX2) typedef __m256i m256; #else -typedef ALIGN_AVX_DIRECTIVE struct {m128 lo; m128 hi;} m256; +typedef struct ALIGN_AVX_DIRECTIVE {m128 lo; m128 hi;} m256; #endif // these should align to 16 and 32 respectively diff --git a/unit/internal/simd_utils.cpp b/unit/internal/simd_utils.cpp index 220d2a12..dac3722e 100644 --- a/unit/internal/simd_utils.cpp +++ b/unit/internal/simd_utils.cpp @@ -542,6 +542,7 @@ TYPED_TEST(SimdUtilsTest, load_store) { auto mem_ptr = make_bytecode_ptr(sizeof(a), alignof(TypeParam)); char *mem = mem_ptr.get(); + ASSERT_EQ(0, (size_t)mem % 16U); memset(mem, 0, sizeof(a)); @@ -585,6 +586,13 @@ TYPED_TEST(SimdUtilsTest, loadbytes_storebytes) { } } +TEST(SimdUtilsTest, alignment) { + ASSERT_EQ(16, alignof(m128)); + ASSERT_EQ(32, alignof(m256)); + ASSERT_EQ(16, alignof(m384)); + ASSERT_EQ(32, alignof(m512)); +} + TEST(SimdUtilsTest, movq) { m128 simd;