Commit faf22893 authored by Michael R. Crusoe's avatar Michael R. Crusoe

avx512/loadu: fix native detection

parent b3341922
...@@ -76,43 +76,49 @@ simde_mm512_loadu_pd (void const * mem_addr) { ...@@ -76,43 +76,49 @@ simde_mm512_loadu_pd (void const * mem_addr) {
SIMDE_FUNCTION_ATTRIBUTES SIMDE_FUNCTION_ATTRIBUTES
simde__m512i simde__m512i
simde_mm512_loadu_si512 (void const * mem_addr) { simde_mm512_loadu_si512 (void const * mem_addr) {
#if defined(SIMDE_X86_AVX512F_NATIVE) simde__m512i r;
return _mm512_loadu_si512(HEDLEY_REINTERPRET_CAST(void const*, mem_addr)); #if HEDLEY_GNUC_HAS_ATTRIBUTE(may_alias,3,3,0)
HEDLEY_DIAGNOSTIC_PUSH
SIMDE_DIAGNOSTIC_DISABLE_PACKED_
struct simde_mm512_loadu_si512_s {
__typeof__(r) v;
} __attribute__((__packed__, __may_alias__));
r = HEDLEY_REINTERPRET_CAST(const struct simde_mm512_loadu_si512_s *, mem_addr)->v;
HEDLEY_DIAGNOSTIC_POP
#else #else
simde__m512i r; simde_memcpy(&r, mem_addr, sizeof(r));
#if HEDLEY_GNUC_HAS_ATTRIBUTE(may_alias,3,3,0)
HEDLEY_DIAGNOSTIC_PUSH
SIMDE_DIAGNOSTIC_DISABLE_PACKED_
struct simde_mm512_loadu_si512_s {
__typeof__(r) v;
} __attribute__((__packed__, __may_alias__));
r = HEDLEY_REINTERPRET_CAST(const struct simde_mm512_loadu_si512_s *, mem_addr)->v;
HEDLEY_DIAGNOSTIC_POP
#else
simde_memcpy(&r, mem_addr, sizeof(r));
#endif
return r;
#endif #endif
return r;
} }
#define simde_mm512_loadu_epi8(mem_addr) simde_mm512_loadu_si512(mem_addr) #if defined(SIMDE_X86_AVX512F_NATIVE) && (!defined(__clang__) || SIMDE_DETECT_CLANG_VERSION_CHECK(8,0,0))
#define simde_mm512_loadu_epi16(mem_addr) simde_mm512_loadu_si512(mem_addr) #define simde_mm512_loadu_si512(mem_addr) _mm512_loadu_si512(mem_addr)
#define simde_mm512_loadu_epi32(mem_addr) simde_mm512_loadu_si512(mem_addr) #define simde_mm512_loadu_epi32(mem_addr) _mm512_loadu_epi32(mem_addr)
#define simde_mm512_loadu_epi64(mem_addr) simde_mm512_loadu_si512(mem_addr) #define simde_mm512_loadu_epi64(mem_addr) _mm512_loadu_epi64(mem_addr)
#else
#define simde_mm512_loadu_epi32(mem_addr) simde_mm512_loadu_si512(mem_addr)
#define simde_mm512_loadu_epi64(mem_addr) simde_mm512_loadu_si512(mem_addr)
#endif
#if defined(SIMDE_X86_AVX512BW_NATIVE) && (!defined(HEDLEY_GCC_VERSION) || HEDLEY_GCC_VERSION_CHECK(11,0,0)) && (!defined(__clang__) || SIMDE_DETECT_CLANG_VERSION_CHECK(8,0,0))
#define simde_mm512_loadu_epi8(mem_addr) _mm512_loadu_epi8(mem_addr)
#define simde_mm512_loadu_epi16(mem_addr) _mm512_loadu_epi16(mem_addr)
#else
#define simde_mm512_loadu_epi8(mem_addr) simde_mm512_loadu_si512(mem_addr)
#define simde_mm512_loadu_epi16(mem_addr) simde_mm512_loadu_si512(mem_addr)
#endif
#if defined(SIMDE_X86_AVX512BW_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_X86_AVX512BW_ENABLE_NATIVE_ALIASES)
#undef _mm512_loadu_epi8 #undef _mm512_loadu_epi8
#undef _mm512_loadu_epi16 #undef _mm512_loadu_epi16
#define _mm512_loadu_epi8(a) simde_mm512_loadu_si512(a) #define _mm512_loadu_epi8(a) simde_mm512_loadu_epi8(a)
#define _mm512_loadu_epi16(a) simde_mm512_loadu_si512(a) #define _mm512_loadu_epi16(a) simde_mm512_loadu_epi16(a)
#endif #endif
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_loadu_epi32 #undef _mm512_loadu_epi32
#undef _mm512_loadu_epi64 #undef _mm512_loadu_epi64
#undef _mm512_loadu_si512 #undef _mm512_loadu_si512
#define _mm512_loadu_si512(a) simde_mm512_loadu_si512(a) #define _mm512_loadu_si512(a) simde_mm512_loadu_si512(a)
#define _mm512_loadu_epi32(a) simde_mm512_loadu_si512(a) #define _mm512_loadu_epi32(a) simde_mm512_loadu_epi32(a)
#define _mm512_loadu_epi64(a) simde_mm512_loadu_si512(a) #define _mm512_loadu_epi64(a) simde_mm512_loadu_epi64(a)
#endif #endif
SIMDE_FUNCTION_ATTRIBUTES SIMDE_FUNCTION_ATTRIBUTES
......
...@@ -401,7 +401,7 @@ SIMDE_FUNCTION_ATTRIBUTES ...@@ -401,7 +401,7 @@ SIMDE_FUNCTION_ATTRIBUTES
simde__m512i simde__m512i
simde_x_mm512_set_m128i (simde__m128i a, simde__m128i b, simde__m128i c, simde__m128i d) { simde_x_mm512_set_m128i (simde__m128i a, simde__m128i b, simde__m128i c, simde__m128i d) {
#if defined(SIMDE_X86_AVX512F_NATIVE) #if defined(SIMDE_X86_AVX512F_NATIVE)
SIMDE_ALIGN_LIKE_16(simde__m128i) simde__m128i v[] = { d, c, b, a }; SIMDE_ALIGN_TO_64 simde__m128i v[] = { d, c, b, a };
return simde_mm512_load_si512(HEDLEY_STATIC_CAST(__m512i *, HEDLEY_STATIC_CAST(void *, v))); return simde_mm512_load_si512(HEDLEY_STATIC_CAST(__m512i *, HEDLEY_STATIC_CAST(void *, v)));
#else #else
simde__m512i_private r_; simde__m512i_private r_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment