@cpp-linter/clang-tidy-win32-x64 12.0.1 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/README.md +2 -2
  2. package/bin/clang-tidy.exe +2 -2
  3. package/lib/clang/{12.0.1 → 14.0.0}/include/__clang_cuda_complex_builtins.h +3 -3
  4. package/lib/clang/{12.0.1 → 14.0.0}/include/__clang_cuda_device_functions.h +174 -102
  5. package/lib/clang/{12.0.1 → 14.0.0}/include/__clang_cuda_intrinsics.h +32 -0
  6. package/lib/clang/{12.0.1 → 14.0.0}/include/__clang_cuda_libdevice_declares.h +6 -0
  7. package/lib/clang/{12.0.1 → 14.0.0}/include/__clang_cuda_math.h +3 -3
  8. package/lib/clang/{12.0.1 → 14.0.0}/include/__clang_cuda_runtime_wrapper.h +68 -8
  9. package/lib/clang/14.0.0/include/__clang_cuda_texture_intrinsics.h +740 -0
  10. package/lib/clang/{12.0.1 → 14.0.0}/include/__clang_hip_cmath.h +272 -94
  11. package/lib/clang/{12.0.1 → 14.0.0}/include/__clang_hip_libdevice_declares.h +24 -12
  12. package/lib/clang/{12.0.1 → 14.0.0}/include/__clang_hip_math.h +48 -2
  13. package/lib/clang/14.0.0/include/__clang_hip_runtime_wrapper.h +137 -0
  14. package/lib/clang/{12.0.1 → 14.0.0}/include/__wmmintrin_aes.h +1 -1
  15. package/lib/clang/{12.0.1 → 14.0.0}/include/altivec.h +1348 -496
  16. package/lib/clang/{12.0.1 → 14.0.0}/include/ammintrin.h +4 -0
  17. package/lib/clang/14.0.0/include/amxintrin.h +494 -0
  18. package/lib/clang/{12.0.1 → 14.0.0}/include/arm_acle.h +61 -0
  19. package/lib/clang/{12.0.1 → 14.0.0}/include/arm_neon.h +5544 -4634
  20. package/lib/clang/14.0.0/include/arm_neon_sve_bridge.h +184 -0
  21. package/lib/clang/{12.0.1 → 14.0.0}/include/arm_sve.h +11791 -5896
  22. package/lib/clang/{12.0.1 → 14.0.0}/include/avx2intrin.h +181 -181
  23. package/lib/clang/{12.0.1 → 14.0.0}/include/avx512bf16intrin.h +3 -3
  24. package/lib/clang/{12.0.1 → 14.0.0}/include/avx512bwintrin.h +71 -71
  25. package/lib/clang/{12.0.1 → 14.0.0}/include/avx512dqintrin.h +365 -365
  26. package/lib/clang/{12.0.1 → 14.0.0}/include/avx512erintrin.h +102 -102
  27. package/lib/clang/{12.0.1 → 14.0.0}/include/avx512fintrin.h +1750 -1606
  28. package/lib/clang/14.0.0/include/avx512fp16intrin.h +3349 -0
  29. package/lib/clang/{12.0.1 → 14.0.0}/include/avx512vbmi2intrin.h +48 -48
  30. package/lib/clang/{12.0.1 → 14.0.0}/include/avx512vlbf16intrin.h +51 -3
  31. package/lib/clang/{12.0.1 → 14.0.0}/include/avx512vlbwintrin.h +94 -94
  32. package/lib/clang/{12.0.1 → 14.0.0}/include/avx512vldqintrin.h +134 -134
  33. package/lib/clang/14.0.0/include/avx512vlfp16intrin.h +2068 -0
  34. package/lib/clang/{12.0.1 → 14.0.0}/include/avx512vlintrin.h +563 -563
  35. package/lib/clang/{12.0.1 → 14.0.0}/include/avx512vlvbmi2intrin.h +96 -96
  36. package/lib/clang/{12.0.1 → 14.0.0}/include/avx512vlvnniintrin.h +8 -8
  37. package/lib/clang/{12.0.1 → 14.0.0}/include/avxintrin.h +189 -192
  38. package/lib/clang/14.0.0/include/builtins.h +16 -0
  39. package/lib/clang/{12.0.1 → 14.0.0}/include/cetintrin.h +10 -0
  40. package/lib/clang/{12.0.1 → 14.0.0}/include/cpuid.h +2 -1
  41. package/lib/clang/14.0.0/include/crc32intrin.h +100 -0
  42. package/lib/clang/{12.0.1 → 14.0.0}/include/cuda_wrappers/complex +8 -0
  43. package/lib/clang/{12.0.1 → 14.0.0}/include/emmintrin.h +21 -17
  44. package/lib/clang/{12.0.1 → 14.0.0}/include/f16cintrin.h +4 -4
  45. package/lib/clang/{12.0.1 → 14.0.0}/include/float.h +15 -6
  46. package/lib/clang/{12.0.1 → 14.0.0}/include/gfniintrin.h +47 -48
  47. package/lib/clang/14.0.0/include/hexagon_circ_brev_intrinsics.h +298 -0
  48. package/lib/clang/14.0.0/include/hexagon_protos.h +8439 -0
  49. package/lib/clang/14.0.0/include/hexagon_types.h +2621 -0
  50. package/lib/clang/14.0.0/include/hvx_hexagon_protos.h +5183 -0
  51. package/lib/clang/{12.0.1 → 14.0.0}/include/ia32intrin.h +6 -6
  52. package/lib/clang/{12.0.1 → 14.0.0}/include/immintrin.h +31 -13
  53. package/lib/clang/{12.0.1 → 14.0.0}/include/intrin.h +63 -19
  54. package/lib/clang/{12.0.1 → 14.0.0}/include/keylockerintrin.h +32 -8
  55. package/lib/clang/{12.0.1 → 14.0.0}/include/limits.h +20 -0
  56. package/lib/clang/{12.0.1 → 14.0.0}/include/mmintrin.h +4 -0
  57. package/lib/clang/{12.0.1 → 14.0.0}/include/nmmintrin.h +4 -0
  58. package/lib/clang/{12.0.1 → 14.0.0}/include/opencl-c-base.h +206 -7
  59. package/lib/clang/{12.0.1 → 14.0.0}/include/opencl-c.h +2187 -797
  60. package/lib/clang/14.0.0/include/openmp_wrappers/__clang_openmp_device_functions.h +106 -0
  61. package/lib/clang/{12.0.1 → 14.0.0}/include/openmp_wrappers/cmath +54 -0
  62. package/lib/clang/{12.0.1 → 14.0.0}/include/openmp_wrappers/complex +11 -8
  63. package/lib/clang/{12.0.1 → 14.0.0}/include/openmp_wrappers/complex.h +9 -1
  64. package/lib/clang/{12.0.1 → 14.0.0}/include/openmp_wrappers/math.h +10 -0
  65. package/lib/clang/{12.0.1 → 14.0.0}/include/openmp_wrappers/new +2 -24
  66. package/lib/clang/{12.0.1 → 14.0.0}/include/pmmintrin.h +4 -0
  67. package/lib/clang/{12.0.1 → 14.0.0}/include/ppc_wrappers/emmintrin.h +3 -2
  68. package/lib/clang/{12.0.1 → 14.0.0}/include/ppc_wrappers/mm_malloc.h +2 -2
  69. package/lib/clang/{12.0.1 → 14.0.0}/include/ppc_wrappers/mmintrin.h +3 -2
  70. package/lib/clang/{12.0.1 → 14.0.0}/include/ppc_wrappers/pmmintrin.h +3 -2
  71. package/lib/clang/{12.0.1 → 14.0.0}/include/ppc_wrappers/smmintrin.h +4 -3
  72. package/lib/clang/{12.0.1 → 14.0.0}/include/ppc_wrappers/tmmintrin.h +3 -2
  73. package/lib/clang/{12.0.1 → 14.0.0}/include/ppc_wrappers/xmmintrin.h +3 -2
  74. package/lib/clang/{12.0.1 → 14.0.0}/include/prfchwintrin.h +5 -2
  75. package/lib/clang/14.0.0/include/riscv_vector.h +95423 -0
  76. package/lib/clang/{12.0.1 → 14.0.0}/include/smmintrin.h +80 -159
  77. package/lib/clang/{12.0.1 → 14.0.0}/include/stdatomic.h +14 -1
  78. package/lib/clang/{12.0.1 → 14.0.0}/include/stdint.h +168 -0
  79. package/lib/clang/{12.0.1 → 14.0.0}/include/tmmintrin.h +10 -6
  80. package/lib/clang/{12.0.1 → 14.0.0}/include/uintrintrin.h +7 -0
  81. package/lib/clang/{12.0.1 → 14.0.0}/include/unwind.h +2 -1
  82. package/lib/clang/{12.0.1 → 14.0.0}/include/vaesintrin.h +22 -21
  83. package/lib/clang/{12.0.1 → 14.0.0}/include/vecintrin.h +206 -77
  84. package/lib/clang/{12.0.1 → 14.0.0}/include/vpclmulqdqintrin.h +8 -6
  85. package/lib/clang/14.0.0/include/wasm_simd128.h +1877 -0
  86. package/lib/clang/{12.0.1 → 14.0.0}/include/wmmintrin.h +4 -0
  87. package/lib/clang/{12.0.1 → 14.0.0}/include/x86gprintrin.h +12 -0
  88. package/lib/clang/{12.0.1 → 14.0.0}/include/xmmintrin.h +9 -5
  89. package/lib/clang/{12.0.1 → 14.0.0}/include/xopintrin.h +31 -31
  90. package/package.json +6 -6
  91. package/lib/clang/12.0.1/include/__clang_hip_runtime_wrapper.h +0 -69
  92. package/lib/clang/12.0.1/include/amxintrin.h +0 -278
  93. package/lib/clang/12.0.1/include/openmp_wrappers/__clang_openmp_device_functions.h +0 -42
  94. package/lib/clang/12.0.1/include/wasm_simd128.h +0 -1167
  95. /package/lib/clang/{12.0.1 → 14.0.0}/include/__clang_cuda_builtin_vars.h +0 -0
  96. /package/lib/clang/{12.0.1 → 14.0.0}/include/__clang_cuda_cmath.h +0 -0
  97. /package/lib/clang/{12.0.1 → 14.0.0}/include/__clang_cuda_math_forward_declares.h +0 -0
  98. /package/lib/clang/{12.0.1 → 14.0.0}/include/__stddef_max_align_t.h +0 -0
  99. /package/lib/clang/{12.0.1 → 14.0.0}/include/__wmmintrin_pclmul.h +0 -0
  100. /package/lib/clang/{12.0.1 → 14.0.0}/include/adxintrin.h +0 -0
  101. /package/lib/clang/{12.0.1 → 14.0.0}/include/arm64intr.h +0 -0
  102. /package/lib/clang/{12.0.1 → 14.0.0}/include/arm_bf16.h +0 -0
  103. /package/lib/clang/{12.0.1 → 14.0.0}/include/arm_cde.h +0 -0
  104. /package/lib/clang/{12.0.1 → 14.0.0}/include/arm_cmse.h +0 -0
  105. /package/lib/clang/{12.0.1 → 14.0.0}/include/arm_fp16.h +0 -0
  106. /package/lib/clang/{12.0.1 → 14.0.0}/include/arm_mve.h +0 -0
  107. /package/lib/clang/{12.0.1 → 14.0.0}/include/armintr.h +0 -0
  108. /package/lib/clang/{12.0.1 → 14.0.0}/include/avx512bitalgintrin.h +0 -0
  109. /package/lib/clang/{12.0.1 → 14.0.0}/include/avx512cdintrin.h +0 -0
  110. /package/lib/clang/{12.0.1 → 14.0.0}/include/avx512ifmaintrin.h +0 -0
  111. /package/lib/clang/{12.0.1 → 14.0.0}/include/avx512ifmavlintrin.h +0 -0
  112. /package/lib/clang/{12.0.1 → 14.0.0}/include/avx512pfintrin.h +0 -0
  113. /package/lib/clang/{12.0.1 → 14.0.0}/include/avx512vbmiintrin.h +0 -0
  114. /package/lib/clang/{12.0.1 → 14.0.0}/include/avx512vbmivlintrin.h +0 -0
  115. /package/lib/clang/{12.0.1 → 14.0.0}/include/avx512vlbitalgintrin.h +0 -0
  116. /package/lib/clang/{12.0.1 → 14.0.0}/include/avx512vlcdintrin.h +0 -0
  117. /package/lib/clang/{12.0.1 → 14.0.0}/include/avx512vlvp2intersectintrin.h +0 -0
  118. /package/lib/clang/{12.0.1 → 14.0.0}/include/avx512vnniintrin.h +0 -0
  119. /package/lib/clang/{12.0.1 → 14.0.0}/include/avx512vp2intersectintrin.h +0 -0
  120. /package/lib/clang/{12.0.1 → 14.0.0}/include/avx512vpopcntdqintrin.h +0 -0
  121. /package/lib/clang/{12.0.1 → 14.0.0}/include/avx512vpopcntdqvlintrin.h +0 -0
  122. /package/lib/clang/{12.0.1 → 14.0.0}/include/avxvnniintrin.h +0 -0
  123. /package/lib/clang/{12.0.1 → 14.0.0}/include/bmi2intrin.h +0 -0
  124. /package/lib/clang/{12.0.1 → 14.0.0}/include/bmiintrin.h +0 -0
  125. /package/lib/clang/{12.0.1 → 14.0.0}/include/cet.h +0 -0
  126. /package/lib/clang/{12.0.1 → 14.0.0}/include/cldemoteintrin.h +0 -0
  127. /package/lib/clang/{12.0.1 → 14.0.0}/include/clflushoptintrin.h +0 -0
  128. /package/lib/clang/{12.0.1 → 14.0.0}/include/clwbintrin.h +0 -0
  129. /package/lib/clang/{12.0.1 → 14.0.0}/include/clzerointrin.h +0 -0
  130. /package/lib/clang/{12.0.1 → 14.0.0}/include/cuda_wrappers/algorithm +0 -0
  131. /package/lib/clang/{12.0.1 → 14.0.0}/include/cuda_wrappers/new +0 -0
  132. /package/lib/clang/{12.0.1 → 14.0.0}/include/enqcmdintrin.h +0 -0
  133. /package/lib/clang/{12.0.1 → 14.0.0}/include/fma4intrin.h +0 -0
  134. /package/lib/clang/{12.0.1 → 14.0.0}/include/fmaintrin.h +0 -0
  135. /package/lib/clang/{12.0.1 → 14.0.0}/include/fxsrintrin.h +0 -0
  136. /package/lib/clang/{12.0.1 → 14.0.0}/include/hresetintrin.h +0 -0
  137. /package/lib/clang/{12.0.1 → 14.0.0}/include/htmintrin.h +0 -0
  138. /package/lib/clang/{12.0.1 → 14.0.0}/include/htmxlintrin.h +0 -0
  139. /package/lib/clang/{12.0.1 → 14.0.0}/include/inttypes.h +0 -0
  140. /package/lib/clang/{12.0.1 → 14.0.0}/include/invpcidintrin.h +0 -0
  141. /package/lib/clang/{12.0.1 → 14.0.0}/include/iso646.h +0 -0
  142. /package/lib/clang/{12.0.1 → 14.0.0}/include/lwpintrin.h +0 -0
  143. /package/lib/clang/{12.0.1 → 14.0.0}/include/lzcntintrin.h +0 -0
  144. /package/lib/clang/{12.0.1 → 14.0.0}/include/mm3dnow.h +0 -0
  145. /package/lib/clang/{12.0.1 → 14.0.0}/include/mm_malloc.h +0 -0
  146. /package/lib/clang/{12.0.1 → 14.0.0}/include/module.modulemap +0 -0
  147. /package/lib/clang/{12.0.1 → 14.0.0}/include/movdirintrin.h +0 -0
  148. /package/lib/clang/{12.0.1 → 14.0.0}/include/msa.h +0 -0
  149. /package/lib/clang/{12.0.1 → 14.0.0}/include/mwaitxintrin.h +0 -0
  150. /package/lib/clang/{12.0.1 → 14.0.0}/include/openmp_wrappers/complex_cmath.h +0 -0
  151. /package/lib/clang/{12.0.1 → 14.0.0}/include/pconfigintrin.h +0 -0
  152. /package/lib/clang/{12.0.1 → 14.0.0}/include/pkuintrin.h +0 -0
  153. /package/lib/clang/{12.0.1 → 14.0.0}/include/popcntintrin.h +0 -0
  154. /package/lib/clang/{12.0.1 → 14.0.0}/include/ptwriteintrin.h +0 -0
  155. /package/lib/clang/{12.0.1 → 14.0.0}/include/rdseedintrin.h +0 -0
  156. /package/lib/clang/{12.0.1 → 14.0.0}/include/rtmintrin.h +0 -0
  157. /package/lib/clang/{12.0.1 → 14.0.0}/include/s390intrin.h +0 -0
  158. /package/lib/clang/{12.0.1 → 14.0.0}/include/serializeintrin.h +0 -0
  159. /package/lib/clang/{12.0.1 → 14.0.0}/include/sgxintrin.h +0 -0
  160. /package/lib/clang/{12.0.1 → 14.0.0}/include/shaintrin.h +0 -0
  161. /package/lib/clang/{12.0.1 → 14.0.0}/include/stdalign.h +0 -0
  162. /package/lib/clang/{12.0.1 → 14.0.0}/include/stdarg.h +0 -0
  163. /package/lib/clang/{12.0.1 → 14.0.0}/include/stdbool.h +0 -0
  164. /package/lib/clang/{12.0.1 → 14.0.0}/include/stddef.h +0 -0
  165. /package/lib/clang/{12.0.1 → 14.0.0}/include/stdnoreturn.h +0 -0
  166. /package/lib/clang/{12.0.1 → 14.0.0}/include/tbmintrin.h +0 -0
  167. /package/lib/clang/{12.0.1 → 14.0.0}/include/tgmath.h +0 -0
  168. /package/lib/clang/{12.0.1 → 14.0.0}/include/tsxldtrkintrin.h +0 -0
  169. /package/lib/clang/{12.0.1 → 14.0.0}/include/vadefs.h +0 -0
  170. /package/lib/clang/{12.0.1 → 14.0.0}/include/varargs.h +0 -0
  171. /package/lib/clang/{12.0.1 → 14.0.0}/include/waitpkgintrin.h +0 -0
  172. /package/lib/clang/{12.0.1 → 14.0.0}/include/wbnoinvdintrin.h +0 -0
  173. /package/lib/clang/{12.0.1 → 14.0.0}/include/x86intrin.h +0 -0
  174. /package/lib/clang/{12.0.1 → 14.0.0}/include/xsavecintrin.h +0 -0
  175. /package/lib/clang/{12.0.1 → 14.0.0}/include/xsaveintrin.h +0 -0
  176. /package/lib/clang/{12.0.1 → 14.0.0}/include/xsaveoptintrin.h +0 -0
  177. /package/lib/clang/{12.0.1 → 14.0.0}/include/xsavesintrin.h +0 -0
  178. /package/lib/clang/{12.0.1 → 14.0.0}/include/xtestintrin.h +0 -0
