From: Eric Christopher Date: Fri, 12 Mar 2010 01:22:33 +0000 (+0000) Subject: Add SSE4 packed integer comparisons and corresponding intrinsics. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0c2b4f40ac17156a424d4faa20ba5d862ecc8416;p=clang Add SSE4 packed integer comparisons and corresponding intrinsics. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@98323 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/BuiltinsX86.def b/include/clang/Basic/BuiltinsX86.def index 880b4bab6e..55a8e1537f 100644 --- a/include/clang/Basic/BuiltinsX86.def +++ b/include/clang/Basic/BuiltinsX86.def @@ -287,6 +287,9 @@ BUILTIN(__builtin_ia32_roundpd, "V2dV2di", "") BUILTIN(__builtin_ia32_dpps, "V4fV4fV4fi", "") BUILTIN(__builtin_ia32_dppd, "V2dV2dV2di", "") BUILTIN(__builtin_ia32_movntdqa, "V2LLiV2LLi*", "") +BUILTIN(__builtin_ia32_ptestz128, "iV2LLiV2LLi", "") +BUILTIN(__builtin_ia32_ptestc128, "iV2LLiV2LLi", "") +BUILTIN(__builtin_ia32_ptestnzc128, "iV2LLiV2LLi", "") #undef BUILTIN diff --git a/lib/Headers/smmintrin.h b/lib/Headers/smmintrin.h index 29a9c37b45..7eab8182eb 100644 --- a/lib/Headers/smmintrin.h +++ b/lib/Headers/smmintrin.h @@ -223,6 +223,29 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2) __a[N];})) #endif /* __x86_64 */ +/* SSE4 128-bit Packed Integer Comparisons. */ +static inline int __attribute__((__always_inline__, __nodebug__)) +_mm_testz_si128(__m128i __M, __m128i __V) +{ + return __builtin_ia32_ptestz128((__v2di)__M, (__v2di)__V); +} + +static inline int __attribute__((__always_inline__, __nodebug__)) +_mm_testc_si128(__m128i __M, __m128i __V) +{ + return __builtin_ia32_ptestc128((__v2di)__M, (__v2di)__V); +} + +static inline int __attribute__((__always_inline__, __nodebug__)) +_mm_testnzc_si128(__m128i __M, __m128i __V) +{ + return __builtin_ia32_ptestnzc128((__v2di)__M, (__v2di)__V); +} + +#define _mm_test_all_ones(V) _mm_testc_si128((V), _mm_cmpeq_epi32((V), (V))) +#define _mm_test_mix_ones_zeros(M, V) _mm_testnzc_si128((M), (V)) +#define _mm_test_all_zeros(M, V) _mm_testz_si128 ((V), (V)) + #endif /* __SSE4_1__ */ #endif /* _SMMINTRIN_H */