diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/Headers/emmintrin.h')
-rw-r--r-- | contrib/llvm/tools/clang/lib/Headers/emmintrin.h | 56 |
1 files changed, 33 insertions, 23 deletions
diff --git a/contrib/llvm/tools/clang/lib/Headers/emmintrin.h b/contrib/llvm/tools/clang/lib/Headers/emmintrin.h index 903cfde..e10b77d 100644 --- a/contrib/llvm/tools/clang/lib/Headers/emmintrin.h +++ b/contrib/llvm/tools/clang/lib/Headers/emmintrin.h @@ -821,8 +821,9 @@ _mm_xor_si128(__m128i a, __m128i b) return a ^ b; } -#define _mm_slli_si128(VEC, IMM) \ - ((__m128i)__builtin_ia32_pslldqi128((__m128i)(VEC), (IMM)*8)) +#define _mm_slli_si128(a, count) __extension__ ({ \ + __m128i __a = (a); \ + (__m128i)__builtin_ia32_pslldqi128(__a, (count)*8); }) static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) _mm_slli_epi16(__m128i a, int count) @@ -885,8 +886,9 @@ _mm_sra_epi32(__m128i a, __m128i count) } -#define _mm_srli_si128(VEC, IMM) \ - ((__m128i)__builtin_ia32_psrldqi128((__m128i)(VEC), (IMM)*8)) +#define _mm_srli_si128(a, count) __extension__ ({ \ + __m128i __a = (a); \ + (__m128i)__builtin_ia32_psrldqi128(__a, (count)*8); }) static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) _mm_srli_epi16(__m128i a, int count) @@ -945,7 +947,10 @@ _mm_cmpeq_epi32(__m128i a, __m128i b) static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) _mm_cmpgt_epi8(__m128i a, __m128i b) { - return (__m128i)((__v16qi)a > (__v16qi)b); + /* This function always performs a signed comparison, but __v16qi is a char + which may be signed or unsigned. */ + typedef signed char __v16qs __attribute__((__vector_size__(16))); + return (__m128i)((__v16qs)a > (__v16qs)b); } static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) @@ -1259,23 +1264,27 @@ _mm_movemask_epi8(__m128i a) return __builtin_ia32_pmovmskb128((__v16qi)a); } -#define _mm_shuffle_epi32(a, imm) \ - ((__m128i)__builtin_shufflevector((__v4si)(a), (__v4si) _mm_set1_epi32(0), \ - (imm) & 0x3, ((imm) & 0xc) >> 2, \ - ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6)) +#define _mm_shuffle_epi32(a, imm) __extension__ ({ \ + __m128i __a = (a); \ + (__m128i)__builtin_shufflevector((__v4si)__a, (__v4si) _mm_set1_epi32(0), \ + (imm) & 0x3, ((imm) & 0xc) >> 2, \ + ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6); }) +#define _mm_shufflelo_epi16(a, imm) __extension__ ({ \ + __m128i __a = (a); \ + (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi) _mm_set1_epi16(0), \ + (imm) & 0x3, ((imm) & 0xc) >> 2, \ + ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6, \ + 4, 5, 6, 7); }) -#define _mm_shufflelo_epi16(a, imm) \ - ((__m128i)__builtin_shufflevector((__v8hi)(a), (__v8hi) _mm_set1_epi16(0), \ - (imm) & 0x3, ((imm) & 0xc) >> 2, \ - ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6, \ - 4, 5, 6, 7)) -#define _mm_shufflehi_epi16(a, imm) \ - ((__m128i)__builtin_shufflevector((__v8hi)(a), (__v8hi) _mm_set1_epi16(0), 0, 1, 2, 3, \ - 4 + (((imm) & 0x03) >> 0), \ - 4 + (((imm) & 0x0c) >> 2), \ - 4 + (((imm) & 0x30) >> 4), \ - 4 + (((imm) & 0xc0) >> 6))) +#define _mm_shufflehi_epi16(a, imm) __extension__ ({ \ + __m128i __a = (a); \ + (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi) _mm_set1_epi16(0), \ + 0, 1, 2, 3, \ + 4 + (((imm) & 0x03) >> 0), \ + 4 + (((imm) & 0x0c) >> 2), \ + 4 + (((imm) & 0x30) >> 4), \ + 4 + (((imm) & 0xc0) >> 6)); }) static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) _mm_unpackhi_epi8(__m128i a, __m128i b) @@ -1361,9 +1370,10 @@ _mm_movemask_pd(__m128d a) return __builtin_ia32_movmskpd(a); } -#define _mm_shuffle_pd(a, b, i) \ - (__builtin_shufflevector((__m128d)(a), (__m128d)(b), (i) & 1, \ - (((i) & 2) >> 1) + 2)) +#define _mm_shuffle_pd(a, b, i) __extension__ ({ \ + __m128d __a = (a); \ + __m128d __b = (b); \ + __builtin_shufflevector(__a, __b, (i) & 1, (((i) & 2) >> 1) + 2); }) static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) _mm_castpd_ps(__m128d in) |