@@ -10,6 +10,10 @@
10
10
  #ifndef __SMMINTRIN_H
11
11
  #define __SMMINTRIN_H
12
12
 
13
+ #if !defined(__i386__) && !defined(__x86_64__)
14
+ #error "This header is only meant to be used on x86 and x64 architecture"
15
+ #endif
16
+
13
17
  #include <tmmintrin.h>
14
18
 
15
19
  /* Define the default attributes for the functions in this file. */
@@ -231,7 +235,7 @@
231
235
  /// 11: Truncated
232
236
  /// \returns A 128-bit vector of [4 x float] containing the rounded values.
233
237
  #define _mm_round_ps(X, M) \
234
- (__m128)__builtin_ia32_roundps((__v4sf)(__m128)(X), (M))
238
+ ((__m128)__builtin_ia32_roundps((__v4sf)(__m128)(X), (M)))
235
239
 
236
240
  /// Copies three upper elements of the first 128-bit vector operand to
237
241
  /// the corresponding three upper elements of the 128-bit result vector of
@@ -272,8 +276,8 @@
272
276
  /// \returns A 128-bit vector of [4 x float] containing the copied and rounded
273
277
  /// values.
274
278
  #define _mm_round_ss(X, Y, M) \
275
- (__m128)__builtin_ia32_roundss((__v4sf)(__m128)(X), \
276
- (__v4sf)(__m128)(Y), (M))
279
+ ((__m128)__builtin_ia32_roundss((__v4sf)(__m128)(X), \
280
+ (__v4sf)(__m128)(Y), (M)))
277
281
 
