diff options
| author | Craig Topper <craig.topper@gmail.com> | 2016-06-09 05:15:12 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@gmail.com> | 2016-06-09 05:15:12 +0000 |
| commit | 2769bb5753618eabe700b223212c304aefc70d34 (patch) | |
| tree | d4abedd6e26cb67c7599d3de3310573da88ce4c4 /clang/lib/Headers/emmintrin.h | |
| parent | c1442973c80ca98cecb6866d051c74127b24c48a (diff) | |
| download | bcm5719-llvm-2769bb5753618eabe700b223212c304aefc70d34.tar.gz bcm5719-llvm-2769bb5753618eabe700b223212c304aefc70d34.zip | |
[X86] Handle AVX2 pslldqi and psrldqi intrinsics shufflevector creation directly in the header file instead of in CGBuiltin.cpp. Simplify the sse2 equivalents as well.
llvm-svn: 272246
Diffstat (limited to 'clang/lib/Headers/emmintrin.h')
| -rw-r--r-- | clang/lib/Headers/emmintrin.h | 80 |
1 files changed, 42 insertions, 38 deletions
diff --git a/clang/lib/Headers/emmintrin.h b/clang/lib/Headers/emmintrin.h index 80e391d268d..adcf595fc65 100644 --- a/clang/lib/Headers/emmintrin.h +++ b/clang/lib/Headers/emmintrin.h @@ -1089,25 +1089,27 @@ _mm_xor_si128(__m128i __a, __m128i __b) /// An immediate value specifying the number of bytes to left-shift /// operand a. /// \returns A 128-bit integer vector containing the left-shifted value. -#define _mm_slli_si128(a, imm) __extension__ ({ \ - (__m128i)__builtin_shufflevector((__v16qi)_mm_setzero_si128(), \ - (__v16qi)(__m128i)(a), \ - ((imm)&0xF0) ? 0 : 16 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 17 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 18 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 19 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 20 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 21 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 22 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 23 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 24 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 25 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 26 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 27 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 28 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 29 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 30 - ((imm)&0xF), \ - ((imm)&0xF0) ? 0 : 31 - ((imm)&0xF)); }) +#define _mm_slli_si128(a, imm) __extension__ ({ \ + ((char)(imm)&0xF0) ? _mm_setzero_si128() : \ + (__m128i)__builtin_shufflevector( \ + (__v16qi)_mm_setzero_si128(), \ + (__v16qi)(__m128i)(a), \ + 16 - (char)(imm), \ + 17 - (char)(imm), \ + 18 - (char)(imm), \ + 19 - (char)(imm), \ + 20 - (char)(imm), \ + 21 - (char)(imm), \ + 22 - (char)(imm), \ + 23 - (char)(imm), \ + 24 - (char)(imm), \ + 25 - (char)(imm), \ + 26 - (char)(imm), \ + 27 - (char)(imm), \ + 28 - (char)(imm), \ + 29 - (char)(imm), \ + 30 - (char)(imm), \ + 31 - (char)(imm)); }) #define _mm_bslli_si128(a, imm) \ _mm_slli_si128((a), (imm)) @@ -1323,25 +1325,27 @@ _mm_sra_epi32(__m128i __a, __m128i __count) /// An immediate value specifying the number of bytes to right-shift operand /// a. /// \returns A 128-bit integer vector containing the right-shifted value. -#define _mm_srli_si128(a, imm) __extension__ ({ \ - (__m128i)__builtin_shufflevector((__v16qi)(__m128i)(a), \ - (__v16qi)_mm_setzero_si128(), \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 0, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 1, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 2, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 3, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 4, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 5, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 6, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 7, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 8, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 9, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 10, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 11, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 12, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 13, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 14, \ - ((imm)&0xF0) ? 16 : ((imm)&0xF) + 15); }) +#define _mm_srli_si128(a, imm) __extension__ ({ \ + ((char)(imm)&0xF0) ? _mm_setzero_si128() : \ + (__m128i)__builtin_shufflevector( \ + (__v16qi)(__m128i)(a), \ + (__v16qi)_mm_setzero_si128(), \ + (char)(imm) + 0, \ + (char)(imm) + 1, \ + (char)(imm) + 2, \ + (char)(imm) + 3, \ + (char)(imm) + 4, \ + (char)(imm) + 5, \ + (char)(imm) + 6, \ + (char)(imm) + 7, \ + (char)(imm) + 8, \ + (char)(imm) + 9, \ + (char)(imm) + 10, \ + (char)(imm) + 11, \ + (char)(imm) + 12, \ + (char)(imm) + 13, \ + (char)(imm) + 14, \ + (char)(imm) + 15); }) #define _mm_bsrli_si128(a, imm) \ _mm_srli_si128((a), (imm)) |

