ETISS 0.8.0
Extendable Translating Instruction Set Simulator (version 0.8.0)
smmintrin.h
Go to the documentation of this file.
1 /*===---- smmintrin.h - SSE4 intrinsics ------------------------------------===
2  *
3  * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4  * See https://llvm.org/LICENSE.txt for license information.
5  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6  *
7  *===-----------------------------------------------------------------------===
8  */
9 
10 #ifndef __SMMINTRIN_H
11 #define __SMMINTRIN_H
12 
13 #include <tmmintrin.h>
14 
15 /* Define the default attributes for the functions in this file. */
16 #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse4.1"), __min_vector_width__(128)))
17 
18 /* SSE4 Rounding macros. */
19 #define _MM_FROUND_TO_NEAREST_INT 0x00
20 #define _MM_FROUND_TO_NEG_INF 0x01
21 #define _MM_FROUND_TO_POS_INF 0x02
22 #define _MM_FROUND_TO_ZERO 0x03
23 #define _MM_FROUND_CUR_DIRECTION 0x04
24 
25 #define _MM_FROUND_RAISE_EXC 0x00
26 #define _MM_FROUND_NO_EXC 0x08
27 
28 #define _MM_FROUND_NINT (_MM_FROUND_RAISE_EXC | _MM_FROUND_TO_NEAREST_INT)
29 #define _MM_FROUND_FLOOR (_MM_FROUND_RAISE_EXC | _MM_FROUND_TO_NEG_INF)
30 #define _MM_FROUND_CEIL (_MM_FROUND_RAISE_EXC | _MM_FROUND_TO_POS_INF)
31 #define _MM_FROUND_TRUNC (_MM_FROUND_RAISE_EXC | _MM_FROUND_TO_ZERO)
32 #define _MM_FROUND_RINT (_MM_FROUND_RAISE_EXC | _MM_FROUND_CUR_DIRECTION)
33 #define _MM_FROUND_NEARBYINT (_MM_FROUND_NO_EXC | _MM_FROUND_CUR_DIRECTION)
34 
50 #define _mm_ceil_ps(X) _mm_round_ps((X), _MM_FROUND_CEIL)
51 
67 #define _mm_ceil_pd(X) _mm_round_pd((X), _MM_FROUND_CEIL)
68 
92 #define _mm_ceil_ss(X, Y) _mm_round_ss((X), (Y), _MM_FROUND_CEIL)
93 
117 #define _mm_ceil_sd(X, Y) _mm_round_sd((X), (Y), _MM_FROUND_CEIL)
118 
134 #define _mm_floor_ps(X) _mm_round_ps((X), _MM_FROUND_FLOOR)
135 
151 #define _mm_floor_pd(X) _mm_round_pd((X), _MM_FROUND_FLOOR)
152 
176 #define _mm_floor_ss(X, Y) _mm_round_ss((X), (Y), _MM_FROUND_FLOOR)
177 
201 #define _mm_floor_sd(X, Y) _mm_round_sd((X), (Y), _MM_FROUND_FLOOR)
202 
233 #define _mm_round_ps(X, M) \
234  (__m128)__builtin_ia32_roundps((__v4sf)(__m128)(X), (M))
235 
274 #define _mm_round_ss(X, Y, M) \
275  (__m128)__builtin_ia32_roundss((__v4sf)(__m128)(X), \
276  (__v4sf)(__m128)(Y), (M))
277 
308 #define _mm_round_pd(X, M) \
309  (__m128d)__builtin_ia32_roundpd((__v2df)(__m128d)(X), (M))
310 
349 #define _mm_round_sd(X, Y, M) \
350  (__m128d)__builtin_ia32_roundsd((__v2df)(__m128d)(X), \
351  (__v2df)(__m128d)(Y), (M))
352 
353 /* SSE4 Packed Blending Intrinsics. */
378 #define _mm_blend_pd(V1, V2, M) \
379  (__m128d) __builtin_ia32_blendpd ((__v2df)(__m128d)(V1), \
380  (__v2df)(__m128d)(V2), (int)(M))
381 
406 #define _mm_blend_ps(V1, V2, M) \
407  (__m128) __builtin_ia32_blendps ((__v4sf)(__m128)(V1), \
408  (__v4sf)(__m128)(V2), (int)(M))
409 
430 static __inline__ __m128d __DEFAULT_FN_ATTRS
431 _mm_blendv_pd (__m128d __V1, __m128d __V2, __m128d __M)
432 {
433  return (__m128d) __builtin_ia32_blendvpd ((__v2df)__V1, (__v2df)__V2,
434  (__v2df)__M);
435 }
436 
457 static __inline__ __m128 __DEFAULT_FN_ATTRS
458 _mm_blendv_ps (__m128 __V1, __m128 __V2, __m128 __M)
459 {
460  return (__m128) __builtin_ia32_blendvps ((__v4sf)__V1, (__v4sf)__V2,
461  (__v4sf)__M);
462 }
463 
484 static __inline__ __m128i __DEFAULT_FN_ATTRS
485 _mm_blendv_epi8 (__m128i __V1, __m128i __V2, __m128i __M)
486 {
487  return (__m128i) __builtin_ia32_pblendvb128 ((__v16qi)__V1, (__v16qi)__V2,
488  (__v16qi)__M);
489 }
490 
515 #define _mm_blend_epi16(V1, V2, M) \
516  (__m128i) __builtin_ia32_pblendw128 ((__v8hi)(__m128i)(V1), \
517  (__v8hi)(__m128i)(V2), (int)(M))
518 
519 /* SSE4 Dword Multiply Instructions. */
533 static __inline__ __m128i __DEFAULT_FN_ATTRS
534 _mm_mullo_epi32 (__m128i __V1, __m128i __V2)
535 {
536  return (__m128i) ((__v4su)__V1 * (__v4su)__V2);
537 }
538 
553 static __inline__ __m128i __DEFAULT_FN_ATTRS
554 _mm_mul_epi32 (__m128i __V1, __m128i __V2)
555 {
556  return (__m128i) __builtin_ia32_pmuldq128 ((__v4si)__V1, (__v4si)__V2);
557 }
558 
559 /* SSE4 Floating Point Dot Product Instructions. */
592 #define _mm_dp_ps(X, Y, M) \
593  (__m128) __builtin_ia32_dpps((__v4sf)(__m128)(X), \
594  (__v4sf)(__m128)(Y), (M))
595 
627 #define _mm_dp_pd(X, Y, M) \
628  (__m128d) __builtin_ia32_dppd((__v2df)(__m128d)(X), \
629  (__v2df)(__m128d)(Y), (M))
630 
631 /* SSE4 Streaming Load Hint Instruction. */
644 static __inline__ __m128i __DEFAULT_FN_ATTRS
645 _mm_stream_load_si128 (__m128i const *__V)
646 {
647  return (__m128i) __builtin_nontemporal_load ((const __v2di *) __V);
648 }
649 
650 /* SSE4 Packed Integer Min/Max Instructions. */
664 static __inline__ __m128i __DEFAULT_FN_ATTRS
665 _mm_min_epi8 (__m128i __V1, __m128i __V2)
666 {
667  return (__m128i) __builtin_ia32_pminsb128 ((__v16qi) __V1, (__v16qi) __V2);
668 }
669 
683 static __inline__ __m128i __DEFAULT_FN_ATTRS
684 _mm_max_epi8 (__m128i __V1, __m128i __V2)
685 {
686  return (__m128i) __builtin_ia32_pmaxsb128 ((__v16qi) __V1, (__v16qi) __V2);
687 }
688 
702 static __inline__ __m128i __DEFAULT_FN_ATTRS
703 _mm_min_epu16 (__m128i __V1, __m128i __V2)
704 {
705  return (__m128i) __builtin_ia32_pminuw128 ((__v8hi) __V1, (__v8hi) __V2);
706 }
707 
721 static __inline__ __m128i __DEFAULT_FN_ATTRS
722 _mm_max_epu16 (__m128i __V1, __m128i __V2)
723 {
724  return (__m128i) __builtin_ia32_pmaxuw128 ((__v8hi) __V1, (__v8hi) __V2);
725 }
726 
740 static __inline__ __m128i __DEFAULT_FN_ATTRS
741 _mm_min_epi32 (__m128i __V1, __m128i __V2)
742 {
743  return (__m128i) __builtin_ia32_pminsd128 ((__v4si) __V1, (__v4si) __V2);
744 }
745 
759 static __inline__ __m128i __DEFAULT_FN_ATTRS
760 _mm_max_epi32 (__m128i __V1, __m128i __V2)
761 {
762  return (__m128i) __builtin_ia32_pmaxsd128 ((__v4si) __V1, (__v4si) __V2);
763 }
764 
778 static __inline__ __m128i __DEFAULT_FN_ATTRS
779 _mm_min_epu32 (__m128i __V1, __m128i __V2)
780 {
781  return (__m128i) __builtin_ia32_pminud128((__v4si) __V1, (__v4si) __V2);
782 }
783 
797 static __inline__ __m128i __DEFAULT_FN_ATTRS
798 _mm_max_epu32 (__m128i __V1, __m128i __V2)
799 {
800  return (__m128i) __builtin_ia32_pmaxud128((__v4si) __V1, (__v4si) __V2);
801 }
802 
803 /* SSE4 Insertion and Extraction from XMM Register Instructions. */
844 #define _mm_insert_ps(X, Y, N) __builtin_ia32_insertps128((X), (Y), (N))
845 
868 #define _mm_extract_ps(X, N) (__extension__ \
869  ({ union { int __i; float __f; } __t; \
870  __t.__f = __builtin_ia32_vec_ext_v4sf((__v4sf)(__m128)(X), (int)(N)); \
871  __t.__i;}))
872 
873 /* Miscellaneous insert and extract macros. */
874 /* Extract a single-precision float from X at index N into D. */
875 #define _MM_EXTRACT_FLOAT(D, X, N) \
876  { (D) = __builtin_ia32_vec_ext_v4sf((__v4sf)(__m128)(X), (int)(N)); }
877 
878 /* Or together 2 sets of indexes (X and Y) with the zeroing bits (Z) to create
879  an index suitable for _mm_insert_ps. */
880 #define _MM_MK_INSERTPS_NDX(X, Y, Z) (((X) << 6) | ((Y) << 4) | (Z))
881 
882 /* Extract a float from X at index N into the first index of the return. */
883 #define _MM_PICK_OUT_PS(X, N) _mm_insert_ps (_mm_setzero_ps(), (X), \
884  _MM_MK_INSERTPS_NDX((N), 0, 0x0e))
885 
886 /* Insert int into packed integer array at index. */
927 #define _mm_insert_epi8(X, I, N) \
928  (__m128i)__builtin_ia32_vec_set_v16qi((__v16qi)(__m128i)(X), \
929  (int)(I), (int)(N))
930 
959 #define _mm_insert_epi32(X, I, N) \
960  (__m128i)__builtin_ia32_vec_set_v4si((__v4si)(__m128i)(X), \
961  (int)(I), (int)(N))
962 
963 #ifdef __x86_64__
990 #define _mm_insert_epi64(X, I, N) \
991  (__m128i)__builtin_ia32_vec_set_v2di((__v2di)(__m128i)(X), \
992  (long long)(I), (int)(N))
993 #endif /* __x86_64__ */
994 
995 /* Extract int from packed integer array at index. This returns the element
996  * as a zero extended value, so it is unsigned.
997  */
1033 #define _mm_extract_epi8(X, N) \
1034  (int)(unsigned char)__builtin_ia32_vec_ext_v16qi((__v16qi)(__m128i)(X), \
1035  (int)(N))
1036 
1059 #define _mm_extract_epi32(X, N) \
1060  (int)__builtin_ia32_vec_ext_v4si((__v4si)(__m128i)(X), (int)(N))
1061 
1062 #ifdef __x86_64__
1082 #define _mm_extract_epi64(X, N) \
1083  (long long)__builtin_ia32_vec_ext_v2di((__v2di)(__m128i)(X), (int)(N))
1084 #endif /* __x86_64 */
1085 
1086 /* SSE4 128-bit Packed Integer Comparisons. */
1099 static __inline__ int __DEFAULT_FN_ATTRS
1100 _mm_testz_si128(__m128i __M, __m128i __V)
1101 {
1102  return __builtin_ia32_ptestz128((__v2di)__M, (__v2di)__V);
1103 }
1104 
1117 static __inline__ int __DEFAULT_FN_ATTRS
1118 _mm_testc_si128(__m128i __M, __m128i __V)
1119 {
1120  return __builtin_ia32_ptestc128((__v2di)__M, (__v2di)__V);
1121 }
1122 
1136 static __inline__ int __DEFAULT_FN_ATTRS
1137 _mm_testnzc_si128(__m128i __M, __m128i __V)
1138 {
1139  return __builtin_ia32_ptestnzc128((__v2di)__M, (__v2di)__V);
1140 }
1141 
1157 #define _mm_test_all_ones(V) _mm_testc_si128((V), _mm_cmpeq_epi32((V), (V)))
1158 
1176 #define _mm_test_mix_ones_zeros(M, V) _mm_testnzc_si128((M), (V))
1177 
1194 #define _mm_test_all_zeros(M, V) _mm_testz_si128 ((M), (V))
1195 
1196 /* SSE4 64-bit Packed Integer Comparisons. */
1209 static __inline__ __m128i __DEFAULT_FN_ATTRS
1210 _mm_cmpeq_epi64(__m128i __V1, __m128i __V2)
1211 {
1212  return (__m128i)((__v2di)__V1 == (__v2di)__V2);
1213 }
1214 
1215 /* SSE4 Packed Integer Sign-Extension. */
1229 static __inline__ __m128i __DEFAULT_FN_ATTRS
1230 _mm_cvtepi8_epi16(__m128i __V)
1231 {
1232  /* This function always performs a signed extension, but __v16qi is a char
1233  which may be signed or unsigned, so use __v16qs. */
1234  return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v16qs)__V, (__v16qs)__V, 0, 1, 2, 3, 4, 5, 6, 7), __v8hi);
1235 }
1236 
1250 static __inline__ __m128i __DEFAULT_FN_ATTRS
1251 _mm_cvtepi8_epi32(__m128i __V)
1252 {
1253  /* This function always performs a signed extension, but __v16qi is a char
1254  which may be signed or unsigned, so use __v16qs. */
1255  return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v16qs)__V, (__v16qs)__V, 0, 1, 2, 3), __v4si);
1256 }
1257 
1271 static __inline__ __m128i __DEFAULT_FN_ATTRS
1272 _mm_cvtepi8_epi64(__m128i __V)
1273 {
1274  /* This function always performs a signed extension, but __v16qi is a char
1275  which may be signed or unsigned, so use __v16qs. */
1276  return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v16qs)__V, (__v16qs)__V, 0, 1), __v2di);
1277 }
1278 
1292 static __inline__ __m128i __DEFAULT_FN_ATTRS
1294 {
1295  return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v8hi)__V, (__v8hi)__V, 0, 1, 2, 3), __v4si);
1296 }
1297 
1311 static __inline__ __m128i __DEFAULT_FN_ATTRS
1313 {
1314  return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v8hi)__V, (__v8hi)__V, 0, 1), __v2di);
1315 }
1316 
1330 static __inline__ __m128i __DEFAULT_FN_ATTRS
1332 {
1333  return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v4si)__V, (__v4si)__V, 0, 1), __v2di);
1334 }
1335 
1336 /* SSE4 Packed Integer Zero-Extension. */
1350 static __inline__ __m128i __DEFAULT_FN_ATTRS
1351 _mm_cvtepu8_epi16(__m128i __V)
1352 {
1353  return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v16qu)__V, (__v16qu)__V, 0, 1, 2, 3, 4, 5, 6, 7), __v8hi);
1354 }
1355 
1369 static __inline__ __m128i __DEFAULT_FN_ATTRS
1370 _mm_cvtepu8_epi32(__m128i __V)
1371 {
1372  return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v16qu)__V, (__v16qu)__V, 0, 1, 2, 3), __v4si);
1373 }
1374 
1388 static __inline__ __m128i __DEFAULT_FN_ATTRS
1389 _mm_cvtepu8_epi64(__m128i __V)
1390 {
1391  return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v16qu)__V, (__v16qu)__V, 0, 1), __v2di);
1392 }
1393 
1407 static __inline__ __m128i __DEFAULT_FN_ATTRS
1409 {
1410  return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v8hu)__V, (__v8hu)__V, 0, 1, 2, 3), __v4si);
1411 }
1412 
1426 static __inline__ __m128i __DEFAULT_FN_ATTRS
1428 {
1429  return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v8hu)__V, (__v8hu)__V, 0, 1), __v2di);
1430 }
1431 
1445 static __inline__ __m128i __DEFAULT_FN_ATTRS
1447 {
1448  return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v4su)__V, (__v4su)__V, 0, 1), __v2di);
1449 }
1450 
1451 /* SSE4 Pack with Unsigned Saturation. */
1474 static __inline__ __m128i __DEFAULT_FN_ATTRS
1475 _mm_packus_epi32(__m128i __V1, __m128i __V2)
1476 {
1477  return (__m128i) __builtin_ia32_packusdw128((__v4si)__V1, (__v4si)__V2);
1478 }
1479 
1480 /* SSE4 Multiple Packed Sums of Absolute Difference. */
1516 #define _mm_mpsadbw_epu8(X, Y, M) \
1517  (__m128i) __builtin_ia32_mpsadbw128((__v16qi)(__m128i)(X), \
1518  (__v16qi)(__m128i)(Y), (M))
1519 
1533 static __inline__ __m128i __DEFAULT_FN_ATTRS
1534 _mm_minpos_epu16(__m128i __V)
1535 {
1536  return (__m128i) __builtin_ia32_phminposuw128((__v8hi)__V);
1537 }
1538 
1539 /* Handle the sse4.2 definitions here. */
1540 
1541 /* These definitions are normally in nmmintrin.h, but gcc puts them in here
1542  so we'll do the same. */
1543 
1544 #undef __DEFAULT_FN_ATTRS
1545 #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse4.2")))
1546 
1547 /* These specify the type of data that we're comparing. */
1548 #define _SIDD_UBYTE_OPS 0x00
1549 #define _SIDD_UWORD_OPS 0x01
1550 #define _SIDD_SBYTE_OPS 0x02
1551 #define _SIDD_SWORD_OPS 0x03
1552 
1553 /* These specify the type of comparison operation. */
1554 #define _SIDD_CMP_EQUAL_ANY 0x00
1555 #define _SIDD_CMP_RANGES 0x04
1556 #define _SIDD_CMP_EQUAL_EACH 0x08
1557 #define _SIDD_CMP_EQUAL_ORDERED 0x0c
1558 
1559 /* These macros specify the polarity of the operation. */
1560 #define _SIDD_POSITIVE_POLARITY 0x00
1561 #define _SIDD_NEGATIVE_POLARITY 0x10
1562 #define _SIDD_MASKED_POSITIVE_POLARITY 0x20
1563 #define _SIDD_MASKED_NEGATIVE_POLARITY 0x30
1564 
1565 /* These macros are used in _mm_cmpXstri() to specify the return. */
1566 #define _SIDD_LEAST_SIGNIFICANT 0x00
1567 #define _SIDD_MOST_SIGNIFICANT 0x40
1568 
1569 /* These macros are used in _mm_cmpXstri() to specify the return. */
1570 #define _SIDD_BIT_MASK 0x00
1571 #define _SIDD_UNIT_MASK 0x40
1572 
1573 /* SSE4.2 Packed Comparison Intrinsics. */
1626 #define _mm_cmpistrm(A, B, M) \
1627  (__m128i)__builtin_ia32_pcmpistrm128((__v16qi)(__m128i)(A), \
1628  (__v16qi)(__m128i)(B), (int)(M))
1629 
1680 #define _mm_cmpistri(A, B, M) \
1681  (int)__builtin_ia32_pcmpistri128((__v16qi)(__m128i)(A), \
1682  (__v16qi)(__m128i)(B), (int)(M))
1683 
1740 #define _mm_cmpestrm(A, LA, B, LB, M) \
1741  (__m128i)__builtin_ia32_pcmpestrm128((__v16qi)(__m128i)(A), (int)(LA), \
1742  (__v16qi)(__m128i)(B), (int)(LB), \
1743  (int)(M))
1744 
1799 #define _mm_cmpestri(A, LA, B, LB, M) \
1800  (int)__builtin_ia32_pcmpestri128((__v16qi)(__m128i)(A), (int)(LA), \
1801  (__v16qi)(__m128i)(B), (int)(LB), \
1802  (int)(M))
1803 
1804 /* SSE4.2 Packed Comparison Intrinsics and EFlag Reading. */
1851 #define _mm_cmpistra(A, B, M) \
1852  (int)__builtin_ia32_pcmpistria128((__v16qi)(__m128i)(A), \
1853  (__v16qi)(__m128i)(B), (int)(M))
1854 
1900 #define _mm_cmpistrc(A, B, M) \
1901  (int)__builtin_ia32_pcmpistric128((__v16qi)(__m128i)(A), \
1902  (__v16qi)(__m128i)(B), (int)(M))
1903 
1948 #define _mm_cmpistro(A, B, M) \
1949  (int)__builtin_ia32_pcmpistrio128((__v16qi)(__m128i)(A), \
1950  (__v16qi)(__m128i)(B), (int)(M))
1951 
1998 #define _mm_cmpistrs(A, B, M) \
1999  (int)__builtin_ia32_pcmpistris128((__v16qi)(__m128i)(A), \
2000  (__v16qi)(__m128i)(B), (int)(M))
2001 
2048 #define _mm_cmpistrz(A, B, M) \
2049  (int)__builtin_ia32_pcmpistriz128((__v16qi)(__m128i)(A), \
2050  (__v16qi)(__m128i)(B), (int)(M))
2051 
2102 #define _mm_cmpestra(A, LA, B, LB, M) \
2103  (int)__builtin_ia32_pcmpestria128((__v16qi)(__m128i)(A), (int)(LA), \
2104  (__v16qi)(__m128i)(B), (int)(LB), \
2105  (int)(M))
2106 
2156 #define _mm_cmpestrc(A, LA, B, LB, M) \
2157  (int)__builtin_ia32_pcmpestric128((__v16qi)(__m128i)(A), (int)(LA), \
2158  (__v16qi)(__m128i)(B), (int)(LB), \
2159  (int)(M))
2160 
2209 #define _mm_cmpestro(A, LA, B, LB, M) \
2210  (int)__builtin_ia32_pcmpestrio128((__v16qi)(__m128i)(A), (int)(LA), \
2211  (__v16qi)(__m128i)(B), (int)(LB), \
2212  (int)(M))
2213 
2264 #define _mm_cmpestrs(A, LA, B, LB, M) \
2265  (int)__builtin_ia32_pcmpestris128((__v16qi)(__m128i)(A), (int)(LA), \
2266  (__v16qi)(__m128i)(B), (int)(LB), \
2267  (int)(M))
2268 
2318 #define _mm_cmpestrz(A, LA, B, LB, M) \
2319  (int)__builtin_ia32_pcmpestriz128((__v16qi)(__m128i)(A), (int)(LA), \
2320  (__v16qi)(__m128i)(B), (int)(LB), \
2321  (int)(M))
2322 
2323 /* SSE4.2 Compare Packed Data -- Greater Than. */
2337 static __inline__ __m128i __DEFAULT_FN_ATTRS
2338 _mm_cmpgt_epi64(__m128i __V1, __m128i __V2)
2339 {
2340  return (__m128i)((__v2di)__V1 > (__v2di)__V2);
2341 }
2342 
2343 /* SSE4.2 Accumulate CRC32. */
2358 static __inline__ unsigned int __DEFAULT_FN_ATTRS
2359 _mm_crc32_u8(unsigned int __C, unsigned char __D)
2360 {
2361  return __builtin_ia32_crc32qi(__C, __D);
2362 }
2363 
2378 static __inline__ unsigned int __DEFAULT_FN_ATTRS
2379 _mm_crc32_u16(unsigned int __C, unsigned short __D)
2380 {
2381  return __builtin_ia32_crc32hi(__C, __D);
2382 }
2383 
2398 static __inline__ unsigned int __DEFAULT_FN_ATTRS
2399 _mm_crc32_u32(unsigned int __C, unsigned int __D)
2400 {
2401  return __builtin_ia32_crc32si(__C, __D);
2402 }
2403 
2404 #ifdef __x86_64__
2419 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
2420 _mm_crc32_u64(unsigned long long __C, unsigned long long __D)
2421 {
2422  return __builtin_ia32_crc32di(__C, __D);
2423 }
2424 #endif /* __x86_64__ */
2425 
2426 #undef __DEFAULT_FN_ATTRS
2427 
2428 #include <popcntintrin.h>
2429 
2430 #endif /* __SMMINTRIN_H */
static __inline__ unsigned int unsigned char __D
Definition: ia32intrin.h:283
static __inline__ unsigned char int __C
Definition: ia32intrin.h:373
static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_blendv_pd(__m128d __V1, __m128d __V2, __m128d __M)
Returns a 128-bit vector of [2 x double] where the values are selected from either the first or secon...
Definition: smmintrin.h:431
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_min_epu16(__m128i __V1, __m128i __V2)
Compares the corresponding elements of two 128-bit vectors of [8 x u16] and returns a 128-bit vector ...
Definition: smmintrin.h:703
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtepu8_epi32(__m128i __V)
Zero-extends each of the lower four 8-bit integer elements of a 128-bit vector of [16 x i8] to 32-bit...
Definition: smmintrin.h:1370
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtepu8_epi16(__m128i __V)
Zero-extends each of the lower eight 8-bit integer elements of a 128-bit vector of [16 x i8] to 16-bi...
Definition: smmintrin.h:1351
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_mullo_epi32(__m128i __V1, __m128i __V2)
Multiples corresponding elements of two 128-bit vectors of [4 x i32] and returns the lower 32 bits of...
Definition: smmintrin.h:534
static __inline__ unsigned int __DEFAULT_FN_ATTRS _mm_crc32_u8(unsigned int __C, unsigned char __D)
Adds the unsigned integer operand to the CRC-32C checksum of the unsigned char operand.
Definition: smmintrin.h:2359
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_min_epi8(__m128i __V1, __m128i __V2)
Compares the corresponding elements of two 128-bit vectors of [16 x i8] and returns a 128-bit vector ...
Definition: smmintrin.h:665
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_max_epu32(__m128i __V1, __m128i __V2)
Compares the corresponding elements of two 128-bit vectors of [4 x u32] and returns a 128-bit vector ...
Definition: smmintrin.h:798
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtepi8_epi32(__m128i __V)
Sign-extends each of the lower four 8-bit integer elements of a 128-bit vector of [16 x i8] to 32-bit...
Definition: smmintrin.h:1251
#define __DEFAULT_FN_ATTRS
Definition: smmintrin.h:1545
static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_blendv_ps(__m128 __V1, __m128 __V2, __m128 __M)
Returns a 128-bit vector of [4 x float] where the values are selected from either the first or second...
Definition: smmintrin.h:458
static __inline__ unsigned int __DEFAULT_FN_ATTRS _mm_crc32_u32(unsigned int __C, unsigned int __D)
Adds the first unsigned integer operand to the CRC-32C checksum of the second unsigned integer operan...
Definition: smmintrin.h:2399
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtepu32_epi64(__m128i __V)
Zero-extends each of the lower two 32-bit integer elements of a 128-bit integer vector of [4 x i32] t...
Definition: smmintrin.h:1446
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtepu16_epi64(__m128i __V)
Zero-extends each of the lower two 16-bit integer elements of a 128-bit integer vector of [8 x i16] t...
Definition: smmintrin.h:1427
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_stream_load_si128(__m128i const *__V)
Loads integer values from a 128-bit aligned memory location to a 128-bit integer vector.
Definition: smmintrin.h:645
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpgt_epi64(__m128i __V1, __m128i __V2)
Compares each of the corresponding 64-bit values of the 128-bit integer vectors to determine if the v...
Definition: smmintrin.h:2338
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_packus_epi32(__m128i __V1, __m128i __V2)
Converts 32-bit signed integers from both 128-bit integer vector operands into 16-bit unsigned intege...
Definition: smmintrin.h:1475
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_min_epi32(__m128i __V1, __m128i __V2)
Compares the corresponding elements of two 128-bit vectors of [4 x i32] and returns a 128-bit vector ...
Definition: smmintrin.h:741
static __inline__ unsigned int __DEFAULT_FN_ATTRS _mm_crc32_u16(unsigned int __C, unsigned short __D)
Adds the unsigned integer operand to the CRC-32C checksum of the unsigned short operand.
Definition: smmintrin.h:2379
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtepi16_epi64(__m128i __V)
Sign-extends each of the lower two 16-bit integer elements of a 128-bit integer vector of [8 x i16] t...
Definition: smmintrin.h:1312
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtepi8_epi64(__m128i __V)
Sign-extends each of the lower two 8-bit integer elements of a 128-bit integer vector of [16 x i8] to...
Definition: smmintrin.h:1272
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_max_epi8(__m128i __V1, __m128i __V2)
Compares the corresponding elements of two 128-bit vectors of [16 x i8] and returns a 128-bit vector ...
Definition: smmintrin.h:684
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_max_epu16(__m128i __V1, __m128i __V2)
Compares the corresponding elements of two 128-bit vectors of [8 x u16] and returns a 128-bit vector ...
Definition: smmintrin.h:722
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpeq_epi64(__m128i __V1, __m128i __V2)
Compares each of the corresponding 64-bit values of the 128-bit integer vectors for equality.
Definition: smmintrin.h:1210
static __inline__ int __DEFAULT_FN_ATTRS _mm_testnzc_si128(__m128i __M, __m128i __V)
Tests whether the specified bits in a 128-bit integer vector are neither all zeros nor all ones.
Definition: smmintrin.h:1137
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtepi16_epi32(__m128i __V)
Sign-extends each of the lower four 16-bit integer elements of a 128-bit integer vector of [8 x i16] ...
Definition: smmintrin.h:1293
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtepu16_epi32(__m128i __V)
Zero-extends each of the lower four 16-bit integer elements of a 128-bit integer vector of [8 x i16] ...
Definition: smmintrin.h:1408
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_max_epi32(__m128i __V1, __m128i __V2)
Compares the corresponding elements of two 128-bit vectors of [4 x i32] and returns a 128-bit vector ...
Definition: smmintrin.h:760
static __inline__ int __DEFAULT_FN_ATTRS _mm_testc_si128(__m128i __M, __m128i __V)
Tests whether the specified bits in a 128-bit integer vector are all ones.
Definition: smmintrin.h:1118
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtepu8_epi64(__m128i __V)
Zero-extends each of the lower two 8-bit integer elements of a 128-bit integer vector of [16 x i8] to...
Definition: smmintrin.h:1389
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_min_epu32(__m128i __V1, __m128i __V2)
Compares the corresponding elements of two 128-bit vectors of [4 x u32] and returns a 128-bit vector ...
Definition: smmintrin.h:779
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtepi8_epi16(__m128i __V)
Sign-extends each of the lower eight 8-bit integer elements of a 128-bit vector of [16 x i8] to 16-bi...
Definition: smmintrin.h:1230
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_mul_epi32(__m128i __V1, __m128i __V2)
Multiplies corresponding even-indexed elements of two 128-bit vectors of [4 x i32] and returns a 128-...
Definition: smmintrin.h:554
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_minpos_epu16(__m128i __V)
Finds the minimum unsigned 16-bit element in the input 128-bit vector of [8 x u16] and returns it and...
Definition: smmintrin.h:1534
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtepi32_epi64(__m128i __V)
Sign-extends each of the lower two 32-bit integer elements of a 128-bit integer vector of [4 x i32] t...
Definition: smmintrin.h:1331
static __inline__ int __DEFAULT_FN_ATTRS _mm_testz_si128(__m128i __M, __m128i __V)
Tests whether the specified bits in a 128-bit integer vector are all zeros.
Definition: smmintrin.h:1100
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_blendv_epi8(__m128i __V1, __m128i __V2, __m128i __M)
Returns a 128-bit vector of [16 x i8] where the values are selected from either of the first or secon...
Definition: smmintrin.h:485