From 735ceaa4ccb60df5993245e645f7127bf4a4325f Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Mon, 19 Dec 2011 09:03:48 +0000 Subject: [PATCH] Add AVX2 intrinsics for and, andn, or, and xor. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146862 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Headers/avx2intrin.h | 23 +++++++++++++++++++++++ test/CodeGen/avx2-builtins.c | 21 +++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/lib/Headers/avx2intrin.h b/lib/Headers/avx2intrin.h index e4f1e14c90..df0450d7d1 100644 --- a/lib/Headers/avx2intrin.h +++ b/lib/Headers/avx2intrin.h @@ -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; +} diff --git a/test/CodeGen/avx2-builtins.c b/test/CodeGen/avx2-builtins.c index b40342f5f6..778cc326ca 100644 --- a/test/CodeGen/avx2-builtins.c +++ b/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); +} -- 2.40.0