diff --git a/src/field/Field.impl.h b/src/field/Field.impl.h index a70bdf813d071293c4c20674ac307a4221db66c5..20ee14bb95a2df3b50975f42c7ce96fb047c1dcf 100644 --- a/src/field/Field.impl.h +++ b/src/field/Field.impl.h @@ -316,14 +316,20 @@ namespace field { // Automatically select allocator if none was given if ( alloc == nullptr ) { -#ifdef __BIGGEST_ALIGNMENT__ - const uint_t alignment = __BIGGEST_ALIGNMENT__; +#if defined(__ARM_FEATURE_SVE) && defined(__ARM_FEATURE_SVE_BITS) && __ARM_FEATURE_SVE_BITS > 0 + const uint_t alignment = __ARM_FEATURE_SVE_BITS/8; +#elif defined(__ARM_FEATURE_SVE) + const uint_t alignment = 64; +#elif defined(__ARM_NEON) + const uint_t alignment = 16; #elif defined(__AVX512F__) const uint_t alignment = 64; #elif defined(__AVX__) const uint_t alignment = 32; #elif defined(__SSE__) || defined(_MSC_VER) const uint_t alignment = 16; +#elif defined(__BIGGEST_ALIGNMENT__) + const uint_t alignment = __BIGGEST_ALIGNMENT__; #else const uint_t alignment = 64; #endif