From a462482d98f8652504fa2f3964312d1b06d565db Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Fri, 13 Feb 2015 06:04:45 +0000 Subject: [PATCH] [X86] Add _mm_bslli_si128 and _mm_bsrli_si128 as aliases of _mm_slli_si128 and _mm_srli_si128. This matches Intel documentation and gcc. llvm-svn: 229066 --- clang/lib/Headers/emmintrin.h | 6 ++++++ clang/test/CodeGen/sse-builtins.c | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/clang/lib/Headers/emmintrin.h b/clang/lib/Headers/emmintrin.h index 4ad3a77..c764d68 100644 --- a/clang/lib/Headers/emmintrin.h +++ b/clang/lib/Headers/emmintrin.h @@ -845,6 +845,9 @@ _mm_xor_si128(__m128i __a, __m128i __b) ((imm)&0xF0) ? 0 : 30 - ((imm)&0xF), \ ((imm)&0xF0) ? 0 : 31 - ((imm)&0xF)); }) +#define _mm_bslli_si128(a, imm) \ + _mm_slli_si128((a), (imm)) + static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) _mm_slli_epi16(__m128i __a, int __count) { @@ -925,6 +928,9 @@ _mm_sra_epi32(__m128i __a, __m128i __count) ((imm)&0xF0) ? 16 : ((imm)&0xF) + 14, \ ((imm)&0xF0) ? 16 : ((imm)&0xF) + 15); }) +#define _mm_bsrli_si128(a, imm) \ + _mm_srli_si128((a), (imm)) + static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) _mm_srli_epi16(__m128i __a, int __count) { diff --git a/clang/test/CodeGen/sse-builtins.c b/clang/test/CodeGen/sse-builtins.c index 34c2de7..5dcb228 100644 --- a/clang/test/CodeGen/sse-builtins.c +++ b/clang/test/CodeGen/sse-builtins.c @@ -543,3 +543,27 @@ __m128d test_mm_cmpnge_pd(__m128d __a, __m128d __b) { // CHECK: @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 6) return _mm_cmpnge_pd(__a, __b); } + +__m128 test_mm_slli_si128(__m128 a) { + // CHECK-LABEL: @test_mm_slli_si128 + // CHECK: shufflevector <16 x i8> <{{.*}}, i8 0, i8 0, i8 0, i8 0, i8 0>, <16 x i8> {{.*}}, <16 x i32> + return _mm_slli_si128(a, 5); +} + +__m128 test_mm_bslli_si128(__m128 a) { + // CHECK-LABEL: @test_mm_bslli_si128 + // CHECK: shufflevector <16 x i8> <{{.*}}, i8 0, i8 0, i8 0, i8 0, i8 0>, <16 x i8> {{.*}}, <16 x i32> + return _mm_bslli_si128(a, 5); +} + +__m128 test_mm_srli_si128(__m128 a) { + // CHECK-LABEL: @test_mm_srli_si128 + // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> , <16 x i32> + return _mm_srli_si128(a, 5); +} + +__m128 test_mm_bsrli_si128(__m128 a) { + // CHECK-LABEL: @test_mm_bsrli_si128 + // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> , <16 x i32> + return _mm_bsrli_si128(a, 5); +} -- 2.7.4