mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
Ensure simd types are aligned to what we assume
Turns out Clang is sensitive to the location of the alignment attribute.
This commit is contained in:
parent
c0d7960954
commit
0b8f25a036
@ -43,7 +43,7 @@ typedef struct ALIGN_DIRECTIVE {u64a hi; u64a lo;} m128;
|
|||||||
#if defined(HAVE_AVX2)
|
#if defined(HAVE_AVX2)
|
||||||
typedef __m256i m256;
|
typedef __m256i m256;
|
||||||
#else
|
#else
|
||||||
typedef ALIGN_AVX_DIRECTIVE struct {m128 lo; m128 hi;} m256;
|
typedef struct ALIGN_AVX_DIRECTIVE {m128 lo; m128 hi;} m256;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// these should align to 16 and 32 respectively
|
// these should align to 16 and 32 respectively
|
||||||
|
@ -542,6 +542,7 @@ TYPED_TEST(SimdUtilsTest, load_store) {
|
|||||||
|
|
||||||
auto mem_ptr = make_bytecode_ptr<char>(sizeof(a), alignof(TypeParam));
|
auto mem_ptr = make_bytecode_ptr<char>(sizeof(a), alignof(TypeParam));
|
||||||
char *mem = mem_ptr.get();
|
char *mem = mem_ptr.get();
|
||||||
|
|
||||||
ASSERT_EQ(0, (size_t)mem % 16U);
|
ASSERT_EQ(0, (size_t)mem % 16U);
|
||||||
|
|
||||||
memset(mem, 0, sizeof(a));
|
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) {
|
TEST(SimdUtilsTest, movq) {
|
||||||
m128 simd;
|
m128 simd;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user