278
282
  /// Rounds each element of the 128-bit vector of [2 x double] to an
279
283
  /// integer value according to the rounding control specified by the second
@@ -306,7 +310,7 @@
306
310
  /// 11: Truncated
307
311
  /// \returns A 128-bit vector of [2 x double] containing the rounded values.
308
312
  #define _mm_round_pd(X, M) \
309
- (__m128d)__builtin_ia32_roundpd((__v2df)(__m128d)(X), (M))
313
+ ((__m128d)__builtin_ia32_roundpd((__v2df)(__m128d)(X), (M)))
310
314
 
311
315
  /// Copies the upper element of the first 128-bit vector operand to the
312
316
  /// corresponding upper element of the 128-bit result vector of [2 x double].
@@ -347,8 +351,8 @@
347
351
  /// \returns A 128-bit vector of [2 x double] containing the copied and rounded
348
352
  /// values.
349
353
  #define _mm_round_sd(X, Y, M) \
350
- (__m128d)__builtin_ia32_roundsd((__v2df)(__m128d)(X), \
351
- (__v2df)(__m128d)(Y), (M))
354
+ ((__m128d)__builtin_ia32_roundsd((__v2df)(__m128d)(X), \
355
+ (__v2df)(__m128d)(Y), (M)))
352
356
 
