summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@gmail.com>2011-12-19 09:03:48 +0000
committerCraig Topper <craig.topper@gmail.com>2011-12-19 09:03:48 +0000
commita557e1c12213038116c7a33faab822c1fa66a0be (patch)
tree00f334e09d3ceb28a7631e7047e368d561af2d26
parent2a8bc15230a128c8492cf0e0abbbb6b5e914c89c (diff)
downloadbcm5719-llvm-a557e1c12213038116c7a33faab822c1fa66a0be.tar.gz
bcm5719-llvm-a557e1c12213038116c7a33faab822c1fa66a0be.zip
Add AVX2 intrinsics for and, andn, or, and xor.
llvm-svn: 146862
-rw-r--r--clang/lib/Headers/avx2intrin.h23
-rw-r--r--clang/test/CodeGen/avx2-builtins.c21
2 files changed, 44 insertions, 0 deletions
diff --git a/clang/lib/Headers/avx2intrin.h b/clang/lib/Headers/avx2intrin.h
index e4f1e14c909..df0450d7d14 100644
--- a/clang/lib/Headers/avx2intrin.h
+++ b/clang/lib/Headers/avx2intrin.h
@@ -124,6 +124,24 @@ _mm256_adds_epu16(__m256i a, __m256i b)
(__m256i)__builtin_ia32_palignr256((__v32qi)__a, (__v32qi)__b, (n)); })
static __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
+_mm256_and_si256(__m256i a, __m256i b)
+{
+ return a & b;
+}
+
+static __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
+_mm256_andnot_si256(__m256i a, __m256i b)
+{
+ return ~a & b;
+}
+
+static __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
+_mm256_or_si256(__m256i a, __m256i b)
+{
+ return a | b;
+}
+
+static __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
_mm256_sub_epi8(__m256i a, __m256i b)
{
return (__m256i)((__v32qi)a - (__v32qi)b);
@@ -171,3 +189,8 @@ _mm256_subs_epu16(__m256i a, __m256i b)
return (__m256i)__builtin_ia32_psubusw256((__v16hi)a, (__v16hi)b);
}
+static __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
+_mm256_xor_si256(__m256i a, __m256i b)
+{
+ return a ^ b;
+}
diff --git a/clang/test/CodeGen/avx2-builtins.c b/clang/test/CodeGen/avx2-builtins.c
index b40342f5f6e..778cc326cab 100644
--- a/clang/test/CodeGen/avx2-builtins.c
+++ b/clang/test/CodeGen/avx2-builtins.c
@@ -134,3 +134,24 @@ __m256 test_mm256_subs_epu16(__m256 a, __m256 b) {
// CHECK: @llvm.x86.avx2.psubus.w
return _mm256_subs_epu16(a, b);
}
+
+__m256 test_mm256_and_si256(__m256 a, __m256 b) {
+ // CHECK: and <4 x i64>
+ return _mm256_and_si256(a, b);
+}
+
+__m256 test_mm256_andnot_si256(__m256 a, __m256 b) {
+ // CHECK: xor <4 x i64>
+ // CHECK: and <4 x i64>
+ return _mm256_andnot_si256(a, b);
+}
+
+__m256 test_mm256_or_si256(__m256 a, __m256 b) {
+ // CHECK: or <4 x i64>
+ return _mm256_or_si256(a, b);
+}
+
+__m256 test_mm256_xor_si256(__m256 a, __m256 b) {
+ // CHECK: xor <4 x i64>
+ return _mm256_xor_si256(a, b);
+}
OpenPOWER on IntegriCloud