]> granicus.if.org Git - clang/commitdiff
Add AVX2 intrinsics for and, andn, or, and xor.
authorCraig Topper <craig.topper@gmail.com>
Mon, 19 Dec 2011 09:03:48 +0000 (09:03 +0000)
committerCraig Topper <craig.topper@gmail.com>
Mon, 19 Dec 2011 09:03:48 +0000 (09:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146862 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Headers/avx2intrin.h
test/CodeGen/avx2-builtins.c

index e4f1e14c909da07dfb057a3512b42154d1c099c9..df0450d7d144b20fcedf5586f83bc682a3996ae9 100644 (file)
@@ -123,6 +123,24 @@ _mm256_adds_epu16(__m256i a, __m256i b)
   __m256i __b = (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)
 {
@@ -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;
+}
index b40342f5f6e84276304cd3673b6ed83353aa89cd..778cc326cab7d4a3c172bdc50ebdd099579d135d 100644 (file)
@@ -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);
+}