353
357
  /* SSE4 Packed Blending Intrinsics. */
354
358
  /// Returns a 128-bit vector of [2 x double] where the values are
@@ -376,8 +380,8 @@
376
380
  /// is copied to the same position in the result.
377
381
  /// \returns A 128-bit vector of [2 x double] containing the copied values.
378
382
  #define _mm_blend_pd(V1, V2, M) \
379
- (__m128d) __builtin_ia32_blendpd ((__v2df)(__m128d)(V1), \
380
- (__v2df)(__m128d)(V2), (int)(M))
383
+ ((__m128d) __builtin_ia32_blendpd ((__v2df)(__m128d)(V1), \
384
+ (__v2df)(__m128d)(V2), (int)(M)))
381
385
 
382
386
  /// Returns a 128-bit vector of [4 x float] where the values are selected
383
387
  /// from either the first or second operand as specified by the third
@@ -404,8 +408,8 @@
404
408
  /// is copied to the same position in the result.
405
409
  /// \returns A 128-bit vector of [4 x float] containing the copied values.
406
410
  #define _mm_blend_ps(V1, V2, M) \
407
- (__m128) __builtin_ia32_blendps ((__v4sf)(__m128)(V1), \
408
- (__v4sf)(__m128)(V2), (int)(M))
411
+ ((__m128) __builtin_ia32_blendps ((__v4sf)(__m128)(V1), \
412
+ (__v4sf)(__m128)(V2), (int)(M)))
409
413
 
410
414
  /// Returns a 128-bit vector of [2 x double] where the values are
411
415
  /// selected from either the first or second operand as specified by the
@@ -513,8 +517,8 @@ _mm_blendv_epi8 (__m128i __V1, __m128i __V2, __m128i __M)
513
517
  /// is copied to the same position in the result.
514
518
  /// \returns A 128-bit vector of [8 x i16] containing the copied values.
515
519
  #define _mm_blend_epi16(V1, V2, M) \
516
- (__m128i) __builtin_ia32_pblendw128 ((__v8hi)(__m128i)(V1), \
517
- (__v8hi)(__m128i)(V2), (int)(M))
520
+ ((__m128i) __builtin_ia32_pblendw128 ((__v8hi)(__m128i)(V1), \
521
+ (__v8hi)(__m128i)(V2), (int)(M)))
518
522
 
519
523
  /* SSE4 Dword Multiply Instructions. */
520
524
  /// Multiples corresponding elements of two 128-bit vectors of [4 x i32]
@@ -590,8 +594,8 @@ _mm_mul_epi32 (__m128i __V1, __m128i __V2)
590
594
  /// in the corresponding element; otherwise that element is set to zero.
591
595
  /// \returns A 128-bit vector of [4 x float] containing the dot product.
592
596
  #define _mm_dp_ps(X, Y, M) \
593
- (__m128) __builtin_ia32_dpps((__v4sf)(__m128)(X), \
594
- (__v4sf)(__m128)(Y), (M))
597
+ ((__m128) __builtin_ia32_dpps((__v4sf)(__m128)(X), \
598
+ (__v4sf)(__m128)(Y), (M)))
595
599
 
596
600
  /// Computes the dot product of the two 128-bit vectors of [2 x double]
597
601
  /// and returns it in the elements of the 128-bit result vector of
@@ -625,8 +629,8 @@ _mm_mul_epi32 (__m128i __V1, __m128i __V2)
625
629
  /// each [2 x double] vector. If a bit is set, the dot product is returned in
626
630
  /// the corresponding element; otherwise that element is set to zero.
627
631
  #define _mm_dp_pd(X, Y, M) \
628
- (__m128d) __builtin_ia32_dppd((__v2df)(__m128d)(X), \
629
- (__v2df)(__m128d)(Y), (M))
632
+ ((__m128d) __builtin_ia32_dppd((__v2df)(__m128d)(X), \
633
+ (__v2df)(__m128d)(Y), (M)))
630
634
 
631
635
  /* SSE4 Streaming Load Hint Instruction. */
632
636
  /// Loads integer values from a 128-bit aligned memory location to a
@@ -664,7 +668,7 @@ _mm_stream_load_si128 (__m128i const *__V)
664
668
  static __inline__ __m128i __DEFAULT_FN_ATTRS
665
669
  _mm_min_epi8 (__m128i __V1, __m128i __V2)
