From: Craig Topper Date: Sat, 11 Jun 2016 03:31:07 +0000 (+0000) Subject: [AVX512] Add _mm512_bsrli_epi128 and _mm512_bslli_epi128 intrinsics. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=677dadf5654c4bfd998c89d3d29ab4a6a4e44352;p=clang [AVX512] Add _mm512_bsrli_epi128 and _mm512_bslli_epi128 intrinsics. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@272451 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Headers/avx512bwintrin.h b/lib/Headers/avx512bwintrin.h index 2b119a3bd7..f4cbdd5bd3 100644 --- a/lib/Headers/avx512bwintrin.h +++ b/lib/Headers/avx512bwintrin.h @@ -1695,6 +1695,75 @@ _mm512_maskz_sll_epi16 (__mmask32 __U, __m512i __A, __m128i __B) (__v32hi)_mm512_setzero_hi(), \ (__mmask32)(U)); }) +#define _mm512_bslli_epi128(a, imm) __extension__ ({ \ + ((char)(imm)&0xF0) ? _mm512_setzero_si512() : \ + (__m512i)__builtin_shufflevector( \ + (__v64qi)_mm512_setzero_si512(), \ + (__v64qi)(__m512i)(a), \ + ((char)(imm)>0x0 ? 16 : 64) - (char)(imm), \ + ((char)(imm)>0x1 ? 17 : 65) - (char)(imm), \ + ((char)(imm)>0x2 ? 18 : 66) - (char)(imm), \ + ((char)(imm)>0x3 ? 19 : 67) - (char)(imm), \ + ((char)(imm)>0x4 ? 20 : 68) - (char)(imm), \ + ((char)(imm)>0x5 ? 21 : 69) - (char)(imm), \ + ((char)(imm)>0x6 ? 22 : 70) - (char)(imm), \ + ((char)(imm)>0x7 ? 23 : 71) - (char)(imm), \ + ((char)(imm)>0x8 ? 24 : 72) - (char)(imm), \ + ((char)(imm)>0x9 ? 25 : 73) - (char)(imm), \ + ((char)(imm)>0xA ? 26 : 74) - (char)(imm), \ + ((char)(imm)>0xB ? 27 : 75) - (char)(imm), \ + ((char)(imm)>0xC ? 28 : 76) - (char)(imm), \ + ((char)(imm)>0xD ? 29 : 77) - (char)(imm), \ + ((char)(imm)>0xE ? 30 : 78) - (char)(imm), \ + ((char)(imm)>0xF ? 31 : 79) - (char)(imm), \ + ((char)(imm)>0x0 ? 32 : 80) - (char)(imm), \ + ((char)(imm)>0x1 ? 33 : 81) - (char)(imm), \ + ((char)(imm)>0x2 ? 34 : 82) - (char)(imm), \ + ((char)(imm)>0x3 ? 35 : 83) - (char)(imm), \ + ((char)(imm)>0x4 ? 36 : 84) - (char)(imm), \ + ((char)(imm)>0x5 ? 37 : 85) - (char)(imm), \ + ((char)(imm)>0x6 ? 38 : 86) - (char)(imm), \ + ((char)(imm)>0x7 ? 39 : 87) - (char)(imm), \ + ((char)(imm)>0x8 ? 40 : 88) - (char)(imm), \ + ((char)(imm)>0x9 ? 41 : 89) - (char)(imm), \ + ((char)(imm)>0xA ? 42 : 90) - (char)(imm), \ + ((char)(imm)>0xB ? 43 : 91) - (char)(imm), \ + ((char)(imm)>0xC ? 44 : 92) - (char)(imm), \ + ((char)(imm)>0xD ? 45 : 93) - (char)(imm), \ + ((char)(imm)>0xE ? 46 : 94) - (char)(imm), \ + ((char)(imm)>0xF ? 47 : 95) - (char)(imm), \ + ((char)(imm)>0x0 ? 48 : 96) - (char)(imm), \ + ((char)(imm)>0x1 ? 49 : 97) - (char)(imm), \ + ((char)(imm)>0x2 ? 50 : 98) - (char)(imm), \ + ((char)(imm)>0x3 ? 51 : 99) - (char)(imm), \ + ((char)(imm)>0x4 ? 52 : 100) - (char)(imm), \ + ((char)(imm)>0x5 ? 53 : 101) - (char)(imm), \ + ((char)(imm)>0x6 ? 54 : 102) - (char)(imm), \ + ((char)(imm)>0x7 ? 55 : 103) - (char)(imm), \ + ((char)(imm)>0x8 ? 56 : 104) - (char)(imm), \ + ((char)(imm)>0x9 ? 57 : 105) - (char)(imm), \ + ((char)(imm)>0xA ? 58 : 106) - (char)(imm), \ + ((char)(imm)>0xB ? 59 : 107) - (char)(imm), \ + ((char)(imm)>0xC ? 60 : 108) - (char)(imm), \ + ((char)(imm)>0xD ? 61 : 109) - (char)(imm), \ + ((char)(imm)>0xE ? 62 : 110) - (char)(imm), \ + ((char)(imm)>0xF ? 63 : 111) - (char)(imm), \ + ((char)(imm)>0x0 ? 64 : 112) - (char)(imm), \ + ((char)(imm)>0x1 ? 65 : 113) - (char)(imm), \ + ((char)(imm)>0x2 ? 66 : 114) - (char)(imm), \ + ((char)(imm)>0x3 ? 67 : 115) - (char)(imm), \ + ((char)(imm)>0x4 ? 68 : 116) - (char)(imm), \ + ((char)(imm)>0x5 ? 69 : 117) - (char)(imm), \ + ((char)(imm)>0x6 ? 70 : 118) - (char)(imm), \ + ((char)(imm)>0x7 ? 71 : 119) - (char)(imm), \ + ((char)(imm)>0x8 ? 72 : 120) - (char)(imm), \ + ((char)(imm)>0x9 ? 73 : 121) - (char)(imm), \ + ((char)(imm)>0xA ? 74 : 122) - (char)(imm), \ + ((char)(imm)>0xB ? 75 : 123) - (char)(imm), \ + ((char)(imm)>0xC ? 76 : 124) - (char)(imm), \ + ((char)(imm)>0xD ? 77 : 125) - (char)(imm), \ + ((char)(imm)>0xE ? 78 : 126) - (char)(imm), \ + ((char)(imm)>0xF ? 79 : 127) - (char)(imm)); }) static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_srlv_epi16 (__m512i __A, __m512i __B) @@ -1847,7 +1916,75 @@ _mm512_maskz_srl_epi16 (__mmask32 __U, __m512i __A, __m128i __B) (__v32hi)_mm512_setzero_hi(), \ (__mmask32)(U)); }) - +#define _mm512_bsrli_epi128(a, imm) __extension__ ({ \ + ((char)(imm)&0xF0) ? _mm512_setzero_si512() : \ + (__m512i)__builtin_shufflevector( \ + (__v64qi)(__m512i)(a), \ + (__v64qi)_mm512_setzero_si512(), \ + (char)(imm) + ((char)(imm)>0xF ? 48 : 0), \ + (char)(imm) + ((char)(imm)>0xE ? 49 : 1), \ + (char)(imm) + ((char)(imm)>0xD ? 50 : 2), \ + (char)(imm) + ((char)(imm)>0xC ? 51 : 3), \ + (char)(imm) + ((char)(imm)>0xB ? 52 : 4), \ + (char)(imm) + ((char)(imm)>0xA ? 53 : 5), \ + (char)(imm) + ((char)(imm)>0x9 ? 54 : 6), \ + (char)(imm) + ((char)(imm)>0x8 ? 55 : 7), \ + (char)(imm) + ((char)(imm)>0x7 ? 56 : 8), \ + (char)(imm) + ((char)(imm)>0x6 ? 57 : 9), \ + (char)(imm) + ((char)(imm)>0x5 ? 58 : 10), \ + (char)(imm) + ((char)(imm)>0x4 ? 59 : 11), \ + (char)(imm) + ((char)(imm)>0x3 ? 60 : 12), \ + (char)(imm) + ((char)(imm)>0x2 ? 61 : 13), \ + (char)(imm) + ((char)(imm)>0x1 ? 62 : 14), \ + (char)(imm) + ((char)(imm)>0x0 ? 63 : 15), \ + (char)(imm) + ((char)(imm)>0xF ? 64 : 16), \ + (char)(imm) + ((char)(imm)>0xE ? 65 : 17), \ + (char)(imm) + ((char)(imm)>0xD ? 66 : 18), \ + (char)(imm) + ((char)(imm)>0xC ? 67 : 19), \ + (char)(imm) + ((char)(imm)>0xB ? 68 : 20), \ + (char)(imm) + ((char)(imm)>0xA ? 69 : 21), \ + (char)(imm) + ((char)(imm)>0x9 ? 70 : 22), \ + (char)(imm) + ((char)(imm)>0x8 ? 71 : 23), \ + (char)(imm) + ((char)(imm)>0x7 ? 72 : 24), \ + (char)(imm) + ((char)(imm)>0x6 ? 73 : 25), \ + (char)(imm) + ((char)(imm)>0x5 ? 74 : 26), \ + (char)(imm) + ((char)(imm)>0x4 ? 75 : 27), \ + (char)(imm) + ((char)(imm)>0x3 ? 76 : 28), \ + (char)(imm) + ((char)(imm)>0x2 ? 77 : 29), \ + (char)(imm) + ((char)(imm)>0x1 ? 78 : 30), \ + (char)(imm) + ((char)(imm)>0x0 ? 79 : 31), \ + (char)(imm) + ((char)(imm)>0xF ? 80 : 32), \ + (char)(imm) + ((char)(imm)>0xE ? 81 : 33), \ + (char)(imm) + ((char)(imm)>0xD ? 82 : 34), \ + (char)(imm) + ((char)(imm)>0xC ? 83 : 35), \ + (char)(imm) + ((char)(imm)>0xB ? 84 : 36), \ + (char)(imm) + ((char)(imm)>0xA ? 85 : 37), \ + (char)(imm) + ((char)(imm)>0x9 ? 86 : 38), \ + (char)(imm) + ((char)(imm)>0x8 ? 87 : 39), \ + (char)(imm) + ((char)(imm)>0x7 ? 88 : 40), \ + (char)(imm) + ((char)(imm)>0x6 ? 89 : 41), \ + (char)(imm) + ((char)(imm)>0x5 ? 90 : 42), \ + (char)(imm) + ((char)(imm)>0x4 ? 91 : 43), \ + (char)(imm) + ((char)(imm)>0x3 ? 92 : 44), \ + (char)(imm) + ((char)(imm)>0x2 ? 93 : 45), \ + (char)(imm) + ((char)(imm)>0x1 ? 94 : 46), \ + (char)(imm) + ((char)(imm)>0x0 ? 95 : 47), \ + (char)(imm) + ((char)(imm)>0xF ? 96 : 48), \ + (char)(imm) + ((char)(imm)>0xE ? 97 : 49), \ + (char)(imm) + ((char)(imm)>0xD ? 98 : 50), \ + (char)(imm) + ((char)(imm)>0xC ? 99 : 51), \ + (char)(imm) + ((char)(imm)>0xB ? 100 : 52), \ + (char)(imm) + ((char)(imm)>0xA ? 101 : 53), \ + (char)(imm) + ((char)(imm)>0x9 ? 102 : 54), \ + (char)(imm) + ((char)(imm)>0x8 ? 103 : 55), \ + (char)(imm) + ((char)(imm)>0x7 ? 104 : 56), \ + (char)(imm) + ((char)(imm)>0x6 ? 105 : 57), \ + (char)(imm) + ((char)(imm)>0x5 ? 106 : 58), \ + (char)(imm) + ((char)(imm)>0x4 ? 107 : 59), \ + (char)(imm) + ((char)(imm)>0x3 ? 108 : 60), \ + (char)(imm) + ((char)(imm)>0x2 ? 109 : 61), \ + (char)(imm) + ((char)(imm)>0x1 ? 110 : 62), \ + (char)(imm) + ((char)(imm)>0x0 ? 111 : 63)); }) static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_mask_mov_epi16 (__m512i __W, __mmask32 __U, __m512i __A) diff --git a/test/CodeGen/avx512bw-builtins.c b/test/CodeGen/avx512bw-builtins.c index 9f82858e2c..aae808dac8 100644 --- a/test/CodeGen/avx512bw-builtins.c +++ b/test/CodeGen/avx512bw-builtins.c @@ -1167,6 +1167,12 @@ __m512i test_mm512_maskz_slli_epi16(__mmask32 __U, __m512i __A) { return _mm512_maskz_slli_epi16(__U, __A, 5); } +__m512i test_mm512_bslli_epi128(__m512i __A) { + // CHECK-LABEL: @test_mm512_bslli_epi128 + // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i32> + return _mm512_bslli_epi128(__A, 5); +} + __m512i test_mm512_srlv_epi16(__m512i __A, __m512i __B) { // CHECK-LABEL: @test_mm512_srlv_epi16 // CHECK: @llvm.x86.avx512.mask.psrlv @@ -1275,6 +1281,11 @@ __m512i test_mm512_maskz_srli_epi16(__mmask32 __U, __m512i __A) { return _mm512_maskz_srli_epi16(__U, __A, 5); } +__m512i test_mm512_bsrli_epi128(__m512i __A) { + // CHECK-LABEL: @test_mm512_bsrli_epi128 + // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i32> + return _mm512_bsrli_epi128(__A, 5); +} __m512i test_mm512_mask_mov_epi16(__m512i __W, __mmask32 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_mask_mov_epi16 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}