diff options
| author | Craig Topper <craig.topper@gmail.com> | 2011-12-21 08:35:05 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@gmail.com> | 2011-12-21 08:35:05 +0000 |
| commit | a73baa805077f5ae1ab80c15288e5c3c2a2620e1 (patch) | |
| tree | 63de1c52847c5c180b5a377a65aac6c2c18fe7a7 | |
| parent | 3fe5ac40db2b43665eaff0775e197c47fb30cf4b (diff) | |
| download | bcm5719-llvm-a73baa805077f5ae1ab80c15288e5c3c2a2620e1.tar.gz bcm5719-llvm-a73baa805077f5ae1ab80c15288e5c3c2a2620e1.zip | |
Add a few more AVX2 intrinsics and fix the type strings on a couple SSE intrinsics.
llvm-svn: 147048
| -rw-r--r-- | clang/include/clang/Basic/BuiltinsX86.def | 6 | ||||
| -rw-r--r-- | clang/lib/Headers/avx2intrin.h | 12 | ||||
| -rw-r--r-- | clang/test/CodeGen/avx2-builtins.c | 10 |
3 files changed, 26 insertions, 2 deletions
diff --git a/clang/include/clang/Basic/BuiltinsX86.def b/clang/include/clang/Basic/BuiltinsX86.def index 6a77468314f..a32a3b8808a 100644 --- a/clang/include/clang/Basic/BuiltinsX86.def +++ b/clang/include/clang/Basic/BuiltinsX86.def @@ -230,7 +230,7 @@ BUILTIN(__builtin_ia32_phaddsw128, "V8sV8sV8s", "") BUILTIN(__builtin_ia32_phsubw128, "V8sV8sV8s", "") BUILTIN(__builtin_ia32_phsubd128, "V4iV4iV4i", "") BUILTIN(__builtin_ia32_phsubsw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_pmaddubsw128, "V16cV16cV16c", "") +BUILTIN(__builtin_ia32_pmaddubsw128, "V8sV16cV16c", "") BUILTIN(__builtin_ia32_pmulhrsw128, "V8sV8sV8s", "") BUILTIN(__builtin_ia32_pshufb128, "V16cV16cV16c", "") BUILTIN(__builtin_ia32_psignb128, "V16cV16cV16c", "") @@ -298,7 +298,7 @@ BUILTIN(__builtin_ia32_psrldi128, "V4iV4ii", "") BUILTIN(__builtin_ia32_psrlqi128, "V2LLiV2LLii", "") BUILTIN(__builtin_ia32_psrawi128, "V8sV8si", "") BUILTIN(__builtin_ia32_psradi128, "V4iV4ii", "") -BUILTIN(__builtin_ia32_pmaddwd128, "V8sV8sV8s", "") +BUILTIN(__builtin_ia32_pmaddwd128, "V4iV8sV8s", "") BUILTIN(__builtin_ia32_monitor, "vv*UiUi", "") BUILTIN(__builtin_ia32_mwait, "vUiUi", "") BUILTIN(__builtin_ia32_lddqu, "V16ccC*", "") @@ -500,5 +500,7 @@ BUILTIN(__builtin_ia32_phaddsw256, "V16sV16sV16s", "") BUILTIN(__builtin_ia32_phsubw256, "V16sV16sV16s", "") BUILTIN(__builtin_ia32_phsubd256, "V8iV8iV8i", "") BUILTIN(__builtin_ia32_phsubsw256, "V16sV16sV16s", "") +BUILTIN(__builtin_ia32_pmaddubsw256, "V16sV32cV32c", "") +BUILTIN(__builtin_ia32_pmaddwd256, "V8iV16sV16s", "") #undef BUILTIN diff --git a/clang/lib/Headers/avx2intrin.h b/clang/lib/Headers/avx2intrin.h index 38891670a0c..ce6075388c6 100644 --- a/clang/lib/Headers/avx2intrin.h +++ b/clang/lib/Headers/avx2intrin.h @@ -244,6 +244,18 @@ _mm256_hsubs_epi16(__m256i a, __m256i b) } static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_maddubs_epi16(__m256i a, __m256i b) +{ + return (__m256i)__builtin_ia32_pmaddubsw256((__v32qi)a, (__v32qi)b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_madd_epi16(__m256i a, __m256i b) +{ + return (__m256i)__builtin_ia32_pmaddwd256((__v16hi)a, (__v16hi)b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) _mm256_or_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 cc252d7d551..592a196dc84 100644 --- a/clang/test/CodeGen/avx2-builtins.c +++ b/clang/test/CodeGen/avx2-builtins.c @@ -245,3 +245,13 @@ __m256 test_mm256_hsubs_epi16(__m256 a, __m256 b) { // CHECK: @llvm.x86.avx2.phsub.sw return _mm256_hsubs_epi16(a, b); } + +__m256 test_mm256_maddubs_epi16(__m256 a, __m256 b) { + // CHECK: @llvm.x86.avx2.pmadd.ub.sw + return _mm256_maddubs_epi16(a, b); +} + +__m256 test_mm256_madd_epi16(__m256 a, __m256 b) { + // CHECK: @llvm.x86.avx2.pmadd.wd + return _mm256_madd_epi16(a, b); +} |