666
670
  {
667
- return (__m128i) __builtin_ia32_pminsb128 ((__v16qi) __V1, (__v16qi) __V2);
671
+ return (__m128i) __builtin_elementwise_min((__v16qs) __V1, (__v16qs) __V2);
668
672
  }
669
673
 
670
674
  /// Compares the corresponding elements of two 128-bit vectors of
@@ -683,7 +687,7 @@ _mm_min_epi8 (__m128i __V1, __m128i __V2)
683
687
  static __inline__ __m128i __DEFAULT_FN_ATTRS
684
688
  _mm_max_epi8 (__m128i __V1, __m128i __V2)
685
689
  {
686
- return (__m128i) __builtin_ia32_pmaxsb128 ((__v16qi) __V1, (__v16qi) __V2);
690
+ return (__m128i) __builtin_elementwise_max((__v16qs) __V1, (__v16qs) __V2);
687
691
  }
688
692
 
689
693
  /// Compares the corresponding elements of two 128-bit vectors of
@@ -702,7 +706,7 @@ _mm_max_epi8 (__m128i __V1, __m128i __V2)
702
706
  static __inline__ __m128i __DEFAULT_FN_ATTRS
703
707
  _mm_min_epu16 (__m128i __V1, __m128i __V2)
704
708
  {
705
- return (__m128i) __builtin_ia32_pminuw128 ((__v8hi) __V1, (__v8hi) __V2);
709
+ return (__m128i) __builtin_elementwise_min((__v8hu) __V1, (__v8hu) __V2);
706
710
  }
707
711
 
708
712
  /// Compares the corresponding elements of two 128-bit vectors of
@@ -721,7 +725,7 @@ _mm_min_epu16 (__m128i __V1, __m128i __V2)
721
725
  static __inline__ __m128i __DEFAULT_FN_ATTRS
722
726
  _mm_max_epu16 (__m128i __V1, __m128i __V2)
723
727
  {
724
- return (__m128i) __builtin_ia32_pmaxuw128 ((__v8hi) __V1, (__v8hi) __V2);
728
+ return (__m128i) __builtin_elementwise_max((__v8hu) __V1, (__v8hu) __V2);
725
729
  }
726
730
 
727
731
  /// Compares the corresponding elements of two 128-bit vectors of
@@ -740,7 +744,7 @@ _mm_max_epu16 (__m128i __V1, __m128i __V2)
740
744
  static __inline__ __m128i __DEFAULT_FN_ATTRS
741
745
  _mm_min_epi32 (__m128i __V1, __m128i __V2)
742
746
  {
743
- return (__m128i) __builtin_ia32_pminsd128 ((__v4si) __V1, (__v4si) __V2);
747
+ return (__m128i) __builtin_elementwise_min((__v4si) __V1, (__v4si) __V2);
744
748
  }
745
749
 
746
750
  /// Compares the corresponding elements of two 128-bit vectors of
@@ -759,7 +763,7 @@ _mm_min_epi32 (__m128i __V1, __m128i __V2)
759
763
  static __inline__ __m128i __DEFAULT_FN_ATTRS
760
764
  _mm_max_epi32 (__m128i __V1, __m128i __V2)
761
765
  {
762
- return (__m128i) __builtin_ia32_pmaxsd128 ((__v4si) __V1, (__v4si) __V2);
766
+ return (__m128i) __builtin_elementwise_max((__v4si) __V1, (__v4si) __V2);
763
767
  }
764
768
 
765
769
  /// Compares the corresponding elements of two 128-bit vectors of
@@ -778,7 +782,7 @@ _mm_max_epi32 (__m128i __V1, __m128i __V2)
778
782
  static __inline__ __m128i __DEFAULT_FN_ATTRS
779
783
  _mm_min_epu32 (__m128i __V1, __m128i __V2)
780
784
  {
781
- return (__m128i) __builtin_ia32_pminud128((__v4si) __V1, (__v4si) __V2);
785
+ return (__m128i) __builtin_elementwise_min((__v4su) __V1, (__v4su) __V2);
782
786
  }
783
787
 
784
788
  /// Compares the corresponding elements of two 128-bit vectors of
@@ -797,7 +801,7 @@ _mm_min_epu32 (__m128i __V1, __m128i __V2)
797
801
  static __inline__ __m128i __DEFAULT_FN_ATTRS
798
802
  _mm_max_epu32 (__m128i __V1, __m128i __V2)
799
803
  {
800
- return (__m128i) __builtin_ia32_pmaxud128((__v4si) __V1, (__v4si) __V2);
804
+ return (__m128i) __builtin_elementwise_max((__v4su) __V1, (__v4su) __V2);
801
805
  }
802
806
 
803
807
  /* SSE4 Insertion and Extraction from XMM Register Instructions. */
@@ -865,15 +869,13 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
865
869
  /// 10: Bits [95:64] of parameter \a X are returned. \n
866
870
  /// 11: Bits [127:96] of parameter \a X are returned.
867
871
  /// \returns A 32-bit integer containing the extracted 32 bits of float data.
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
+ #define _mm_extract_ps(X, N) \
873
+ __builtin_bit_cast(int, __builtin_ia32_vec_ext_v4sf((__v4sf)(__m128)(X), (int)(N)))
872
874
 
873
875
  /* Miscellaneous insert and extract macros. */
874
876
  /* Extract a single-precision float from X at index N into D. */
875
877
  #define _MM_EXTRACT_FLOAT(D, X, N) \
876
- { (D) = __builtin_ia32_vec_ext_v4sf((__v4sf)(__m128)(X), (int)(N)); }
878
+ do { (D) = __builtin_ia32_vec_ext_v4sf((__v4sf)(__m128)(X), (int)(N)); } while (0)
877
879
 
878
880
  /* Or together 2 sets of indexes (X and Y) with the zeroing bits (Z) to create
879
881
  an index suitable for _mm_insert_ps. */
@@ -925,8 +927,8 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
925
927
  /// 1111: Bits [127:120] of the result are used for insertion.
926
928
  /// \returns A 128-bit integer vector containing the constructed values.
927
929
  #define _mm_insert_epi8(X, I, N) \
928
- (__m128i)__builtin_ia32_vec_set_v16qi((__v16qi)(__m128i)(X), \
929
- (int)(I), (int)(N))
930
+ ((__m128i)__builtin_ia32_vec_set_v16qi((__v16qi)(__m128i)(X), \
931
+ (int)(I), (int)(N)))
930
932
 
931
933
  /// Constructs a 128-bit vector of [4 x i32] by first making a copy of
932
934
  /// the 128-bit integer vector parameter, and then inserting the 32-bit
@@ -957,8 +959,8 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
957
959
  /// 11: Bits [127:96] of the result are used for insertion.
958
960
  /// \returns A 128-bit integer vector containing the constructed values.
959
961
  #define _mm_insert_epi32(X, I, N) \
