diff options
author | José Fonseca <[email protected]> | 2010-08-09 16:41:44 +0100 |
---|---|---|
committer | José Fonseca <[email protected]> | 2010-08-09 17:31:18 +0100 |
commit | 65b9747a54490dd56cd5cee4c2c1b9f51d35f133 (patch) | |
tree | 1a58d478a276e2575fe5e45a95252f42b68933bb /src/gallium/auxiliary | |
parent | 95fb0bf58dde0b81ce601d3f0477fd1b2a5a28d4 (diff) |
util: Move _mm_shuffle_epi8() to u_sse.h.
It's bound to be useful elsewhere.
Diffstat (limited to 'src/gallium/auxiliary')
-rw-r--r-- | src/gallium/auxiliary/util/u_sse.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/util/u_sse.h b/src/gallium/auxiliary/util/u_sse.h index 6145e34aa3f..87959ab0aab 100644 --- a/src/gallium/auxiliary/util/u_sse.h +++ b/src/gallium/auxiliary/util/u_sse.h @@ -71,6 +71,35 @@ _mm_castps_si128(__m128 a) #endif /* defined(_MSC_VER) && _MSC_VER < 1500 */ + +#if defined(PIPE_ARCH_SSSE3) + +#include <tmmintrin.h> + +#else /* !PIPE_ARCH_SSSE3 */ + +#include <emmintrin.h> + +/** + * Describe _mm_shuffle_epi8() with gcc extended inline assembly, for cases + * where -mssse3 is not supported/enabled. + * + * MSVC will never get in here as its intrinsics support do not rely on + * compiler command line options. + */ +static __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) +_mm_shuffle_epi8(__m128i a, __m128i mask) +{ + __m128i result; + __asm__("pshufb %1, %0" + : "=x" (result) + : "xm" (mask), "0" (a)); + return result; +} + +#endif /* !PIPE_ARCH_SSSE3 */ + + #endif /* PIPE_ARCH_X86 || PIPE_ARCH_X86_64 */ #endif /* U_SSE_H_ */ |