]> granicus.if.org Git - clang/commitdiff
Add SSE4 packed integer comparisons and corresponding intrinsics.
authorEric Christopher <echristo@apple.com>
Fri, 12 Mar 2010 01:22:33 +0000 (01:22 +0000)
committerEric Christopher <echristo@apple.com>
Fri, 12 Mar 2010 01:22:33 +0000 (01:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@98323 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/BuiltinsX86.def
lib/Headers/smmintrin.h

index 880b4bab6e26c89f871270096834d2455ce72729..55a8e1537fdbcdb769516a9b127a3e3eb66d9385 100644 (file)
@@ -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
index 29a9c37b45e9e42795469fd389fa117fa8014703..7eab8182eb420f1c64cbf730301c30bdfd96790d 100644 (file)
@@ -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 */