960
- (__m128i)__builtin_ia32_vec_set_v4si((__v4si)(__m128i)(X), \
961
- (int)(I), (int)(N))
962
+ ((__m128i)__builtin_ia32_vec_set_v4si((__v4si)(__m128i)(X), \
963
+ (int)(I), (int)(N)))
962
964
 
963
965
  #ifdef __x86_64__
964
966
  /// Constructs a 128-bit vector of [2 x i64] by first making a copy of
@@ -988,8 +990,8 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
988
990
  /// 1: Bits [127:64] of the result are used for insertion. \n
989
991
  /// \returns A 128-bit integer vector containing the constructed values.
990
992
  #define _mm_insert_epi64(X, I, N) \
991
- (__m128i)__builtin_ia32_vec_set_v2di((__v2di)(__m128i)(X), \
992
- (long long)(I), (int)(N))
993
+ ((__m128i)__builtin_ia32_vec_set_v2di((__v2di)(__m128i)(X), \
994
+ (long long)(I), (int)(N)))
993
995
  #endif /* __x86_64__ */
994
996
 
995
997
  /* Extract int from packed integer array at index. This returns the element
@@ -1031,8 +1033,8 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
1031
1033
  /// 128-bit integer vector parameter and the remaining bits are assigned
1032
1034
  /// zeros.
1033
1035
  #define _mm_extract_epi8(X, N) \
1034
- (int)(unsigned char)__builtin_ia32_vec_ext_v16qi((__v16qi)(__m128i)(X), \
1035
- (int)(N))
1036
+ ((int)(unsigned char)__builtin_ia32_vec_ext_v16qi((__v16qi)(__m128i)(X), \
1037
+ (int)(N)))
1036
1038
 
1037
1039
  /// Extracts a 32-bit element from the 128-bit integer vector of
1038
1040
  /// [4 x i32], using the immediate value parameter \a N as a selector.
@@ -1057,7 +1059,7 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
1057
1059
  /// \returns An integer, whose lower 32 bits are selected from the 128-bit
1058
1060
  /// integer vector parameter and the remaining bits are assigned zeros.
1059
1061
  #define _mm_extract_epi32(X, N) \
1060
- (int)__builtin_ia32_vec_ext_v4si((__v4si)(__m128i)(X), (int)(N))
1062
+ ((int)__builtin_ia32_vec_ext_v4si((__v4si)(__m128i)(X), (int)(N)))
1061
1063
 
1062
1064
  #ifdef __x86_64__
1063
1065
  /// Extracts a 64-bit element from the 128-bit integer vector of
@@ -1080,7 +1082,7 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
1080
1082
  /// 1: Bits [127:64] are returned. \n
1081
1083
  /// \returns A 64-bit integer.
1082
1084
  #define _mm_extract_epi64(X, N) \
1083
- (long long)__builtin_ia32_vec_ext_v2di((__v2di)(__m128i)(X), (int)(N))
1085
+ ((long long)__builtin_ia32_vec_ext_v2di((__v2di)(__m128i)(X), (int)(N)))
1084
1086
  #endif /* __x86_64 */
1085
1087
 
1086
1088
  /* SSE4 128-bit Packed Integer Comparisons. */
@@ -1514,8 +1516,8 @@ _mm_packus_epi32(__m128i __V1, __m128i __V2)
1514
1516
  /// \returns A 128-bit integer vector containing the sums of the sets of
1515
1517
  /// absolute differences between both operands.
1516
1518
  #define _mm_mpsadbw_epu8(X, Y, M) \
1517
- (__m128i) __builtin_ia32_mpsadbw128((__v16qi)(__m128i)(X), \
1518
- (__v16qi)(__m128i)(Y), (M))
1519
+ ((__m128i) __builtin_ia32_mpsadbw128((__v16qi)(__m128i)(X), \
1520
+ (__v16qi)(__m128i)(Y), (M)))
1519
1521
 
1520
1522
  /// Finds the minimum unsigned 16-bit element in the input 128-bit
1521
1523
  /// vector of [8 x u16] and returns it and along with its index.
@@ -1624,8 +1626,8 @@ _mm_minpos_epu16(__m128i __V)
1624
1626
  /// \returns Returns a 128-bit integer vector representing the result mask of
1625
1627
  /// the comparison.
1626
1628
  #define _mm_cmpistrm(A, B, M) \
1627
- (__m128i)__builtin_ia32_pcmpistrm128((__v16qi)(__m128i)(A), \
1628
- (__v16qi)(__m128i)(B), (int)(M))
1629
+ ((__m128i)__builtin_ia32_pcmpistrm128((__v16qi)(__m128i)(A), \
1630
+ (__v16qi)(__m128i)(B), (int)(M)))
1629
1631
 
1630
1632
  /// Uses the immediate operand \a M to perform a comparison of string
1631
1633
  /// data with implicitly defined lengths that is contained in source operands
@@ -1678,8 +1680,8 @@ _mm_minpos_epu16(__m128i __V)
1678
1680
  /// 1: The index of the most significant set bit. \n
1679
1681
  /// \returns Returns an integer representing the result index of the comparison.
1680
1682
  #define _mm_cmpistri(A, B, M) \
1681
- (int)__builtin_ia32_pcmpistri128((__v16qi)(__m128i)(A), \
1682
- (__v16qi)(__m128i)(B), (int)(M))
1683
+ ((int)__builtin_ia32_pcmpistri128((__v16qi)(__m128i)(A), \
1684
+ (__v16qi)(__m128i)(B), (int)(M)))
1683
1685
 
1684
1686
  /// Uses the immediate operand \a M to perform a comparison of string
1685
1687
  /// data with explicitly defined lengths that is contained in source operands
@@ -1738,9 +1740,9 @@ _mm_minpos_epu16(__m128i __V)
1738
1740
  /// \returns Returns a 128-bit integer vector representing the result mask of
1739
1741
  /// the comparison.
1740
1742
  #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))
1743
+ ((__m128i)__builtin_ia32_pcmpestrm128((__v16qi)(__m128i)(A), (int)(LA), \
1744
+ (__v16qi)(__m128i)(B), (int)(LB), \
1745
+ (int)(M)))
1744
1746
 
1745
1747
  /// Uses the immediate operand \a M to perform a comparison of string
1746
1748
  /// data with explicitly defined lengths that is contained in source operands
@@ -1797,9 +1799,9 @@ _mm_minpos_epu16(__m128i __V)
1797
1799
  /// 1: The index of the most significant set bit. \n
1798
1800
  /// \returns Returns an integer representing the result index of the comparison.
1799
1801
  #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))
