Commit db7d8fb8 authored by Evan Nemerson's avatar Evan Nemerson

sse: cast _MM_HINT_* values to enum _mm_hint on GCC

_mm_prefetch is supposed to take an int, but when optimization enabled
GCC uses an enum _mm_hint instead.  Without optimization _mm_prefetch
is defined as a macro (as it is on clang) since there is no constant
propagation.

Since we can't rely on all hints being defined on all platforms we
define our own, which are not part of the enum _mm_hint.  So, on GCC
we cast each of the hints to enum _mm_hint to avoid a warning about
an invalid conversion.

IMHO this is technically a bug in the GCC API, but I appreciate the
effort at getting the compiler to validate the input so I'm not going
to complain to the GCC folks as long as this doesn't cause additional
breakage.

Fixes #673
parent 53ef0cbc
...@@ -3092,14 +3092,25 @@ simde_mm_mulhi_pu16 (simde__m64 a, simde__m64 b) { ...@@ -3092,14 +3092,25 @@ simde_mm_mulhi_pu16 (simde__m64 a, simde__m64 b) {
# define _m_pmulhuw(a, b) simde_mm_mulhi_pu16(a, b) # define _m_pmulhuw(a, b) simde_mm_mulhi_pu16(a, b)
#endif #endif
#define SIMDE_MM_HINT_NTA 0 #if defined(SIMDE_X86_SSE_NATIVE) && defined(HEDLEY_GCC_VERSION)
#define SIMDE_MM_HINT_T0 1 #define SIMDE_MM_HINT_NTA HEDLEY_STATIC_CAST(enum _mm_hint, 0)
#define SIMDE_MM_HINT_T1 2 #define SIMDE_MM_HINT_T0 HEDLEY_STATIC_CAST(enum _mm_hint, 1)
#define SIMDE_MM_HINT_T2 3 #define SIMDE_MM_HINT_T1 HEDLEY_STATIC_CAST(enum _mm_hint, 2)
#define SIMDE_MM_HINT_ENTA 4 #define SIMDE_MM_HINT_T2 HEDLEY_STATIC_CAST(enum _mm_hint, 3)
#define SIMDE_MM_HINT_ET0 5 #define SIMDE_MM_HINT_ENTA HEDLEY_STATIC_CAST(enum _mm_hint, 4)
#define SIMDE_MM_HINT_ET1 6 #define SIMDE_MM_HINT_ET0 HEDLEY_STATIC_CAST(enum _mm_hint, 5)
#define SIMDE_MM_HINT_ET2 7 #define SIMDE_MM_HINT_ET1 HEDLEY_STATIC_CAST(enum _mm_hint, 6)
#define SIMDE_MM_HINT_ET2 HEDLEY_STATIC_CAST(enum _mm_hint, 7)
#else
#define SIMDE_MM_HINT_NTA 0
#define SIMDE_MM_HINT_T0 1
#define SIMDE_MM_HINT_T1 2
#define SIMDE_MM_HINT_T2 3
#define SIMDE_MM_HINT_ENTA 4
#define SIMDE_MM_HINT_ET0 5
#define SIMDE_MM_HINT_ET1 6
#define SIMDE_MM_HINT_ET2 7
#endif
#if defined(SIMDE_X86_SSE_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_X86_SSE_ENABLE_NATIVE_ALIASES)
HEDLEY_DIAGNOSTIC_PUSH HEDLEY_DIAGNOSTIC_PUSH
......
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