1802
+ ((int)__builtin_ia32_pcmpestri128((__v16qi)(__m128i)(A), (int)(LA), \
1803
+ (__v16qi)(__m128i)(B), (int)(LB), \
1804
+ (int)(M)))
1803
1805
 
1804
1806
  /* SSE4.2 Packed Comparison Intrinsics and EFlag Reading. */
1805
1807
  /// Uses the immediate operand \a M to perform a comparison of string
@@ -1849,8 +1851,8 @@ _mm_minpos_epu16(__m128i __V)
1849
1851
  /// \returns Returns 1 if the bit mask is zero and the length of the string in
1850
1852
  /// \a B is the maximum; otherwise, returns 0.
1851
1853
  #define _mm_cmpistra(A, B, M) \
1852
- (int)__builtin_ia32_pcmpistria128((__v16qi)(__m128i)(A), \
1853
- (__v16qi)(__m128i)(B), (int)(M))
1854
+ ((int)__builtin_ia32_pcmpistria128((__v16qi)(__m128i)(A), \
1855
+ (__v16qi)(__m128i)(B), (int)(M)))
1854
1856
 
1855
1857
  /// Uses the immediate operand \a M to perform a comparison of string
1856
1858
  /// data with implicitly defined lengths that is contained in source operands
@@ -1898,8 +1900,8 @@ _mm_minpos_epu16(__m128i __V)
1898
1900
  /// to the size of \a A or \a B.
1899
1901
  /// \returns Returns 1 if the bit mask is non-zero, otherwise, returns 0.
1900
1902
  #define _mm_cmpistrc(A, B, M) \
1901
- (int)__builtin_ia32_pcmpistric128((__v16qi)(__m128i)(A), \
1902
- (__v16qi)(__m128i)(B), (int)(M))
1903
+ ((int)__builtin_ia32_pcmpistric128((__v16qi)(__m128i)(A), \
1904
+ (__v16qi)(__m128i)(B), (int)(M)))
1903
1905
 
1904
1906
  /// Uses the immediate operand \a M to perform a comparison of string
1905
1907
  /// data with implicitly defined lengths that is contained in source operands
@@ -1946,8 +1948,8 @@ _mm_minpos_epu16(__m128i __V)
1946
1948
  /// to the size of \a A or \a B. \n
1947
1949
  /// \returns Returns bit 0 of the resulting bit mask.
1948
1950
  #define _mm_cmpistro(A, B, M) \
1949
- (int)__builtin_ia32_pcmpistrio128((__v16qi)(__m128i)(A), \
1950
- (__v16qi)(__m128i)(B), (int)(M))
1951
+ ((int)__builtin_ia32_pcmpistrio128((__v16qi)(__m128i)(A), \
1952
+ (__v16qi)(__m128i)(B), (int)(M)))
1951
1953
 
1952
1954
  /// Uses the immediate operand \a M to perform a comparison of string
1953
1955
  /// data with implicitly defined lengths that is contained in source operands
@@ -1996,8 +1998,8 @@ _mm_minpos_epu16(__m128i __V)
1996
1998
  /// \returns Returns 1 if the length of the string in \a A is less than the
1997
1999
  /// maximum, otherwise, returns 0.
1998
2000
  #define _mm_cmpistrs(A, B, M) \
1999
- (int)__builtin_ia32_pcmpistris128((__v16qi)(__m128i)(A), \
2000
- (__v16qi)(__m128i)(B), (int)(M))
2001
+ ((int)__builtin_ia32_pcmpistris128((__v16qi)(__m128i)(A), \
2002
+ (__v16qi)(__m128i)(B), (int)(M)))
2001
2003
 
2002
2004
  /// Uses the immediate operand \a M to perform a comparison of string
2003
2005
  /// data with implicitly defined lengths that is contained in source operands
@@ -2046,8 +2048,8 @@ _mm_minpos_epu16(__m128i __V)
2046
2048
  /// \returns Returns 1 if the length of the string in \a B is less than the
2047
2049
  /// maximum, otherwise, returns 0.
2048
2050
  #define _mm_cmpistrz(A, B, M) \
2049
- (int)__builtin_ia32_pcmpistriz128((__v16qi)(__m128i)(A), \
2050
- (__v16qi)(__m128i)(B), (int)(M))
2051
+ ((int)__builtin_ia32_pcmpistriz128((__v16qi)(__m128i)(A), \
2052
+ (__v16qi)(__m128i)(B), (int)(M)))
2051
2053
 
2052
2054
  /// Uses the immediate operand \a M to perform a comparison of string
2053
2055
  /// data with explicitly defined lengths that is contained in source operands
@@ -2100,9 +2102,9 @@ _mm_minpos_epu16(__m128i __V)
2100
2102
  /// \returns Returns 1 if the bit mask is zero and the length of the string in
2101
2103
  /// \a B is the maximum, otherwise, returns 0.
2102
2104
  #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))
2105
+ ((int)__builtin_ia32_pcmpestria128((__v16qi)(__m128i)(A), (int)(LA), \
2106
+ (__v16qi)(__m128i)(B), (int)(LB), \
2107
+ (int)(M)))
2106
2108
 
2107
2109
  /// Uses the immediate operand \a M to perform a comparison of string
2108
2110
  /// data with explicitly defined lengths that is contained in source operands
@@ -2154,9 +2156,9 @@ _mm_minpos_epu16(__m128i __V)
2154
2156
  /// to the size of \a A or \a B. \n
2155
2157
  /// \returns Returns 1 if the resulting mask is non-zero, otherwise, returns 0.
2156
2158
  #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))
2159
+ ((int)__builtin_ia32_pcmpestric128((__v16qi)(__m128i)(A), (int)(LA), \
2160
+ (__v16qi)(__m128i)(B), (int)(LB), \
2161
+ (int)(M)))
2160
2162
 
2161
2163
  /// Uses the immediate operand \a M to perform a comparison of string
2162
2164
  /// data with explicitly defined lengths that is contained in source operands
@@ -2207,9 +2209,9 @@ _mm_minpos_epu16(__m128i __V)
2207
2209
  /// to the size of \a A or \a B.
2208
2210
  /// \returns Returns bit 0 of the resulting bit mask.
2209
2211
  #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))
2212
+ ((int)__builtin_ia32_pcmpestrio128((__v16qi)(__m128i)(A), (int)(LA), \
2213
+ (__v16qi)(__m128i)(B), (int)(LB), \
2214
+ (int)(M)))
2213
2215
 
2214
2216
  /// Uses the immediate operand \a M to perform a comparison of string
2215
2217
  /// data with explicitly defined lengths that is contained in source operands
@@ -2262,9 +2264,9 @@ _mm_minpos_epu16(__m128i __V)
2262
2264
  /// \returns Returns 1 if the length of the string in \a A is less than the
2263
2265
  /// maximum, otherwise, returns 0.
2264
2266
  #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))
2267
+ ((int)__builtin_ia32_pcmpestris128((__v16qi)(__m128i)(A), (int)(LA), \
2268
+ (__v16qi)(__m128i)(B), (int)(LB), \
2269
+ (int)(M)))
2268
2270
 
2269
2271
  /// Uses the immediate operand \a M to perform a comparison of string
2270
2272
  /// data with explicitly defined lengths that is contained in source operands
@@ -2316,9 +2318,9 @@ _mm_minpos_epu16(__m128i __V)
2316
2318
  /// \returns Returns 1 if the length of the string in \a B is less than the
2317
2319
  /// maximum, otherwise, returns 0.
2318
2320
  #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))
2321
+ ((int)__builtin_ia32_pcmpestriz128((__v16qi)(__m128i)(A), (int)(LA), \
2322
+ (__v16qi)(__m128i)(B), (int)(LB), \
2323
+ (int)(M)))
2322
2324
 
2323
2325
  /* SSE4.2 Compare Packed Data -- Greater Than. */
2324
2326
  /// Compares each of the corresponding 64-bit values of the 128-bit
@@ -2340,91 +2342,10 @@ _mm_cmpgt_epi64(__m128i __V1, __m128i __V2)
2340
2342
  return (__m128i)((__v2di)__V1 > (__v2di)__V2);
2341
2343
  }
2342
2344
 
2343
- /* SSE4.2 Accumulate CRC32. */
2344
- /// Adds the unsigned integer operand to the CRC-32C checksum of the
2345
- /// unsigned char operand.
2346
- ///
2347
- /// \headerfile <x86intrin.h>
2348
- ///
2349
- /// This intrinsic corresponds to the <c> CRC32B </c> instruction.
2350
- ///
2351
- /// \param __C
2352
- /// An unsigned integer operand to add to the CRC-32C checksum of operand
2353
- /// \a __D.
2354
- /// \param __D
2355
- /// An unsigned 8-bit integer operand used to compute the CRC-32C checksum.
2356
- /// \returns The result of adding operand \a __C to the CRC-32C checksum of
2357
- /// operand \a __D.
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
-
2364
- /// Adds the unsigned integer operand to the CRC-32C checksum of the
2365
- /// unsigned short operand.
2366
- ///
2367
- /// \headerfile <x86intrin.h>
2368
- ///
2369
- /// This intrinsic corresponds to the <c> CRC32W </c> instruction.
2370
- ///
2371
- /// \param __C
2372
- /// An unsigned integer operand to add to the CRC-32C checksum of operand
2373
- /// \a __D.
2374
- /// \param __D
2375
- /// An unsigned 16-bit integer operand used to compute the CRC-32C checksum.
2376
- /// \returns The result of adding operand \a __C to the CRC-32C checksum of
2377
- /// operand \a __D.
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
-
2384
- /// Adds the first unsigned integer operand to the CRC-32C checksum of
2385
- /// the second unsigned integer operand.
2386
- ///
2387
- /// \headerfile <x86intrin.h>
2388
- ///
2389
- /// This intrinsic corresponds to the <c> CRC32L </c> instruction.
2390
- ///
2391
- /// \param __C
2392
- /// An unsigned integer operand to add to the CRC-32C checksum of operand
2393
- /// \a __D.
2394
- /// \param __D
2395
- /// An unsigned 32-bit integer operand used to compute the CRC-32C checksum.
2396
- /// \returns The result of adding operand \a __C to the CRC-32C checksum of
2397
- /// operand \a __D.
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__
2405
- /// Adds the unsigned integer operand to the CRC-32C checksum of the
2406
- /// unsigned 64-bit integer operand.
2407
- ///
2408
- /// \headerfile <x86intrin.h>
2409
- ///
2410
- /// This intrinsic corresponds to the <c> CRC32Q </c> instruction.
2411
- ///
2412
- /// \param __C
2413
- /// An unsigned integer operand to add to the CRC-32C checksum of operand
2414
- /// \a __D.
2415
- /// \param __D
2416
- /// An unsigned 64-bit integer operand used to compute the CRC-32C checksum.
2417
- /// \returns The result of adding operand \a __C to the CRC-32C checksum of
2418
- /// operand \a __D.
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
2345
  #undef __DEFAULT_FN_ATTRS
2427
2346
 
2428
2347
  #include <popcntintrin.h>
2429
2348
 
2349
+ #include <crc32intrin.h>
2350
+
2430
2351
  #endif /* __SMMINTRIN_H */
@@ -12,8 +12,12 @@
12
12
 
13
13
  /* If we're hosted, fall back to the system's stdatomic.h. FreeBSD, for
14
14
  * example, already has a Clang-compatible stdatomic.h header.
15
+ *
16
+ * Exclude the MSVC path as well as the MSVC header as of the 14.31.30818
17
+ * explicitly disallows `stdatomic.h` in the C mode via an `#error`. Fallback
18
+ * to the clang resource header until that is fully supported.
15
19
  */
16
- #if __STDC_HOSTED__ && __has_include_next(<stdatomic.h>)
20
+ #if __STDC_HOSTED__ && __has_include_next(<stdatomic.h>) && !defined(_MSC_VER)
17
21
  # include_next <stdatomic.h>
18
22
  #else
19
23
 
@@ -40,6 +44,11 @@ extern "C" {
40
44
  /* 7.17.2 Initialization */
41
45
 
42
46
  #define ATOMIC_VAR_INIT(value) (value)
47
+ #if (__STDC_VERSION__ >= 201710L || __cplusplus >= 202002L) && \
48
+ !defined(_CLANG_DISABLE_CRT_DEPRECATION_WARNINGS)
49
+ /* ATOMIC_VAR_INIT was deprecated in C17 and C++20. */
50
+ #pragma clang deprecated(ATOMIC_VAR_INIT)
51
+ #endif
43
52
  #define atomic_init __c11_atomic_init
44
53
 
45
54
  /* 7.17.3 Order and consistency */
@@ -149,6 +158,10 @@ typedef _Atomic(uintmax_t) atomic_uintmax_t;
149
158
  typedef struct atomic_flag { atomic_bool _Value; } atomic_flag;
150
159
 
151
160
  #define ATOMIC_FLAG_INIT { 0 }
161
+ #if __cplusplus >= 202002L && !defined(_CLANG_DISABLE_CRT_DEPRECATION_WARNINGS)
162
+ /* ATOMIC_FLAG_INIT was deprecated in C++20 but is not deprecated in C. */
163
+ #pragma clang deprecated(ATOMIC_FLAG_INIT)
164
+ #endif
152
165
 
153
166
  /* These should be provided by the libc implementation. */
154
167
  #ifdef __cplusplus