@cpp-linter/clang-tidy-linux-arm64 18.1.5 → 20.1.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 (282) hide show
  1. package/README.md +2 -2
  2. package/bin/clang-tidy +2 -2
  3. package/lib/clang/{18 → 20}/include/__clang_cuda_device_functions.h +14 -0
  4. package/lib/clang/{18 → 20}/include/__clang_cuda_intrinsics.h +1 -3
  5. package/lib/clang/{18 → 20}/include/__clang_cuda_math.h +5 -0
  6. package/lib/clang/{18 → 20}/include/__clang_hip_cmath.h +6 -1
  7. package/lib/clang/{18 → 20}/include/__clang_hip_math.h +5 -0
  8. package/lib/clang/20/include/__stdarg_header_macro.h +12 -0
  9. package/lib/clang/20/include/__stddef_header_macro.h +12 -0
  10. package/lib/clang/{18 → 20}/include/adcintrin.h +5 -0
  11. package/lib/clang/{18 → 20}/include/adxintrin.h +5 -0
  12. package/lib/clang/{18 → 20}/include/altivec.h +8 -8
  13. package/lib/clang/20/include/amdgpuintrin.h +194 -0
  14. package/lib/clang/20/include/amxavx512intrin.h +382 -0
  15. package/lib/clang/20/include/amxbf16transposeintrin.h +94 -0
  16. package/lib/clang/20/include/amxcomplextransposeintrin.h +303 -0
  17. package/lib/clang/{18 → 20}/include/amxfp16intrin.h +35 -0
  18. package/lib/clang/20/include/amxfp16transposeintrin.h +94 -0
  19. package/lib/clang/20/include/amxfp8intrin.h +230 -0
  20. package/lib/clang/{18 → 20}/include/amxintrin.h +5 -35
  21. package/lib/clang/20/include/amxmovrsintrin.h +48 -0
  22. package/lib/clang/20/include/amxmovrstransposeintrin.h +200 -0
  23. package/lib/clang/20/include/amxtf32intrin.h +108 -0
  24. package/lib/clang/20/include/amxtf32transposeintrin.h +105 -0
  25. package/lib/clang/20/include/amxtransposeintrin.h +248 -0
  26. package/lib/clang/{18 → 20}/include/arm_acle.h +49 -26
  27. package/lib/clang/{18 → 20}/include/arm_fp16.h +1 -1
  28. package/lib/clang/{18 → 20}/include/arm_neon.h +45631 -43745
  29. package/lib/clang/{18 → 20}/include/arm_sme.h +641 -6
  30. package/lib/clang/{18 → 20}/include/arm_sve.h +28311 -27738
  31. package/lib/clang/{18 → 20}/include/arm_vector_types.h +92 -5
  32. package/lib/clang/20/include/avx10_2_512bf16intrin.h +561 -0
  33. package/lib/clang/20/include/avx10_2_512convertintrin.h +320 -0
  34. package/lib/clang/20/include/avx10_2_512minmaxintrin.h +127 -0
  35. package/lib/clang/20/include/avx10_2_512niintrin.h +314 -0
  36. package/lib/clang/20/include/avx10_2_512satcvtdsintrin.h +303 -0
  37. package/lib/clang/20/include/avx10_2_512satcvtintrin.h +301 -0
  38. package/lib/clang/20/include/avx10_2bf16intrin.h +1085 -0
  39. package/lib/clang/20/include/avx10_2convertintrin.h +589 -0
  40. package/lib/clang/20/include/avx10_2copyintrin.h +66 -0
  41. package/lib/clang/20/include/avx10_2minmaxintrin.h +277 -0
  42. package/lib/clang/20/include/avx10_2niintrin.h +2075 -0
  43. package/lib/clang/20/include/avx10_2satcvtdsintrin.h +496 -0
  44. package/lib/clang/20/include/avx10_2satcvtintrin.h +444 -0
  45. package/lib/clang/{18 → 20}/include/avx2intrin.h +9 -0
  46. package/lib/clang/{18 → 20}/include/avx512bitalgintrin.h +2 -2
  47. package/lib/clang/{18 → 20}/include/avx512fintrin.h +22 -14
  48. package/lib/clang/{18 → 20}/include/avx512fp16intrin.h +38 -38
  49. package/lib/clang/{18 → 20}/include/avx512vlbitalgintrin.h +4 -4
  50. package/lib/clang/{18 → 20}/include/avx512vpopcntdqintrin.h +12 -4
  51. package/lib/clang/{18 → 20}/include/avx512vpopcntdqvlintrin.h +16 -8
  52. package/lib/clang/{18 → 20}/include/avxintrin.h +88 -60
  53. package/lib/clang/{18 → 20}/include/avxvnniint16intrin.h +36 -77
  54. package/lib/clang/{18 → 20}/include/avxvnniint8intrin.h +36 -77
  55. package/lib/clang/{18 → 20}/include/bmi2intrin.h +15 -17
  56. package/lib/clang/{18 → 20}/include/bmiintrin.h +33 -41
  57. package/lib/clang/{18 → 20}/include/builtins.h +3 -0
  58. package/lib/clang/{18 → 20}/include/cmpccxaddintrin.h +1 -1
  59. package/lib/clang/{18 → 20}/include/cpuid.h +35 -14
  60. package/lib/clang/{18 → 20}/include/cuda_wrappers/algorithm +1 -1
  61. package/lib/clang/{18 → 20}/include/cuda_wrappers/cmath +4 -0
  62. package/lib/clang/{18 → 20}/include/cuda_wrappers/new +2 -0
  63. package/lib/clang/{18 → 20}/include/emmintrin.h +442 -277
  64. package/lib/clang/{18 → 20}/include/float.h +28 -0
  65. package/lib/clang/{18 → 20}/include/fmaintrin.h +32 -16
  66. package/lib/clang/{18 → 20}/include/gfniintrin.h +32 -10
  67. package/lib/clang/20/include/gpuintrin.h +224 -0
  68. package/lib/clang/{18 → 20}/include/hexagon_types.h +8 -4
  69. package/lib/clang/{18 → 20}/include/hlsl/hlsl_basic_types.h +57 -4
  70. package/lib/clang/20/include/hlsl/hlsl_detail.h +84 -0
  71. package/lib/clang/20/include/hlsl/hlsl_intrinsics.h +2814 -0
  72. package/lib/clang/{18 → 20}/include/hlsl.h +11 -0
  73. package/lib/clang/{18 → 20}/include/hvx_hexagon_protos.h +427 -0
  74. package/lib/clang/{18 → 20}/include/ia32intrin.h +36 -36
  75. package/lib/clang/{18 → 20}/include/immintrin.h +171 -161
  76. package/lib/clang/{18 → 20}/include/intrin.h +62 -228
  77. package/lib/clang/20/include/intrin0.h +256 -0
  78. package/lib/clang/{18 → 20}/include/inttypes.h +4 -0
  79. package/lib/clang/{18 → 20}/include/iso646.h +4 -0
  80. package/lib/clang/{18 → 20}/include/keylockerintrin.h +5 -8
  81. package/lib/clang/{18 → 20}/include/larchintrin.h +22 -8
  82. package/lib/clang/{18 → 20}/include/lasxintrin.h +27 -25
  83. package/lib/clang/{18 → 20}/include/limits.h +12 -4
  84. package/lib/clang/{18 → 20}/include/llvm_libc_wrappers/assert.h +1 -1
  85. package/lib/clang/{18 → 20}/include/llvm_libc_wrappers/ctype.h +38 -0
  86. package/lib/clang/{18 → 20}/include/llvm_libc_wrappers/stdlib.h +8 -0
  87. package/lib/clang/20/include/llvm_offload_wrappers/__llvm_offload.h +31 -0
  88. package/lib/clang/20/include/llvm_offload_wrappers/__llvm_offload_device.h +10 -0
  89. package/lib/clang/20/include/llvm_offload_wrappers/__llvm_offload_host.h +15 -0
  90. package/lib/clang/{18 → 20}/include/lsxintrin.h +27 -25
  91. package/lib/clang/{18 → 20}/include/lzcntintrin.h +10 -7
  92. package/lib/clang/20/include/mm3dnow.h +22 -0
  93. package/lib/clang/{18 → 20}/include/mmintrin.h +285 -239
  94. package/lib/clang/{18 → 20}/include/module.modulemap +16 -5
  95. package/lib/clang/20/include/movrs_avx10_2_512intrin.h +98 -0
  96. package/lib/clang/20/include/movrs_avx10_2intrin.h +174 -0
  97. package/lib/clang/20/include/movrsintrin.h +59 -0
  98. package/lib/clang/20/include/nvptxintrin.h +202 -0
  99. package/lib/clang/{18 → 20}/include/opencl-c-base.h +8 -0
  100. package/lib/clang/{18 → 20}/include/opencl-c.h +15 -0
  101. package/lib/clang/{18 → 20}/include/openmp_wrappers/__clang_openmp_device_functions.h +4 -5
  102. package/lib/clang/{18 → 20}/include/openmp_wrappers/complex_cmath.h +7 -2
  103. package/lib/clang/{18 → 20}/include/pmmintrin.h +16 -3
  104. package/lib/clang/{18 → 20}/include/popcntintrin.h +7 -7
  105. package/lib/clang/{18 → 20}/include/prfchwintrin.h +10 -8
  106. package/lib/clang/20/include/ptrauth.h +336 -0
  107. package/lib/clang/20/include/riscv_corev_alu.h +128 -0
  108. package/lib/clang/{18 → 20}/include/riscv_vector.h +0 -5
  109. package/lib/clang/20/include/sifive_vector.h +118 -0
  110. package/lib/clang/20/include/sm4evexintrin.h +32 -0
  111. package/lib/clang/{18 → 20}/include/smmintrin.h +18 -12
  112. package/lib/clang/{18 → 20}/include/stdarg.h +15 -19
  113. package/lib/clang/{18 → 20}/include/stdatomic.h +11 -1
  114. package/lib/clang/{18 → 20}/include/stdbool.h +5 -0
  115. package/lib/clang/{18 → 20}/include/stddef.h +38 -22
  116. package/lib/clang/{18 → 20}/include/stdint.h +5 -0
  117. package/lib/clang/{18 → 20}/include/stdnoreturn.h +6 -0
  118. package/lib/clang/{18 → 20}/include/tbmintrin.h +25 -37
  119. package/lib/clang/{18 → 20}/include/tmmintrin.h +84 -54
  120. package/lib/clang/{18 → 20}/include/varargs.h +5 -1
  121. package/lib/clang/{18 → 20}/include/vecintrin.h +1778 -60
  122. package/lib/clang/{18 → 20}/include/wasm_simd128.h +167 -21
  123. package/lib/clang/{18 → 20}/include/x86gprintrin.h +7 -14
  124. package/lib/clang/20/include/x86intrin.h +53 -0
  125. package/lib/clang/{18 → 20}/include/xmmintrin.h +455 -276
  126. package/lib/clang/20/include/yvals_core.h +25 -0
  127. package/lib/clang/20/include/zos_wrappers/builtins.h +18 -0
  128. package/package.json +6 -6
  129. package/lib/clang/18/include/avx512erintrin.h +0 -271
  130. package/lib/clang/18/include/avx512pfintrin.h +0 -92
  131. package/lib/clang/18/include/hlsl/hlsl_intrinsics.h +0 -624
  132. package/lib/clang/18/include/mm3dnow.h +0 -157
  133. package/lib/clang/18/include/sifive_vector.h +0 -16
  134. package/lib/clang/18/include/x86intrin.h +0 -67
  135. /package/lib/clang/{18 → 20}/include/__clang_cuda_builtin_vars.h +0 -0
  136. /package/lib/clang/{18 → 20}/include/__clang_cuda_cmath.h +0 -0
  137. /package/lib/clang/{18 → 20}/include/__clang_cuda_complex_builtins.h +0 -0
  138. /package/lib/clang/{18 → 20}/include/__clang_cuda_libdevice_declares.h +0 -0
  139. /package/lib/clang/{18 → 20}/include/__clang_cuda_math_forward_declares.h +0 -0
  140. /package/lib/clang/{18 → 20}/include/__clang_cuda_runtime_wrapper.h +0 -0
  141. /package/lib/clang/{18 → 20}/include/__clang_cuda_texture_intrinsics.h +0 -0
  142. /package/lib/clang/{18 → 20}/include/__clang_hip_libdevice_declares.h +0 -0
  143. /package/lib/clang/{18 → 20}/include/__clang_hip_runtime_wrapper.h +0 -0
  144. /package/lib/clang/{18 → 20}/include/__clang_hip_stdlib.h +0 -0
  145. /package/lib/clang/{18 → 20}/include/__stdarg___gnuc_va_list.h +0 -0
  146. /package/lib/clang/{18 → 20}/include/__stdarg___va_copy.h +0 -0
  147. /package/lib/clang/{18 → 20}/include/__stdarg_va_arg.h +0 -0
  148. /package/lib/clang/{18 → 20}/include/__stdarg_va_copy.h +0 -0
  149. /package/lib/clang/{18 → 20}/include/__stdarg_va_list.h +0 -0
  150. /package/lib/clang/{18 → 20}/include/__stddef_max_align_t.h +0 -0
  151. /package/lib/clang/{18 → 20}/include/__stddef_null.h +0 -0
  152. /package/lib/clang/{18 → 20}/include/__stddef_nullptr_t.h +0 -0
  153. /package/lib/clang/{18 → 20}/include/__stddef_offsetof.h +0 -0
  154. /package/lib/clang/{18 → 20}/include/__stddef_ptrdiff_t.h +0 -0
  155. /package/lib/clang/{18 → 20}/include/__stddef_rsize_t.h +0 -0
  156. /package/lib/clang/{18 → 20}/include/__stddef_size_t.h +0 -0
  157. /package/lib/clang/{18 → 20}/include/__stddef_unreachable.h +0 -0
  158. /package/lib/clang/{18 → 20}/include/__stddef_wchar_t.h +0 -0
  159. /package/lib/clang/{18 → 20}/include/__stddef_wint_t.h +0 -0
  160. /package/lib/clang/{18 → 20}/include/__wmmintrin_aes.h +0 -0
  161. /package/lib/clang/{18 → 20}/include/__wmmintrin_pclmul.h +0 -0
  162. /package/lib/clang/{18 → 20}/include/ammintrin.h +0 -0
  163. /package/lib/clang/{18 → 20}/include/amxcomplexintrin.h +0 -0
  164. /package/lib/clang/{18 → 20}/include/arm64intr.h +0 -0
  165. /package/lib/clang/{18 → 20}/include/arm_bf16.h +0 -0
  166. /package/lib/clang/{18 → 20}/include/arm_cde.h +0 -0
  167. /package/lib/clang/{18 → 20}/include/arm_cmse.h +0 -0
  168. /package/lib/clang/{18 → 20}/include/arm_mve.h +0 -0
  169. /package/lib/clang/{18 → 20}/include/arm_neon_sve_bridge.h +0 -0
  170. /package/lib/clang/{18 → 20}/include/armintr.h +0 -0
  171. /package/lib/clang/{18 → 20}/include/avx512bf16intrin.h +0 -0
  172. /package/lib/clang/{18 → 20}/include/avx512bwintrin.h +0 -0
  173. /package/lib/clang/{18 → 20}/include/avx512cdintrin.h +0 -0
  174. /package/lib/clang/{18 → 20}/include/avx512dqintrin.h +0 -0
  175. /package/lib/clang/{18 → 20}/include/avx512ifmaintrin.h +0 -0
  176. /package/lib/clang/{18 → 20}/include/avx512ifmavlintrin.h +0 -0
  177. /package/lib/clang/{18 → 20}/include/avx512vbmi2intrin.h +0 -0
  178. /package/lib/clang/{18 → 20}/include/avx512vbmiintrin.h +0 -0
  179. /package/lib/clang/{18 → 20}/include/avx512vbmivlintrin.h +0 -0
  180. /package/lib/clang/{18 → 20}/include/avx512vlbf16intrin.h +0 -0
  181. /package/lib/clang/{18 → 20}/include/avx512vlbwintrin.h +0 -0
  182. /package/lib/clang/{18 → 20}/include/avx512vlcdintrin.h +0 -0
  183. /package/lib/clang/{18 → 20}/include/avx512vldqintrin.h +0 -0
  184. /package/lib/clang/{18 → 20}/include/avx512vlfp16intrin.h +0 -0
  185. /package/lib/clang/{18 → 20}/include/avx512vlintrin.h +0 -0
  186. /package/lib/clang/{18 → 20}/include/avx512vlvbmi2intrin.h +0 -0
  187. /package/lib/clang/{18 → 20}/include/avx512vlvnniintrin.h +0 -0
  188. /package/lib/clang/{18 → 20}/include/avx512vlvp2intersectintrin.h +0 -0
  189. /package/lib/clang/{18 → 20}/include/avx512vnniintrin.h +0 -0
  190. /package/lib/clang/{18 → 20}/include/avx512vp2intersectintrin.h +0 -0
  191. /package/lib/clang/{18 → 20}/include/avxifmaintrin.h +0 -0
  192. /package/lib/clang/{18 → 20}/include/avxneconvertintrin.h +0 -0
  193. /package/lib/clang/{18 → 20}/include/avxvnniintrin.h +0 -0
  194. /package/lib/clang/{18 → 20}/include/cet.h +0 -0
  195. /package/lib/clang/{18 → 20}/include/cetintrin.h +0 -0
  196. /package/lib/clang/{18 → 20}/include/cldemoteintrin.h +0 -0
  197. /package/lib/clang/{18 → 20}/include/clflushoptintrin.h +0 -0
  198. /package/lib/clang/{18 → 20}/include/clwbintrin.h +0 -0
  199. /package/lib/clang/{18 → 20}/include/clzerointrin.h +0 -0
  200. /package/lib/clang/{18 → 20}/include/crc32intrin.h +0 -0
  201. /package/lib/clang/{18 → 20}/include/cuda_wrappers/bits/basic_string.h +0 -0
  202. /package/lib/clang/{18 → 20}/include/cuda_wrappers/bits/basic_string.tcc +0 -0
  203. /package/lib/clang/{18 → 20}/include/cuda_wrappers/bits/shared_ptr_base.h +0 -0
  204. /package/lib/clang/{18 → 20}/include/cuda_wrappers/complex +0 -0
  205. /package/lib/clang/{18 → 20}/include/enqcmdintrin.h +0 -0
  206. /package/lib/clang/{18 → 20}/include/f16cintrin.h +0 -0
  207. /package/lib/clang/{18 → 20}/include/fma4intrin.h +0 -0
  208. /package/lib/clang/{18 → 20}/include/fxsrintrin.h +0 -0
  209. /package/lib/clang/{18 → 20}/include/hexagon_circ_brev_intrinsics.h +0 -0
  210. /package/lib/clang/{18 → 20}/include/hexagon_protos.h +0 -0
  211. /package/lib/clang/{18 → 20}/include/hresetintrin.h +0 -0
  212. /package/lib/clang/{18 → 20}/include/htmintrin.h +0 -0
  213. /package/lib/clang/{18 → 20}/include/htmxlintrin.h +0 -0
  214. /package/lib/clang/{18 → 20}/include/invpcidintrin.h +0 -0
  215. /package/lib/clang/{18 → 20}/include/llvm_libc_wrappers/inttypes.h +0 -0
  216. /package/lib/clang/{18 → 20}/include/llvm_libc_wrappers/stdio.h +0 -0
  217. /package/lib/clang/{18 → 20}/include/llvm_libc_wrappers/string.h +0 -0
  218. /package/lib/clang/{18 → 20}/include/llvm_libc_wrappers/time.h +0 -0
  219. /package/lib/clang/{18 → 20}/include/lwpintrin.h +0 -0
  220. /package/lib/clang/{18 → 20}/include/mm_malloc.h +0 -0
  221. /package/lib/clang/{18 → 20}/include/movdirintrin.h +0 -0
  222. /package/lib/clang/{18 → 20}/include/msa.h +0 -0
  223. /package/lib/clang/{18 → 20}/include/mwaitxintrin.h +0 -0
  224. /package/lib/clang/{18 → 20}/include/nmmintrin.h +0 -0
  225. /package/lib/clang/{18 → 20}/include/openmp_wrappers/cmath +0 -0
  226. /package/lib/clang/{18 → 20}/include/openmp_wrappers/complex +0 -0
  227. /package/lib/clang/{18 → 20}/include/openmp_wrappers/complex.h +0 -0
  228. /package/lib/clang/{18 → 20}/include/openmp_wrappers/math.h +0 -0
  229. /package/lib/clang/{18 → 20}/include/openmp_wrappers/new +0 -0
  230. /package/lib/clang/{18 → 20}/include/pconfigintrin.h +0 -0
  231. /package/lib/clang/{18 → 20}/include/pkuintrin.h +0 -0
  232. /package/lib/clang/{18 → 20}/include/ppc_wrappers/bmi2intrin.h +0 -0
  233. /package/lib/clang/{18 → 20}/include/ppc_wrappers/bmiintrin.h +0 -0
  234. /package/lib/clang/{18 → 20}/include/ppc_wrappers/emmintrin.h +0 -0
  235. /package/lib/clang/{18 → 20}/include/ppc_wrappers/immintrin.h +0 -0
  236. /package/lib/clang/{18 → 20}/include/ppc_wrappers/mm_malloc.h +0 -0
  237. /package/lib/clang/{18 → 20}/include/ppc_wrappers/mmintrin.h +0 -0
  238. /package/lib/clang/{18 → 20}/include/ppc_wrappers/nmmintrin.h +0 -0
  239. /package/lib/clang/{18 → 20}/include/ppc_wrappers/pmmintrin.h +0 -0
  240. /package/lib/clang/{18 → 20}/include/ppc_wrappers/smmintrin.h +0 -0
  241. /package/lib/clang/{18 → 20}/include/ppc_wrappers/tmmintrin.h +0 -0
  242. /package/lib/clang/{18 → 20}/include/ppc_wrappers/x86gprintrin.h +0 -0
  243. /package/lib/clang/{18 → 20}/include/ppc_wrappers/x86intrin.h +0 -0
  244. /package/lib/clang/{18 → 20}/include/ppc_wrappers/xmmintrin.h +0 -0
  245. /package/lib/clang/{18 → 20}/include/prfchiintrin.h +0 -0
  246. /package/lib/clang/{18 → 20}/include/ptwriteintrin.h +0 -0
  247. /package/lib/clang/{18 → 20}/include/raointintrin.h +0 -0
  248. /package/lib/clang/{18 → 20}/include/rdpruintrin.h +0 -0
  249. /package/lib/clang/{18 → 20}/include/rdseedintrin.h +0 -0
  250. /package/lib/clang/{18 → 20}/include/riscv_bitmanip.h +0 -0
  251. /package/lib/clang/{18 → 20}/include/riscv_crypto.h +0 -0
  252. /package/lib/clang/{18 → 20}/include/riscv_ntlh.h +0 -0
  253. /package/lib/clang/{18 → 20}/include/rtmintrin.h +0 -0
  254. /package/lib/clang/{18 → 20}/include/s390intrin.h +0 -0
  255. /package/lib/clang/{18 → 20}/include/serializeintrin.h +0 -0
  256. /package/lib/clang/{18 → 20}/include/sgxintrin.h +0 -0
  257. /package/lib/clang/{18 → 20}/include/sha512intrin.h +0 -0
  258. /package/lib/clang/{18 → 20}/include/shaintrin.h +0 -0
  259. /package/lib/clang/{18 → 20}/include/sm3intrin.h +0 -0
  260. /package/lib/clang/{18 → 20}/include/sm4intrin.h +0 -0
  261. /package/lib/clang/{18 → 20}/include/stdalign.h +0 -0
  262. /package/lib/clang/{18 → 20}/include/stdckdint.h +0 -0
  263. /package/lib/clang/{18 → 20}/include/tgmath.h +0 -0
  264. /package/lib/clang/{18 → 20}/include/tsxldtrkintrin.h +0 -0
  265. /package/lib/clang/{18 → 20}/include/uintrintrin.h +0 -0
  266. /package/lib/clang/{18 → 20}/include/unwind.h +0 -0
  267. /package/lib/clang/{18 → 20}/include/usermsrintrin.h +0 -0
  268. /package/lib/clang/{18 → 20}/include/vadefs.h +0 -0
  269. /package/lib/clang/{18 → 20}/include/vaesintrin.h +0 -0
  270. /package/lib/clang/{18 → 20}/include/velintrin.h +0 -0
  271. /package/lib/clang/{18 → 20}/include/velintrin_approx.h +0 -0
  272. /package/lib/clang/{18 → 20}/include/velintrin_gen.h +0 -0
  273. /package/lib/clang/{18 → 20}/include/vpclmulqdqintrin.h +0 -0
  274. /package/lib/clang/{18 → 20}/include/waitpkgintrin.h +0 -0
  275. /package/lib/clang/{18 → 20}/include/wbnoinvdintrin.h +0 -0
  276. /package/lib/clang/{18 → 20}/include/wmmintrin.h +0 -0
  277. /package/lib/clang/{18 → 20}/include/xopintrin.h +0 -0
  278. /package/lib/clang/{18 → 20}/include/xsavecintrin.h +0 -0
  279. /package/lib/clang/{18 → 20}/include/xsaveintrin.h +0 -0
  280. /package/lib/clang/{18 → 20}/include/xsaveoptintrin.h +0 -0
  281. /package/lib/clang/{18 → 20}/include/xsavesintrin.h +0 -0
  282. /package/lib/clang/{18 → 20}/include/xtestintrin.h +0 -0
@@ -49,12 +49,27 @@ typedef __bf16 __m128bh __attribute__((__vector_size__(16), __aligned__(16)));
49
49
  #endif
50
50
 
51
51
  /* Define the default attributes for the functions in this file. */
52
+ #if defined(__EVEX512__) && !defined(__AVX10_1_512__)
52
53
  #define __DEFAULT_FN_ATTRS \
53
54
  __attribute__((__always_inline__, __nodebug__, \
54
55
  __target__("sse2,no-evex512"), __min_vector_width__(128)))
55
- #define __DEFAULT_FN_ATTRS_MMX \
56
- __attribute__((__always_inline__, __nodebug__, \
57
- __target__("mmx,sse2,no-evex512"), __min_vector_width__(64)))
56
+ #else
57
+ #define __DEFAULT_FN_ATTRS \
58
+ __attribute__((__always_inline__, __nodebug__, __target__("sse2"), \
59
+ __min_vector_width__(128)))
60
+ #endif
61
+
62
+ #if defined(__cplusplus) && (__cplusplus >= 201103L)
63
+ #define __DEFAULT_FN_ATTRS_CONSTEXPR __DEFAULT_FN_ATTRS constexpr
64
+ #else
65
+ #define __DEFAULT_FN_ATTRS_CONSTEXPR __DEFAULT_FN_ATTRS
66
+ #endif
67
+
68
+ #define __trunc64(x) \
69
+ (__m64) __builtin_shufflevector((__v2di)(x), __extension__(__v2di){}, 0)
70
+ #define __anyext128(x) \
71
+ (__m128i) __builtin_shufflevector((__v2si)(x), __extension__(__v2si){}, 0, \
72
+ 1, -1, -1)
58
73
 
59
74
  /// Adds lower double-precision values in both operands and returns the
60
75
  /// sum in the lower 64 bits of the result. The upper 64 bits of the result
@@ -71,8 +86,8 @@ typedef __bf16 __m128bh __attribute__((__vector_size__(16), __aligned__(16)));
71
86
  /// \returns A 128-bit vector of [2 x double] whose lower 64 bits contain the
72
87
  /// sum of the lower 64 bits of both operands. The upper 64 bits are copied
73
88
  /// from the upper 64 bits of the first source operand.
74
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_add_sd(__m128d __a,
75
- __m128d __b) {
89
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_add_sd(__m128d __a,
90
+ __m128d __b) {
76
91
  __a[0] += __b[0];
77
92
  return __a;
78
93
  }
@@ -89,8 +104,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_add_sd(__m128d __a,
89
104
  /// A 128-bit vector of [2 x double] containing one of the source operands.
90
105
  /// \returns A 128-bit vector of [2 x double] containing the sums of both
91
106
  /// operands.
92
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_add_pd(__m128d __a,
93
- __m128d __b) {
107
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_add_pd(__m128d __a,
108
+ __m128d __b) {
94
109
  return (__m128d)((__v2df)__a + (__v2df)__b);
95
110
  }
96
111
 
@@ -111,8 +126,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_add_pd(__m128d __a,
111
126
  /// \returns A 128-bit vector of [2 x double] whose lower 64 bits contain the
112
127
  /// difference of the lower 64 bits of both operands. The upper 64 bits are
113
128
  /// copied from the upper 64 bits of the first source operand.
114
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_sub_sd(__m128d __a,
115
- __m128d __b) {
129
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_sub_sd(__m128d __a,
130
+ __m128d __b) {
116
131
  __a[0] -= __b[0];
117
132
  return __a;
118
133
  }
@@ -129,8 +144,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_sub_sd(__m128d __a,
129
144
  /// A 128-bit vector of [2 x double] containing the subtrahend.
130
145
  /// \returns A 128-bit vector of [2 x double] containing the differences between
131
146
  /// both operands.
132
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_sub_pd(__m128d __a,
133
- __m128d __b) {
147
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_sub_pd(__m128d __a,
148
+ __m128d __b) {
134
149
  return (__m128d)((__v2df)__a - (__v2df)__b);
135
150
  }
136
151
 
@@ -150,8 +165,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_sub_pd(__m128d __a,
150
165
  /// \returns A 128-bit vector of [2 x double] whose lower 64 bits contain the
151
166
  /// product of the lower 64 bits of both operands. The upper 64 bits are
152
167
  /// copied from the upper 64 bits of the first source operand.
153
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_mul_sd(__m128d __a,
154
- __m128d __b) {
168
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_mul_sd(__m128d __a,
169
+ __m128d __b) {
155
170
  __a[0] *= __b[0];
156
171
  return __a;
157
172
  }
@@ -168,8 +183,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_mul_sd(__m128d __a,
168
183
  /// A 128-bit vector of [2 x double] containing one of the operands.
169
184
  /// \returns A 128-bit vector of [2 x double] containing the products of both
170
185
  /// operands.
171
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_mul_pd(__m128d __a,
172
- __m128d __b) {
186
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_mul_pd(__m128d __a,
187
+ __m128d __b) {
173
188
  return (__m128d)((__v2df)__a * (__v2df)__b);
174
189
  }
175
190
 
@@ -190,8 +205,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_mul_pd(__m128d __a,
190
205
  /// \returns A 128-bit vector of [2 x double] whose lower 64 bits contain the
191
206
  /// quotient of the lower 64 bits of both operands. The upper 64 bits are
192
207
  /// copied from the upper 64 bits of the first source operand.
193
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_div_sd(__m128d __a,
194
- __m128d __b) {
208
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_div_sd(__m128d __a,
209
+ __m128d __b) {
195
210
  __a[0] /= __b[0];
196
211
  return __a;
197
212
  }
@@ -209,8 +224,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_div_sd(__m128d __a,
209
224
  /// A 128-bit vector of [2 x double] containing the divisor.
210
225
  /// \returns A 128-bit vector of [2 x double] containing the quotients of both
211
226
  /// operands.
212
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_div_pd(__m128d __a,
213
- __m128d __b) {
227
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_div_pd(__m128d __a,
228
+ __m128d __b) {
214
229
  return (__m128d)((__v2df)__a / (__v2df)__b);
215
230
  }
216
231
 
@@ -259,6 +274,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_sqrt_pd(__m128d __a) {
259
274
  /// result. The upper 64 bits of the result are copied from the upper
260
275
  /// double-precision value of the first operand.
261
276
  ///
277
+ /// If either value in a comparison is NaN, returns the value from \a __b.
278
+ ///
262
279
  /// \headerfile <x86intrin.h>
263
280
  ///
264
281
  /// This intrinsic corresponds to the <c> VMINSD / MINSD </c> instruction.
@@ -278,9 +295,11 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_min_sd(__m128d __a,
278
295
  }
279
296
 
280
297
  /// Performs element-by-element comparison of the two 128-bit vectors of
281
- /// [2 x double] and returns the vector containing the lesser of each pair of
298
+ /// [2 x double] and returns a vector containing the lesser of each pair of
282
299
  /// values.
283
300
  ///
301
+ /// If either value in a comparison is NaN, returns the value from \a __b.
302
+ ///
284
303
  /// \headerfile <x86intrin.h>
285
304
  ///
286
305
  /// This intrinsic corresponds to the <c> VMINPD / MINPD </c> instruction.
@@ -301,6 +320,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_min_pd(__m128d __a,
301
320
  /// result. The upper 64 bits of the result are copied from the upper
302
321
  /// double-precision value of the first operand.
303
322
  ///
323
+ /// If either value in a comparison is NaN, returns the value from \a __b.
324
+ ///
304
325
  /// \headerfile <x86intrin.h>
305
326
  ///
306
327
  /// This intrinsic corresponds to the <c> VMAXSD / MAXSD </c> instruction.
@@ -320,9 +341,11 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_max_sd(__m128d __a,
320
341
  }
321
342
 
322
343
  /// Performs element-by-element comparison of the two 128-bit vectors of
323
- /// [2 x double] and returns the vector containing the greater of each pair
344
+ /// [2 x double] and returns a vector containing the greater of each pair
324
345
  /// of values.
325
346
  ///
347
+ /// If either value in a comparison is NaN, returns the value from \a __b.
348
+ ///
326
349
  /// \headerfile <x86intrin.h>
327
350
  ///
328
351
  /// This intrinsic corresponds to the <c> VMAXPD / MAXPD </c> instruction.
@@ -350,8 +373,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_max_pd(__m128d __a,
350
373
  /// A 128-bit vector of [2 x double] containing one of the source operands.
351
374
  /// \returns A 128-bit vector of [2 x double] containing the bitwise AND of the
352
375
  /// values between both operands.
353
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_and_pd(__m128d __a,
354
- __m128d __b) {
376
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_and_pd(__m128d __a,
377
+ __m128d __b) {
355
378
  return (__m128d)((__v2du)__a & (__v2du)__b);
356
379
  }
357
380
 
@@ -370,8 +393,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_and_pd(__m128d __a,
370
393
  /// \returns A 128-bit vector of [2 x double] containing the bitwise AND of the
371
394
  /// values in the second operand and the one's complement of the first
372
395
  /// operand.
373
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_andnot_pd(__m128d __a,
374
- __m128d __b) {
396
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR
397
+ _mm_andnot_pd(__m128d __a, __m128d __b) {
375
398
  return (__m128d)(~(__v2du)__a & (__v2du)__b);
376
399
  }
377
400
 
@@ -387,8 +410,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_andnot_pd(__m128d __a,
387
410
  /// A 128-bit vector of [2 x double] containing one of the source operands.
388
411
  /// \returns A 128-bit vector of [2 x double] containing the bitwise OR of the
389
412
  /// values between both operands.
390
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_or_pd(__m128d __a,
391
- __m128d __b) {
413
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_or_pd(__m128d __a,
414
+ __m128d __b) {
392
415
  return (__m128d)((__v2du)__a | (__v2du)__b);
393
416
  }
394
417
 
@@ -404,14 +427,16 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_or_pd(__m128d __a,
404
427
  /// A 128-bit vector of [2 x double] containing one of the source operands.
405
428
  /// \returns A 128-bit vector of [2 x double] containing the bitwise XOR of the
406
429
  /// values between both operands.
407
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_xor_pd(__m128d __a,
408
- __m128d __b) {
430
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_xor_pd(__m128d __a,
431
+ __m128d __b) {
409
432
  return (__m128d)((__v2du)__a ^ (__v2du)__b);
410
433
  }
411
434
 
412
435
  /// Compares each of the corresponding double-precision values of the
413
- /// 128-bit vectors of [2 x double] for equality. Each comparison yields 0x0
414
- /// for false, 0xFFFFFFFFFFFFFFFF for true.
436
+ /// 128-bit vectors of [2 x double] for equality.
437
+ ///
438
+ /// Each comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
439
+ /// If either value in a comparison is NaN, returns false.
415
440
  ///
416
441
  /// \headerfile <x86intrin.h>
417
442
  ///
@@ -429,8 +454,10 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpeq_pd(__m128d __a,
429
454
 
430
455
  /// Compares each of the corresponding double-precision values of the
431
456
  /// 128-bit vectors of [2 x double] to determine if the values in the first
432
- /// operand are less than those in the second operand. Each comparison
433
- /// yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
457
+ /// operand are less than those in the second operand.
458
+ ///
459
+ /// Each comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
460
+ /// If either value in a comparison is NaN, returns false.
434
461
  ///
435
462
  /// \headerfile <x86intrin.h>
436
463
  ///
@@ -450,7 +477,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmplt_pd(__m128d __a,
450
477
  /// 128-bit vectors of [2 x double] to determine if the values in the first
451
478
  /// operand are less than or equal to those in the second operand.
452
479
  ///
453
- /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
480
+ /// Each comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
481
+ /// If either value in a comparison is NaN, returns false.
454
482
  ///
455
483
  /// \headerfile <x86intrin.h>
456
484
  ///
@@ -470,7 +498,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmple_pd(__m128d __a,
470
498
  /// 128-bit vectors of [2 x double] to determine if the values in the first
471
499
  /// operand are greater than those in the second operand.
472
500
  ///
473
- /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
501
+ /// Each comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
502
+ /// If either value in a comparison is NaN, returns false.
474
503
  ///
475
504
  /// \headerfile <x86intrin.h>
476
505
  ///
@@ -490,7 +519,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpgt_pd(__m128d __a,
490
519
  /// 128-bit vectors of [2 x double] to determine if the values in the first
491
520
  /// operand are greater than or equal to those in the second operand.
492
521
  ///
493
- /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
522
+ /// Each comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
523
+ /// If either value in a comparison is NaN, returns false.
494
524
  ///
495
525
  /// \headerfile <x86intrin.h>
496
526
  ///
@@ -510,8 +540,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpge_pd(__m128d __a,
510
540
  /// 128-bit vectors of [2 x double] to determine if the values in the first
511
541
  /// operand are ordered with respect to those in the second operand.
512
542
  ///
513
- /// A pair of double-precision values are "ordered" with respect to each
514
- /// other if neither value is a NaN. Each comparison yields 0x0 for false,
543
+ /// A pair of double-precision values are ordered with respect to each
544
+ /// other if neither value is a NaN. Each comparison returns 0x0 for false,
515
545
  /// 0xFFFFFFFFFFFFFFFF for true.
516
546
  ///
517
547
  /// \headerfile <x86intrin.h>
@@ -532,8 +562,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpord_pd(__m128d __a,
532
562
  /// 128-bit vectors of [2 x double] to determine if the values in the first
533
563
  /// operand are unordered with respect to those in the second operand.
534
564
  ///
535
- /// A pair of double-precision values are "unordered" with respect to each
536
- /// other if one or both values are NaN. Each comparison yields 0x0 for
565
+ /// A pair of double-precision values are unordered with respect to each
566
+ /// other if one or both values are NaN. Each comparison returns 0x0 for
537
567
  /// false, 0xFFFFFFFFFFFFFFFF for true.
538
568
  ///
539
569
  /// \headerfile <x86intrin.h>
@@ -555,7 +585,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpunord_pd(__m128d __a,
555
585
  /// 128-bit vectors of [2 x double] to determine if the values in the first
556
586
  /// operand are unequal to those in the second operand.
557
587
  ///
558
- /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
588
+ /// Each comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
589
+ /// If either value in a comparison is NaN, returns true.
559
590
  ///
560
591
  /// \headerfile <x86intrin.h>
561
592
  ///
@@ -575,7 +606,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpneq_pd(__m128d __a,
575
606
  /// 128-bit vectors of [2 x double] to determine if the values in the first
576
607
  /// operand are not less than those in the second operand.
577
608
  ///
578
- /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
609
+ /// Each comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
610
+ /// If either value in a comparison is NaN, returns true.
579
611
  ///
580
612
  /// \headerfile <x86intrin.h>
581
613
  ///
@@ -595,7 +627,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpnlt_pd(__m128d __a,
595
627
  /// 128-bit vectors of [2 x double] to determine if the values in the first
596
628
  /// operand are not less than or equal to those in the second operand.
597
629
  ///
598
- /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
630
+ /// Each comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
631
+ /// If either value in a comparison is NaN, returns true.
599
632
  ///
600
633
  /// \headerfile <x86intrin.h>
601
634
  ///
@@ -615,7 +648,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpnle_pd(__m128d __a,
615
648
  /// 128-bit vectors of [2 x double] to determine if the values in the first
616
649
  /// operand are not greater than those in the second operand.
617
650
  ///
618
- /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
651
+ /// Each comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
652
+ /// If either value in a comparison is NaN, returns true.
619
653
  ///
620
654
  /// \headerfile <x86intrin.h>
621
655
  ///
@@ -635,7 +669,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpngt_pd(__m128d __a,
635
669
  /// 128-bit vectors of [2 x double] to determine if the values in the first
636
670
  /// operand are not greater than or equal to those in the second operand.
637
671
  ///
638
- /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
672
+ /// Each comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
673
+ /// If either value in a comparison is NaN, returns true.
639
674
  ///
640
675
  /// \headerfile <x86intrin.h>
641
676
  ///
@@ -654,7 +689,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpnge_pd(__m128d __a,
654
689
  /// Compares the lower double-precision floating-point values in each of
655
690
  /// the two 128-bit floating-point vectors of [2 x double] for equality.
656
691
  ///
657
- /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
692
+ /// The comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
693
+ /// If either value in a comparison is NaN, returns false.
658
694
  ///
659
695
  /// \headerfile <x86intrin.h>
660
696
  ///
@@ -678,7 +714,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpeq_sd(__m128d __a,
678
714
  /// the value in the first parameter is less than the corresponding value in
679
715
  /// the second parameter.
680
716
  ///
681
- /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
717
+ /// The comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
718
+ /// If either value in a comparison is NaN, returns false.
682
719
  ///
683
720
  /// \headerfile <x86intrin.h>
684
721
  ///
@@ -702,7 +739,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmplt_sd(__m128d __a,
702
739
  /// the value in the first parameter is less than or equal to the
703
740
  /// corresponding value in the second parameter.
704
741
  ///
705
- /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
742
+ /// The comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
743
+ /// If either value in a comparison is NaN, returns false.
706
744
  ///
707
745
  /// \headerfile <x86intrin.h>
708
746
  ///
@@ -726,7 +764,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmple_sd(__m128d __a,
726
764
  /// the value in the first parameter is greater than the corresponding value
727
765
  /// in the second parameter.
728
766
  ///
729
- /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
767
+ /// The comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
768
+ /// If either value in a comparison is NaN, returns false.
730
769
  ///
731
770
  /// \headerfile <x86intrin.h>
732
771
  ///
@@ -751,7 +790,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpgt_sd(__m128d __a,
751
790
  /// the value in the first parameter is greater than or equal to the
752
791
  /// corresponding value in the second parameter.
753
792
  ///
754
- /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
793
+ /// The comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
794
+ /// If either value in a comparison is NaN, returns false.
755
795
  ///
756
796
  /// \headerfile <x86intrin.h>
757
797
  ///
@@ -773,11 +813,11 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpge_sd(__m128d __a,
773
813
 
774
814
  /// Compares the lower double-precision floating-point values in each of
775
815
  /// the two 128-bit floating-point vectors of [2 x double] to determine if
776
- /// the value in the first parameter is "ordered" with respect to the
816
+ /// the value in the first parameter is ordered with respect to the
777
817
  /// corresponding value in the second parameter.
778
818
  ///
779
- /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true. A pair
780
- /// of double-precision values are "ordered" with respect to each other if
819
+ /// The comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true. A pair
820
+ /// of double-precision values are ordered with respect to each other if
781
821
  /// neither value is a NaN.
782
822
  ///
783
823
  /// \headerfile <x86intrin.h>
@@ -799,11 +839,11 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpord_sd(__m128d __a,
799
839
 
800
840
  /// Compares the lower double-precision floating-point values in each of
801
841
  /// the two 128-bit floating-point vectors of [2 x double] to determine if
802
- /// the value in the first parameter is "unordered" with respect to the
842
+ /// the value in the first parameter is unordered with respect to the
803
843
  /// corresponding value in the second parameter.
804
844
  ///
805
- /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true. A pair
806
- /// of double-precision values are "unordered" with respect to each other if
845
+ /// The comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true. A pair
846
+ /// of double-precision values are unordered with respect to each other if
807
847
  /// one or both values are NaN.
808
848
  ///
809
849
  /// \headerfile <x86intrin.h>
@@ -829,7 +869,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpunord_sd(__m128d __a,
829
869
  /// the value in the first parameter is unequal to the corresponding value in
830
870
  /// the second parameter.
831
871
  ///
832
- /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
872
+ /// The comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
873
+ /// If either value in a comparison is NaN, returns true.
833
874
  ///
834
875
  /// \headerfile <x86intrin.h>
835
876
  ///
@@ -853,7 +894,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpneq_sd(__m128d __a,
853
894
  /// the value in the first parameter is not less than the corresponding
854
895
  /// value in the second parameter.
855
896
  ///
856
- /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
897
+ /// The comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
898
+ /// If either value in a comparison is NaN, returns true.
857
899
  ///
858
900
  /// \headerfile <x86intrin.h>
859
901
  ///
@@ -877,7 +919,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpnlt_sd(__m128d __a,
877
919
  /// the value in the first parameter is not less than or equal to the
878
920
  /// corresponding value in the second parameter.
879
921
  ///
880
- /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
922
+ /// The comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
923
+ /// If either value in a comparison is NaN, returns true.
881
924
  ///
882
925
  /// \headerfile <x86intrin.h>
883
926
  ///
@@ -901,7 +944,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpnle_sd(__m128d __a,
901
944
  /// the value in the first parameter is not greater than the corresponding
902
945
  /// value in the second parameter.
903
946
  ///
904
- /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
947
+ /// The comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
948
+ /// If either value in a comparison is NaN, returns true.
905
949
  ///
906
950
  /// \headerfile <x86intrin.h>
907
951
  ///
@@ -926,7 +970,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpngt_sd(__m128d __a,
926
970
  /// the value in the first parameter is not greater than or equal to the
927
971
  /// corresponding value in the second parameter.
928
972
  ///
929
- /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
973
+ /// The comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
974
+ /// If either value in a comparison is NaN, returns true.
930
975
  ///
931
976
  /// \headerfile <x86intrin.h>
932
977
  ///
@@ -949,8 +994,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpnge_sd(__m128d __a,
949
994
  /// Compares the lower double-precision floating-point values in each of
950
995
  /// the two 128-bit floating-point vectors of [2 x double] for equality.
951
996
  ///
952
- /// The comparison yields 0 for false, 1 for true. If either of the two
953
- /// lower double-precision values is NaN, 0 is returned.
997
+ /// The comparison returns 0 for false, 1 for true. If either value in a
998
+ /// comparison is NaN, returns 0.
954
999
  ///
955
1000
  /// \headerfile <x86intrin.h>
956
1001
  ///
@@ -962,8 +1007,7 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpnge_sd(__m128d __a,
962
1007
  /// \param __b
963
1008
  /// A 128-bit vector of [2 x double]. The lower double-precision value is
964
1009
  /// compared to the lower double-precision value of \a __a.
965
- /// \returns An integer containing the comparison results. If either of the two
966
- /// lower double-precision values is NaN, 0 is returned.
1010
+ /// \returns An integer containing the comparison results.
967
1011
  static __inline__ int __DEFAULT_FN_ATTRS _mm_comieq_sd(__m128d __a,
968
1012
  __m128d __b) {
969
1013
  return __builtin_ia32_comisdeq((__v2df)__a, (__v2df)__b);
@@ -974,8 +1018,8 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_comieq_sd(__m128d __a,
974
1018
  /// the value in the first parameter is less than the corresponding value in
975
1019
  /// the second parameter.
976
1020
  ///
977
- /// The comparison yields 0 for false, 1 for true. If either of the two
978
- /// lower double-precision values is NaN, 0 is returned.
1021
+ /// The comparison returns 0 for false, 1 for true. If either value in a
1022
+ /// comparison is NaN, returns 0.
979
1023
  ///
980
1024
  /// \headerfile <x86intrin.h>
981
1025
  ///
@@ -987,8 +1031,7 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_comieq_sd(__m128d __a,
987
1031
  /// \param __b
988
1032
  /// A 128-bit vector of [2 x double]. The lower double-precision value is
989
1033
  /// compared to the lower double-precision value of \a __a.
990
- /// \returns An integer containing the comparison results. If either of the two
991
- /// lower double-precision values is NaN, 0 is returned.
1034
+ /// \returns An integer containing the comparison results.
992
1035
  static __inline__ int __DEFAULT_FN_ATTRS _mm_comilt_sd(__m128d __a,
993
1036
  __m128d __b) {
994
1037
  return __builtin_ia32_comisdlt((__v2df)__a, (__v2df)__b);
@@ -999,8 +1042,8 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_comilt_sd(__m128d __a,
999
1042
  /// the value in the first parameter is less than or equal to the
1000
1043
  /// corresponding value in the second parameter.
1001
1044
  ///
1002
- /// The comparison yields 0 for false, 1 for true. If either of the two
1003
- /// lower double-precision values is NaN, 0 is returned.
1045
+ /// The comparison returns 0 for false, 1 for true. If either value in a
1046
+ /// comparison is NaN, returns 0.
1004
1047
  ///
1005
1048
  /// \headerfile <x86intrin.h>
1006
1049
  ///
@@ -1012,8 +1055,7 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_comilt_sd(__m128d __a,
1012
1055
  /// \param __b
1013
1056
  /// A 128-bit vector of [2 x double]. The lower double-precision value is
1014
1057
  /// compared to the lower double-precision value of \a __a.
1015
- /// \returns An integer containing the comparison results. If either of the two
1016
- /// lower double-precision values is NaN, 0 is returned.
1058
+ /// \returns An integer containing the comparison results.
1017
1059
  static __inline__ int __DEFAULT_FN_ATTRS _mm_comile_sd(__m128d __a,
1018
1060
  __m128d __b) {
1019
1061
  return __builtin_ia32_comisdle((__v2df)__a, (__v2df)__b);
@@ -1024,8 +1066,8 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_comile_sd(__m128d __a,
1024
1066
  /// the value in the first parameter is greater than the corresponding value
1025
1067
  /// in the second parameter.
1026
1068
  ///
1027
- /// The comparison yields 0 for false, 1 for true. If either of the two
1028
- /// lower double-precision values is NaN, 0 is returned.
1069
+ /// The comparison returns 0 for false, 1 for true. If either value in a
1070
+ /// comparison is NaN, returns 0.
1029
1071
  ///
1030
1072
  /// \headerfile <x86intrin.h>
1031
1073
  ///
@@ -1037,8 +1079,7 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_comile_sd(__m128d __a,
1037
1079
  /// \param __b
1038
1080
  /// A 128-bit vector of [2 x double]. The lower double-precision value is
1039
1081
  /// compared to the lower double-precision value of \a __a.
1040
- /// \returns An integer containing the comparison results. If either of the two
1041
- /// lower double-precision values is NaN, 0 is returned.
1082
+ /// \returns An integer containing the comparison results.
1042
1083
  static __inline__ int __DEFAULT_FN_ATTRS _mm_comigt_sd(__m128d __a,
1043
1084
  __m128d __b) {
1044
1085
  return __builtin_ia32_comisdgt((__v2df)__a, (__v2df)__b);
@@ -1049,8 +1090,8 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_comigt_sd(__m128d __a,
1049
1090
  /// the value in the first parameter is greater than or equal to the
1050
1091
  /// corresponding value in the second parameter.
1051
1092
  ///
1052
- /// The comparison yields 0 for false, 1 for true. If either of the two
1053
- /// lower double-precision values is NaN, 0 is returned.
1093
+ /// The comparison returns 0 for false, 1 for true. If either value in a
1094
+ /// comparison is NaN, returns 0.
1054
1095
  ///
1055
1096
  /// \headerfile <x86intrin.h>
1056
1097
  ///
@@ -1062,8 +1103,7 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_comigt_sd(__m128d __a,
1062
1103
  /// \param __b
1063
1104
  /// A 128-bit vector of [2 x double]. The lower double-precision value is
1064
1105
  /// compared to the lower double-precision value of \a __a.
1065
- /// \returns An integer containing the comparison results. If either of the two
1066
- /// lower double-precision values is NaN, 0 is returned.
1106
+ /// \returns An integer containing the comparison results.
1067
1107
  static __inline__ int __DEFAULT_FN_ATTRS _mm_comige_sd(__m128d __a,
1068
1108
  __m128d __b) {
1069
1109
  return __builtin_ia32_comisdge((__v2df)__a, (__v2df)__b);
@@ -1074,8 +1114,8 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_comige_sd(__m128d __a,
1074
1114
  /// the value in the first parameter is unequal to the corresponding value in
1075
1115
  /// the second parameter.
1076
1116
  ///
1077
- /// The comparison yields 0 for false, 1 for true. If either of the two
1078
- /// lower double-precision values is NaN, 1 is returned.
1117
+ /// The comparison returns 0 for false, 1 for true. If either value in a
1118
+ /// comparison is NaN, returns 1.
1079
1119
  ///
1080
1120
  /// \headerfile <x86intrin.h>
1081
1121
  ///
@@ -1087,18 +1127,17 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_comige_sd(__m128d __a,
1087
1127
  /// \param __b
1088
1128
  /// A 128-bit vector of [2 x double]. The lower double-precision value is
1089
1129
  /// compared to the lower double-precision value of \a __a.
1090
- /// \returns An integer containing the comparison results. If either of the two
1091
- /// lower double-precision values is NaN, 1 is returned.
1130
+ /// \returns An integer containing the comparison results.
1092
1131
  static __inline__ int __DEFAULT_FN_ATTRS _mm_comineq_sd(__m128d __a,
1093
1132
  __m128d __b) {
1094
1133
  return __builtin_ia32_comisdneq((__v2df)__a, (__v2df)__b);
1095
1134
  }
1096
1135
 
1097
1136
  /// Compares the lower double-precision floating-point values in each of
1098
- /// the two 128-bit floating-point vectors of [2 x double] for equality. The
1099
- /// comparison yields 0 for false, 1 for true.
1137
+ /// the two 128-bit floating-point vectors of [2 x double] for equality.
1100
1138
  ///
1101
- /// If either of the two lower double-precision values is NaN, 0 is returned.
1139
+ /// The comparison returns 0 for false, 1 for true. If either value in a
1140
+ /// comparison is NaN, returns 0.
1102
1141
  ///
1103
1142
  /// \headerfile <x86intrin.h>
1104
1143
  ///
@@ -1110,8 +1149,7 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_comineq_sd(__m128d __a,
1110
1149
  /// \param __b
1111
1150
  /// A 128-bit vector of [2 x double]. The lower double-precision value is
1112
1151
  /// compared to the lower double-precision value of \a __a.
1113
- /// \returns An integer containing the comparison results. If either of the two
1114
- /// lower double-precision values is NaN, 0 is returned.
1152
+ /// \returns An integer containing the comparison results.
1115
1153
  static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomieq_sd(__m128d __a,
1116
1154
  __m128d __b) {
1117
1155
  return __builtin_ia32_ucomisdeq((__v2df)__a, (__v2df)__b);
@@ -1122,8 +1160,8 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomieq_sd(__m128d __a,
1122
1160
  /// the value in the first parameter is less than the corresponding value in
1123
1161
  /// the second parameter.
1124
1162
  ///
1125
- /// The comparison yields 0 for false, 1 for true. If either of the two lower
1126
- /// double-precision values is NaN, 0 is returned.
1163
+ /// The comparison returns 0 for false, 1 for true. If either value in a
1164
+ /// comparison is NaN, returns 0.
1127
1165
  ///
1128
1166
  /// \headerfile <x86intrin.h>
1129
1167
  ///
@@ -1135,8 +1173,7 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomieq_sd(__m128d __a,
1135
1173
  /// \param __b
1136
1174
  /// A 128-bit vector of [2 x double]. The lower double-precision value is
1137
1175
  /// compared to the lower double-precision value of \a __a.
1138
- /// \returns An integer containing the comparison results. If either of the two
1139
- /// lower double-precision values is NaN, 0 is returned.
1176
+ /// \returns An integer containing the comparison results.
1140
1177
  static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomilt_sd(__m128d __a,
1141
1178
  __m128d __b) {
1142
1179
  return __builtin_ia32_ucomisdlt((__v2df)__a, (__v2df)__b);
@@ -1147,8 +1184,8 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomilt_sd(__m128d __a,
1147
1184
  /// the value in the first parameter is less than or equal to the
1148
1185
  /// corresponding value in the second parameter.
1149
1186
  ///
1150
- /// The comparison yields 0 for false, 1 for true. If either of the two lower
1151
- /// double-precision values is NaN, 0 is returned.
1187
+ /// The comparison returns 0 for false, 1 for true. If either value in a
1188
+ /// comparison is NaN, returns 0.
1152
1189
  ///
1153
1190
  /// \headerfile <x86intrin.h>
1154
1191
  ///
@@ -1160,8 +1197,7 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomilt_sd(__m128d __a,
1160
1197
  /// \param __b
1161
1198
  /// A 128-bit vector of [2 x double]. The lower double-precision value is
1162
1199
  /// compared to the lower double-precision value of \a __a.
1163
- /// \returns An integer containing the comparison results. If either of the two
1164
- /// lower double-precision values is NaN, 0 is returned.
1200
+ /// \returns An integer containing the comparison results.
1165
1201
  static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomile_sd(__m128d __a,
1166
1202
  __m128d __b) {
1167
1203
  return __builtin_ia32_ucomisdle((__v2df)__a, (__v2df)__b);
@@ -1172,8 +1208,8 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomile_sd(__m128d __a,
1172
1208
  /// the value in the first parameter is greater than the corresponding value
1173
1209
  /// in the second parameter.
1174
1210
  ///
1175
- /// The comparison yields 0 for false, 1 for true. If either of the two lower
1176
- /// double-precision values is NaN, 0 is returned.
1211
+ /// The comparison returns 0 for false, 1 for true. If either value in a
1212
+ /// comparison is NaN, returns 0.
1177
1213
  ///
1178
1214
  /// \headerfile <x86intrin.h>
1179
1215
  ///
@@ -1185,8 +1221,7 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomile_sd(__m128d __a,
1185
1221
  /// \param __b
1186
1222
  /// A 128-bit vector of [2 x double]. The lower double-precision value is
1187
1223
  /// compared to the lower double-precision value of \a __a.
1188
- /// \returns An integer containing the comparison results. If either of the two
1189
- /// lower double-precision values is NaN, 0 is returned.
1224
+ /// \returns An integer containing the comparison results.
1190
1225
  static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomigt_sd(__m128d __a,
1191
1226
  __m128d __b) {
1192
1227
  return __builtin_ia32_ucomisdgt((__v2df)__a, (__v2df)__b);
@@ -1197,8 +1232,8 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomigt_sd(__m128d __a,
1197
1232
  /// the value in the first parameter is greater than or equal to the
1198
1233
  /// corresponding value in the second parameter.
1199
1234
  ///
1200
- /// The comparison yields 0 for false, 1 for true. If either of the two
1201
- /// lower double-precision values is NaN, 0 is returned.
1235
+ /// The comparison returns 0 for false, 1 for true. If either value in a
1236
+ /// comparison is NaN, returns 0.
1202
1237
  ///
1203
1238
  /// \headerfile <x86intrin.h>
1204
1239
  ///
@@ -1210,8 +1245,7 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomigt_sd(__m128d __a,
1210
1245
  /// \param __b
1211
1246
  /// A 128-bit vector of [2 x double]. The lower double-precision value is
1212
1247
  /// compared to the lower double-precision value of \a __a.
1213
- /// \returns An integer containing the comparison results. If either of the two
1214
- /// lower double-precision values is NaN, 0 is returned.
1248
+ /// \returns An integer containing the comparison results.
1215
1249
  static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomige_sd(__m128d __a,
1216
1250
  __m128d __b) {
1217
1251
  return __builtin_ia32_ucomisdge((__v2df)__a, (__v2df)__b);
@@ -1222,8 +1256,8 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomige_sd(__m128d __a,
1222
1256
  /// the value in the first parameter is unequal to the corresponding value in
1223
1257
  /// the second parameter.
1224
1258
  ///
1225
- /// The comparison yields 0 for false, 1 for true. If either of the two lower
1226
- /// double-precision values is NaN, 1 is returned.
1259
+ /// The comparison returns 0 for false, 1 for true. If either value in a
1260
+ /// comparison is NaN, returns 1.
1227
1261
  ///
1228
1262
  /// \headerfile <x86intrin.h>
1229
1263
  ///
@@ -1235,8 +1269,7 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomige_sd(__m128d __a,
1235
1269
  /// \param __b
1236
1270
  /// A 128-bit vector of [2 x double]. The lower double-precision value is
1237
1271
  /// compared to the lower double-precision value of \a __a.
1238
- /// \returns An integer containing the comparison result. If either of the two
1239
- /// lower double-precision values is NaN, 1 is returned.
1272
+ /// \returns An integer containing the comparison result.
1240
1273
  static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomineq_sd(__m128d __a,
1241
1274
  __m128d __b) {
1242
1275
  return __builtin_ia32_ucomisdneq((__v2df)__a, (__v2df)__b);
@@ -1273,7 +1306,8 @@ static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_cvtpd_ps(__m128d __a) {
1273
1306
  /// floating-point elements are converted to double-precision values. The
1274
1307
  /// upper two elements are unused.
1275
1308
  /// \returns A 128-bit vector of [2 x double] containing the converted values.
1276
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cvtps_pd(__m128 __a) {
1309
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR
1310
+ _mm_cvtps_pd(__m128 __a) {
1277
1311
  return (__m128d) __builtin_convertvector(
1278
1312
  __builtin_shufflevector((__v4sf)__a, (__v4sf)__a, 0, 1), __v2df);
1279
1313
  }
@@ -1294,7 +1328,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cvtps_pd(__m128 __a) {
1294
1328
  ///
1295
1329
  /// The upper two elements are unused.
1296
1330
  /// \returns A 128-bit vector of [2 x double] containing the converted values.
1297
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cvtepi32_pd(__m128i __a) {
1331
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR
1332
+ _mm_cvtepi32_pd(__m128i __a) {
1298
1333
  return (__m128d) __builtin_convertvector(
1299
1334
  __builtin_shufflevector((__v4si)__a, (__v4si)__a, 0, 1), __v2df);
1300
1335
  }
@@ -1304,6 +1339,10 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cvtepi32_pd(__m128i __a) {
1304
1339
  /// returned in the lower 64 bits of a 128-bit vector of [4 x i32]. The upper
1305
1340
  /// 64 bits of the result vector are set to zero.
1306
1341
  ///
1342
+ /// If a converted value does not fit in a 32-bit integer, raises a
1343
+ /// floating-point invalid exception. If the exception is masked, returns
1344
+ /// the most negative integer.
1345
+ ///
1307
1346
  /// \headerfile <x86intrin.h>
1308
1347
  ///
1309
1348
  /// This intrinsic corresponds to the <c> VCVTPD2DQ / CVTPD2DQ </c> instruction.
@@ -1319,6 +1358,10 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtpd_epi32(__m128d __a) {
1319
1358
  /// Converts the low-order element of a 128-bit vector of [2 x double]
1320
1359
  /// into a 32-bit signed integer value.
1321
1360
  ///
1361
+ /// If the converted value does not fit in a 32-bit integer, raises a
1362
+ /// floating-point invalid exception. If the exception is masked, returns
1363
+ /// the most negative integer.
1364
+ ///
1322
1365
  /// \headerfile <x86intrin.h>
1323
1366
  ///
1324
1367
  /// This intrinsic corresponds to the <c> VCVTSD2SI / CVTSD2SI </c> instruction.
@@ -1372,8 +1415,8 @@ static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_cvtsd_ss(__m128 __a,
1372
1415
  /// \returns A 128-bit vector of [2 x double]. The lower 64 bits contain the
1373
1416
  /// converted value from the second parameter. The upper 64 bits are copied
1374
1417
  /// from the upper 64 bits of the first parameter.
1375
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cvtsi32_sd(__m128d __a,
1376
- int __b) {
1418
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR
1419
+ _mm_cvtsi32_sd(__m128d __a, int __b) {
1377
1420
  __a[0] = __b;
1378
1421
  return __a;
1379
1422
  }
@@ -1397,19 +1440,20 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cvtsi32_sd(__m128d __a,
1397
1440
  /// \returns A 128-bit vector of [2 x double]. The lower 64 bits contain the
1398
1441
  /// converted value from the second parameter. The upper 64 bits are copied
1399
1442
  /// from the upper 64 bits of the first parameter.
1400
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cvtss_sd(__m128d __a,
1401
- __m128 __b) {
1443
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR
1444
+ _mm_cvtss_sd(__m128d __a, __m128 __b) {
1402
1445
  __a[0] = __b[0];
1403
1446
  return __a;
1404
1447
  }
1405
1448
 
1406
1449
  /// Converts the two double-precision floating-point elements of a
1407
- /// 128-bit vector of [2 x double] into two signed 32-bit integer values,
1408
- /// returned in the lower 64 bits of a 128-bit vector of [4 x i32].
1450
+ /// 128-bit vector of [2 x double] into two signed truncated (rounded
1451
+ /// toward zero) 32-bit integer values, returned in the lower 64 bits
1452
+ /// of a 128-bit vector of [4 x i32].
1409
1453
  ///
1410
- /// If the result of either conversion is inexact, the result is truncated
1411
- /// (rounded towards zero) regardless of the current MXCSR setting. The upper
1412
- /// 64 bits of the result vector are set to zero.
1454
+ /// If a converted value does not fit in a 32-bit integer, raises a
1455
+ /// floating-point invalid exception. If the exception is masked, returns
1456
+ /// the most negative integer.
1413
1457
  ///
1414
1458
  /// \headerfile <x86intrin.h>
1415
1459
  ///
@@ -1425,7 +1469,11 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvttpd_epi32(__m128d __a) {
1425
1469
  }
1426
1470
 
1427
1471
  /// Converts the low-order element of a [2 x double] vector into a 32-bit
1428
- /// signed integer value, truncating the result when it is inexact.
1472
+ /// signed truncated (rounded toward zero) integer value.
1473
+ ///
1474
+ /// If the converted value does not fit in a 32-bit integer, raises a
1475
+ /// floating-point invalid exception. If the exception is masked, returns
1476
+ /// the most negative integer.
1429
1477
  ///
1430
1478
  /// \headerfile <x86intrin.h>
1431
1479
  ///
@@ -1444,6 +1492,10 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_cvttsd_si32(__m128d __a) {
1444
1492
  /// 128-bit vector of [2 x double] into two signed 32-bit integer values,
1445
1493
  /// returned in a 64-bit vector of [2 x i32].
1446
1494
  ///
1495
+ /// If a converted value does not fit in a 32-bit integer, raises a
1496
+ /// floating-point invalid exception. If the exception is masked, returns
1497
+ /// the most negative integer.
1498
+ ///
1447
1499
  /// \headerfile <x86intrin.h>
1448
1500
  ///
1449
1501
  /// This intrinsic corresponds to the <c> CVTPD2PI </c> instruction.
@@ -1451,16 +1503,17 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_cvttsd_si32(__m128d __a) {
1451
1503
  /// \param __a
1452
1504
  /// A 128-bit vector of [2 x double].
1453
1505
  /// \returns A 64-bit vector of [2 x i32] containing the converted values.
1454
- static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX _mm_cvtpd_pi32(__m128d __a) {
1455
- return (__m64)__builtin_ia32_cvtpd2pi((__v2df)__a);
1506
+ static __inline__ __m64 __DEFAULT_FN_ATTRS _mm_cvtpd_pi32(__m128d __a) {
1507
+ return __trunc64(__builtin_ia32_cvtpd2dq((__v2df)__a));
1456
1508
  }
1457
1509
 
1458
1510
  /// Converts the two double-precision floating-point elements of a
1459
- /// 128-bit vector of [2 x double] into two signed 32-bit integer values,
1460
- /// returned in a 64-bit vector of [2 x i32].
1511
+ /// 128-bit vector of [2 x double] into two signed truncated (rounded toward
1512
+ /// zero) 32-bit integer values, returned in a 64-bit vector of [2 x i32].
1461
1513
  ///
1462
- /// If the result of either conversion is inexact, the result is truncated
1463
- /// (rounded towards zero) regardless of the current MXCSR setting.
1514
+ /// If a converted value does not fit in a 32-bit integer, raises a
1515
+ /// floating-point invalid exception. If the exception is masked, returns
1516
+ /// the most negative integer.
1464
1517
  ///
1465
1518
  /// \headerfile <x86intrin.h>
1466
1519
  ///
@@ -1469,8 +1522,8 @@ static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX _mm_cvtpd_pi32(__m128d __a) {
1469
1522
  /// \param __a
1470
1523
  /// A 128-bit vector of [2 x double].
1471
1524
  /// \returns A 64-bit vector of [2 x i32] containing the converted values.
1472
- static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX _mm_cvttpd_pi32(__m128d __a) {
1473
- return (__m64)__builtin_ia32_cvttpd2pi((__v2df)__a);
1525
+ static __inline__ __m64 __DEFAULT_FN_ATTRS _mm_cvttpd_pi32(__m128d __a) {
1526
+ return __trunc64(__builtin_ia32_cvttpd2dq((__v2df)__a));
1474
1527
  }
1475
1528
 
1476
1529
  /// Converts the two signed 32-bit integer elements of a 64-bit vector of
@@ -1484,8 +1537,9 @@ static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX _mm_cvttpd_pi32(__m128d __a) {
1484
1537
  /// \param __a
1485
1538
  /// A 64-bit vector of [2 x i32].
1486
1539
  /// \returns A 128-bit vector of [2 x double] containing the converted values.
1487
- static __inline__ __m128d __DEFAULT_FN_ATTRS_MMX _mm_cvtpi32_pd(__m64 __a) {
1488
- return __builtin_ia32_cvtpi2pd((__v2si)__a);
1540
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR
1541
+ _mm_cvtpi32_pd(__m64 __a) {
1542
+ return (__m128d) __builtin_convertvector((__v2si)__a, __v2df);
1489
1543
  }
1490
1544
 
1491
1545
  /// Returns the low-order element of a 128-bit vector of [2 x double] as
@@ -1499,7 +1553,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS_MMX _mm_cvtpi32_pd(__m64 __a) {
1499
1553
  /// A 128-bit vector of [2 x double]. The lower 64 bits are returned.
1500
1554
  /// \returns A double-precision floating-point value copied from the lower 64
1501
1555
  /// bits of \a __a.
1502
- static __inline__ double __DEFAULT_FN_ATTRS _mm_cvtsd_f64(__m128d __a) {
1556
+ static __inline__ double __DEFAULT_FN_ATTRS_CONSTEXPR
1557
+ _mm_cvtsd_f64(__m128d __a) {
1503
1558
  return __a[0];
1504
1559
  }
1505
1560
 
@@ -1734,8 +1789,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_undefined_pd(void) {
1734
1789
  /// \returns An initialized 128-bit floating-point vector of [2 x double]. The
1735
1790
  /// lower 64 bits contain the value of the parameter. The upper 64 bits are
1736
1791
  /// set to zero.
1737
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_set_sd(double __w) {
1738
- return __extension__(__m128d){__w, 0};
1792
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_set_sd(double __w) {
1793
+ return __extension__(__m128d){__w, 0.0};
1739
1794
  }
1740
1795
 
1741
1796
  /// Constructs a 128-bit floating-point vector of [2 x double], with each
@@ -1750,7 +1805,7 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_set_sd(double __w) {
1750
1805
  /// A double-precision floating-point value used to initialize each vector
1751
1806
  /// element of the result.
1752
1807
  /// \returns An initialized 128-bit floating-point vector of [2 x double].
1753
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_set1_pd(double __w) {
1808
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_set1_pd(double __w) {
1754
1809
  return __extension__(__m128d){__w, __w};
1755
1810
  }
1756
1811
 
@@ -1766,7 +1821,7 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_set1_pd(double __w) {
1766
1821
  /// A double-precision floating-point value used to initialize each vector
1767
1822
  /// element of the result.
1768
1823
  /// \returns An initialized 128-bit floating-point vector of [2 x double].
1769
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_set_pd1(double __w) {
1824
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_set_pd1(double __w) {
1770
1825
  return _mm_set1_pd(__w);
1771
1826
  }
1772
1827
 
@@ -1784,8 +1839,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_set_pd1(double __w) {
1784
1839
  /// A double-precision floating-point value used to initialize the lower 64
1785
1840
  /// bits of the result.
1786
1841
  /// \returns An initialized 128-bit floating-point vector of [2 x double].
1787
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_set_pd(double __w,
1788
- double __x) {
1842
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_set_pd(double __w,
1843
+ double __x) {
1789
1844
  return __extension__(__m128d){__x, __w};
1790
1845
  }
1791
1846
 
@@ -1804,8 +1859,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_set_pd(double __w,
1804
1859
  /// A double-precision floating-point value used to initialize the upper 64
1805
1860
  /// bits of the result.
1806
1861
  /// \returns An initialized 128-bit floating-point vector of [2 x double].
1807
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_setr_pd(double __w,
1808
- double __x) {
1862
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_setr_pd(double __w,
1863
+ double __x) {
1809
1864
  return __extension__(__m128d){__w, __x};
1810
1865
  }
1811
1866
 
@@ -1818,7 +1873,7 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_setr_pd(double __w,
1818
1873
  ///
1819
1874
  /// \returns An initialized 128-bit floating-point vector of [2 x double] with
1820
1875
  /// all elements set to zero.
1821
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_setzero_pd(void) {
1876
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_setzero_pd(void) {
1822
1877
  return __extension__(__m128d){0.0, 0.0};
1823
1878
  }
1824
1879
 
@@ -1837,8 +1892,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_setzero_pd(void) {
1837
1892
  /// A 128-bit vector of [2 x double]. The lower 64 bits are written to the
1838
1893
  /// lower 64 bits of the result.
1839
1894
  /// \returns A 128-bit vector of [2 x double] containing the moved values.
1840
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_move_sd(__m128d __a,
1841
- __m128d __b) {
1895
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR
1896
+ _mm_move_sd(__m128d __a, __m128d __b) {
1842
1897
  __a[0] = __b[0];
1843
1898
  return __a;
1844
1899
  }
@@ -2055,8 +2110,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_add_epi16(__m128i __a,
2055
2110
  /// A 128-bit vector of [4 x i32].
2056
2111
  /// \returns A 128-bit vector of [4 x i32] containing the sums of both
2057
2112
  /// parameters.
2058
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_add_epi32(__m128i __a,
2059
- __m128i __b) {
2113
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
2114
+ _mm_add_epi32(__m128i __a, __m128i __b) {
2060
2115
  return (__m128i)((__v4su)__a + (__v4su)__b);
2061
2116
  }
2062
2117
 
@@ -2072,9 +2127,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_add_epi32(__m128i __a,
2072
2127
  /// \param __b
2073
2128
  /// A 64-bit integer.
2074
2129
  /// \returns A 64-bit integer containing the sum of both parameters.
2075
- static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX _mm_add_si64(__m64 __a,
2076
- __m64 __b) {
2077
- return (__m64)__builtin_ia32_paddq((__v1di)__a, (__v1di)__b);
2130
+ static __inline__ __m64 __DEFAULT_FN_ATTRS _mm_add_si64(__m64 __a, __m64 __b) {
2131
+ return (__m64)(((unsigned long long)__a) + ((unsigned long long)__b));
2078
2132
  }
2079
2133
 
2080
2134
  /// Adds the corresponding elements of two 128-bit vectors of [2 x i64],
@@ -2093,15 +2147,17 @@ static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX _mm_add_si64(__m64 __a,
2093
2147
  /// A 128-bit vector of [2 x i64].
2094
2148
  /// \returns A 128-bit vector of [2 x i64] containing the sums of both
2095
2149
  /// parameters.
2096
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_add_epi64(__m128i __a,
2097
- __m128i __b) {
2150
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
2151
+ _mm_add_epi64(__m128i __a, __m128i __b) {
2098
2152
  return (__m128i)((__v2du)__a + (__v2du)__b);
2099
2153
  }
2100
2154
 
2101
2155
  /// Adds, with saturation, the corresponding elements of two 128-bit
2102
- /// signed [16 x i8] vectors, saving each sum in the corresponding element of
2103
- /// a 128-bit result vector of [16 x i8]. Positive sums greater than 0x7F are
2104
- /// saturated to 0x7F. Negative sums less than 0x80 are saturated to 0x80.
2156
+ /// signed [16 x i8] vectors, saving each sum in the corresponding element
2157
+ /// of a 128-bit result vector of [16 x i8].
2158
+ ///
2159
+ /// Positive sums greater than 0x7F are saturated to 0x7F. Negative sums
2160
+ /// less than 0x80 are saturated to 0x80.
2105
2161
  ///
2106
2162
  /// \headerfile <x86intrin.h>
2107
2163
  ///
@@ -2119,10 +2175,11 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_adds_epi8(__m128i __a,
2119
2175
  }
2120
2176
 
2121
2177
  /// Adds, with saturation, the corresponding elements of two 128-bit
2122
- /// signed [8 x i16] vectors, saving each sum in the corresponding element of
2123
- /// a 128-bit result vector of [8 x i16]. Positive sums greater than 0x7FFF
2124
- /// are saturated to 0x7FFF. Negative sums less than 0x8000 are saturated to
2125
- /// 0x8000.
2178
+ /// signed [8 x i16] vectors, saving each sum in the corresponding element
2179
+ /// of a 128-bit result vector of [8 x i16].
2180
+ ///
2181
+ /// Positive sums greater than 0x7FFF are saturated to 0x7FFF. Negative sums
2182
+ /// less than 0x8000 are saturated to 0x8000.
2126
2183
  ///
2127
2184
  /// \headerfile <x86intrin.h>
2128
2185
  ///
@@ -2141,8 +2198,10 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_adds_epi16(__m128i __a,
2141
2198
 
2142
2199
  /// Adds, with saturation, the corresponding elements of two 128-bit
2143
2200
  /// unsigned [16 x i8] vectors, saving each sum in the corresponding element
2144
- /// of a 128-bit result vector of [16 x i8]. Positive sums greater than 0xFF
2145
- /// are saturated to 0xFF. Negative sums are saturated to 0x00.
2201
+ /// of a 128-bit result vector of [16 x i8].
2202
+ ///
2203
+ /// Positive sums greater than 0xFF are saturated to 0xFF. Negative sums are
2204
+ /// saturated to 0x00.
2146
2205
  ///
2147
2206
  /// \headerfile <x86intrin.h>
2148
2207
  ///
@@ -2161,8 +2220,10 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_adds_epu8(__m128i __a,
2161
2220
 
2162
2221
  /// Adds, with saturation, the corresponding elements of two 128-bit
2163
2222
  /// unsigned [8 x i16] vectors, saving each sum in the corresponding element
2164
- /// of a 128-bit result vector of [8 x i16]. Positive sums greater than
2165
- /// 0xFFFF are saturated to 0xFFFF. Negative sums are saturated to 0x0000.
2223
+ /// of a 128-bit result vector of [8 x i16].
2224
+ ///
2225
+ /// Positive sums greater than 0xFFFF are saturated to 0xFFFF. Negative sums
2226
+ /// are saturated to 0x0000.
2166
2227
  ///
2167
2228
  /// \headerfile <x86intrin.h>
2168
2229
  ///
@@ -2388,9 +2449,9 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_mullo_epi16(__m128i __a,
2388
2449
  /// \param __b
2389
2450
  /// A 64-bit integer containing one of the source operands.
2390
2451
  /// \returns A 64-bit integer vector containing the product of both operands.
2391
- static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX _mm_mul_su32(__m64 __a,
2392
- __m64 __b) {
2393
- return __builtin_ia32_pmuludq((__v2si)__a, (__v2si)__b);
2452
+ static __inline__ __m64 __DEFAULT_FN_ATTRS _mm_mul_su32(__m64 __a, __m64 __b) {
2453
+ return __trunc64(__builtin_ia32_pmuludq128((__v4si)__anyext128(__a),
2454
+ (__v4si)__anyext128(__b)));
2394
2455
  }
2395
2456
 
2396
2457
  /// Multiplies 32-bit unsigned integer values contained in the lower
@@ -2478,8 +2539,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_sub_epi16(__m128i __a,
2478
2539
  /// A 128-bit integer vector containing the subtrahends.
2479
2540
  /// \returns A 128-bit integer vector containing the differences of the values
2480
2541
  /// in the operands.
2481
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_sub_epi32(__m128i __a,
2482
- __m128i __b) {
2542
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
2543
+ _mm_sub_epi32(__m128i __a, __m128i __b) {
2483
2544
  return (__m128i)((__v4su)__a - (__v4su)__b);
2484
2545
  }
2485
2546
 
@@ -2496,9 +2557,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_sub_epi32(__m128i __a,
2496
2557
  /// A 64-bit integer vector containing the subtrahend.
2497
2558
  /// \returns A 64-bit integer vector containing the difference of the values in
2498
2559
  /// the operands.
2499
- static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX _mm_sub_si64(__m64 __a,
2500
- __m64 __b) {
2501
- return (__m64)__builtin_ia32_psubq((__v1di)__a, (__v1di)__b);
2560
+ static __inline__ __m64 __DEFAULT_FN_ATTRS _mm_sub_si64(__m64 __a, __m64 __b) {
2561
+ return (__m64)((unsigned long long)__a - (unsigned long long)__b);
2502
2562
  }
2503
2563
 
2504
2564
  /// Subtracts the corresponding elements of two [2 x i64] vectors.
@@ -2513,15 +2573,17 @@ static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX _mm_sub_si64(__m64 __a,
2513
2573
  /// A 128-bit integer vector containing the subtrahends.
2514
2574
  /// \returns A 128-bit integer vector containing the differences of the values
2515
2575
  /// in the operands.
2516
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_sub_epi64(__m128i __a,
2517
- __m128i __b) {
2576
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
2577
+ _mm_sub_epi64(__m128i __a, __m128i __b) {
2518
2578
  return (__m128i)((__v2du)__a - (__v2du)__b);
2519
2579
  }
2520
2580
 
2521
- /// Subtracts corresponding 8-bit signed integer values in the input and
2522
- /// returns the differences in the corresponding bytes in the destination.
2523
- /// Differences greater than 0x7F are saturated to 0x7F, and differences less
2524
- /// than 0x80 are saturated to 0x80.
2581
+ /// Subtracts, with saturation, corresponding 8-bit signed integer values in
2582
+ /// the input and returns the differences in the corresponding bytes in the
2583
+ /// destination.
2584
+ ///
2585
+ /// Differences greater than 0x7F are saturated to 0x7F, and differences
2586
+ /// less than 0x80 are saturated to 0x80.
2525
2587
  ///
2526
2588
  /// \headerfile <x86intrin.h>
2527
2589
  ///
@@ -2538,8 +2600,10 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_subs_epi8(__m128i __a,
2538
2600
  return (__m128i)__builtin_elementwise_sub_sat((__v16qs)__a, (__v16qs)__b);
2539
2601
  }
2540
2602
 
2541
- /// Subtracts corresponding 16-bit signed integer values in the input and
2542
- /// returns the differences in the corresponding bytes in the destination.
2603
+ /// Subtracts, with saturation, corresponding 16-bit signed integer values in
2604
+ /// the input and returns the differences in the corresponding bytes in the
2605
+ /// destination.
2606
+ ///
2543
2607
  /// Differences greater than 0x7FFF are saturated to 0x7FFF, and values less
2544
2608
  /// than 0x8000 are saturated to 0x8000.
2545
2609
  ///
@@ -2558,9 +2622,11 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_subs_epi16(__m128i __a,
2558
2622
  return (__m128i)__builtin_elementwise_sub_sat((__v8hi)__a, (__v8hi)__b);
2559
2623
  }
2560
2624
 
2561
- /// Subtracts corresponding 8-bit unsigned integer values in the input
2562
- /// and returns the differences in the corresponding bytes in the
2563
- /// destination. Differences less than 0x00 are saturated to 0x00.
2625
+ /// Subtracts, with saturation, corresponding 8-bit unsigned integer values in
2626
+ /// the input and returns the differences in the corresponding bytes in the
2627
+ /// destination.
2628
+ ///
2629
+ /// Differences less than 0x00 are saturated to 0x00.
2564
2630
  ///
2565
2631
  /// \headerfile <x86intrin.h>
2566
2632
  ///
@@ -2577,9 +2643,11 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_subs_epu8(__m128i __a,
2577
2643
  return (__m128i)__builtin_elementwise_sub_sat((__v16qu)__a, (__v16qu)__b);
2578
2644
  }
2579
2645
 
2580
- /// Subtracts corresponding 16-bit unsigned integer values in the input
2581
- /// and returns the differences in the corresponding bytes in the
2582
- /// destination. Differences less than 0x0000 are saturated to 0x0000.
2646
+ /// Subtracts, with saturation, corresponding 16-bit unsigned integer values in
2647
+ /// the input and returns the differences in the corresponding bytes in the
2648
+ /// destination.
2649
+ ///
2650
+ /// Differences less than 0x0000 are saturated to 0x0000.
2583
2651
  ///
2584
2652
  /// \headerfile <x86intrin.h>
2585
2653
  ///
@@ -3008,8 +3076,9 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_srl_epi64(__m128i __a,
3008
3076
  }
3009
3077
 
3010
3078
  /// Compares each of the corresponding 8-bit values of the 128-bit
3011
- /// integer vectors for equality. Each comparison yields 0x0 for false, 0xFF
3012
- /// for true.
3079
+ /// integer vectors for equality.
3080
+ ///
3081
+ /// Each comparison returns 0x0 for false, 0xFF for true.
3013
3082
  ///
3014
3083
  /// \headerfile <x86intrin.h>
3015
3084
  ///
@@ -3026,8 +3095,9 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpeq_epi8(__m128i __a,
3026
3095
  }
3027
3096
 
3028
3097
  /// Compares each of the corresponding 16-bit values of the 128-bit
3029
- /// integer vectors for equality. Each comparison yields 0x0 for false,
3030
- /// 0xFFFF for true.
3098
+ /// integer vectors for equality.
3099
+ ///
3100
+ /// Each comparison returns 0x0 for false, 0xFFFF for true.
3031
3101
  ///
3032
3102
  /// \headerfile <x86intrin.h>
3033
3103
  ///
@@ -3044,8 +3114,9 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpeq_epi16(__m128i __a,
3044
3114
  }
3045
3115
 
3046
3116
  /// Compares each of the corresponding 32-bit values of the 128-bit
3047
- /// integer vectors for equality. Each comparison yields 0x0 for false,
3048
- /// 0xFFFFFFFF for true.
3117
+ /// integer vectors for equality.
3118
+ ///
3119
+ /// Each comparison returns 0x0 for false, 0xFFFFFFFF for true.
3049
3120
  ///
3050
3121
  /// \headerfile <x86intrin.h>
3051
3122
  ///
@@ -3063,8 +3134,9 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpeq_epi32(__m128i __a,
3063
3134
 
3064
3135
  /// Compares each of the corresponding signed 8-bit values of the 128-bit
3065
3136
  /// integer vectors to determine if the values in the first operand are
3066
- /// greater than those in the second operand. Each comparison yields 0x0 for
3067
- /// false, 0xFF for true.
3137
+ /// greater than those in the second operand.
3138
+ ///
3139
+ /// Each comparison returns 0x0 for false, 0xFF for true.
3068
3140
  ///
3069
3141
  /// \headerfile <x86intrin.h>
3070
3142
  ///
@@ -3086,7 +3158,7 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpgt_epi8(__m128i __a,
3086
3158
  /// 128-bit integer vectors to determine if the values in the first operand
3087
3159
  /// are greater than those in the second operand.
3088
3160
  ///
3089
- /// Each comparison yields 0x0 for false, 0xFFFF for true.
3161
+ /// Each comparison returns 0x0 for false, 0xFFFF for true.
3090
3162
  ///
3091
3163
  /// \headerfile <x86intrin.h>
3092
3164
  ///
@@ -3106,7 +3178,7 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpgt_epi16(__m128i __a,
3106
3178
  /// 128-bit integer vectors to determine if the values in the first operand
3107
3179
  /// are greater than those in the second operand.
3108
3180
  ///
3109
- /// Each comparison yields 0x0 for false, 0xFFFFFFFF for true.
3181
+ /// Each comparison returns 0x0 for false, 0xFFFFFFFF for true.
3110
3182
  ///
3111
3183
  /// \headerfile <x86intrin.h>
3112
3184
  ///
@@ -3126,7 +3198,7 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpgt_epi32(__m128i __a,
3126
3198
  /// integer vectors to determine if the values in the first operand are less
3127
3199
  /// than those in the second operand.
3128
3200
  ///
3129
- /// Each comparison yields 0x0 for false, 0xFF for true.
3201
+ /// Each comparison returns 0x0 for false, 0xFF for true.
3130
3202
  ///
3131
3203
  /// \headerfile <x86intrin.h>
3132
3204
  ///
@@ -3146,7 +3218,7 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmplt_epi8(__m128i __a,
3146
3218
  /// 128-bit integer vectors to determine if the values in the first operand
3147
3219
  /// are less than those in the second operand.
3148
3220
  ///
3149
- /// Each comparison yields 0x0 for false, 0xFFFF for true.
3221
+ /// Each comparison returns 0x0 for false, 0xFFFF for true.
3150
3222
  ///
3151
3223
  /// \headerfile <x86intrin.h>
3152
3224
  ///
@@ -3166,7 +3238,7 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmplt_epi16(__m128i __a,
3166
3238
  /// 128-bit integer vectors to determine if the values in the first operand
3167
3239
  /// are less than those in the second operand.
3168
3240
  ///
3169
- /// Each comparison yields 0x0 for false, 0xFFFFFFFF for true.
3241
+ /// Each comparison returns 0x0 for false, 0xFFFFFFFF for true.
3170
3242
  ///
3171
3243
  /// \headerfile <x86intrin.h>
3172
3244
  ///
@@ -3200,14 +3272,18 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmplt_epi32(__m128i __a,
3200
3272
  /// \returns A 128-bit vector of [2 x double] whose lower 64 bits contain the
3201
3273
  /// converted value of the second operand. The upper 64 bits are copied from
3202
3274
  /// the upper 64 bits of the first operand.
3203
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cvtsi64_sd(__m128d __a,
3204
- long long __b) {
3275
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR
3276
+ _mm_cvtsi64_sd(__m128d __a, long long __b) {
3205
3277
  __a[0] = __b;
3206
3278
  return __a;
3207
3279
  }
3208
3280
 
3209
3281
  /// Converts the first (lower) element of a vector of [2 x double] into a
3210
- /// 64-bit signed integer value, according to the current rounding mode.
3282
+ /// 64-bit signed integer value.
3283
+ ///
3284
+ /// If the converted value does not fit in a 64-bit integer, raises a
3285
+ /// floating-point invalid exception. If the exception is masked, returns
3286
+ /// the most negative integer.
3211
3287
  ///
3212
3288
  /// \headerfile <x86intrin.h>
3213
3289
  ///
@@ -3222,7 +3298,11 @@ static __inline__ long long __DEFAULT_FN_ATTRS _mm_cvtsd_si64(__m128d __a) {
3222
3298
  }
3223
3299
 
3224
3300
  /// Converts the first (lower) element of a vector of [2 x double] into a
3225
- /// 64-bit signed integer value, truncating the result when it is inexact.
3301
+ /// 64-bit signed truncated (rounded toward zero) integer value.
3302
+ ///
3303
+ /// If a converted value does not fit in a 64-bit integer, raises a
3304
+ /// floating-point invalid exception. If the exception is masked, returns
3305
+ /// the most negative integer.
3226
3306
  ///
3227
3307
  /// \headerfile <x86intrin.h>
3228
3308
  ///
@@ -3247,12 +3327,17 @@ static __inline__ long long __DEFAULT_FN_ATTRS _mm_cvttsd_si64(__m128d __a) {
3247
3327
  /// \param __a
3248
3328
  /// A 128-bit integer vector.
3249
3329
  /// \returns A 128-bit vector of [4 x float] containing the converted values.
3250
- static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_cvtepi32_ps(__m128i __a) {
3330
+ static __inline__ __m128 __DEFAULT_FN_ATTRS_CONSTEXPR
3331
+ _mm_cvtepi32_ps(__m128i __a) {
3251
3332
  return (__m128) __builtin_convertvector((__v4si)__a, __v4sf);
3252
3333
  }
3253
3334
 
3254
3335
  /// Converts a vector of [4 x float] into a vector of [4 x i32].
3255
3336
  ///
3337
+ /// If a converted value does not fit in a 32-bit integer, raises a
3338
+ /// floating-point invalid exception. If the exception is masked, returns
3339
+ /// the most negative integer.
3340
+ ///
3256
3341
  /// \headerfile <x86intrin.h>
3257
3342
  ///
3258
3343
  /// This intrinsic corresponds to the <c> VCVTPS2DQ / CVTPS2DQ </c> instruction.
@@ -3265,8 +3350,12 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtps_epi32(__m128 __a) {
3265
3350
  return (__m128i)__builtin_ia32_cvtps2dq((__v4sf)__a);
3266
3351
  }
3267
3352
 
3268
- /// Converts a vector of [4 x float] into a vector of [4 x i32],
3269
- /// truncating the result when it is inexact.
3353
+ /// Converts a vector of [4 x float] into four signed truncated (rounded toward
3354
+ /// zero) 32-bit integers, returned in a vector of [4 x i32].
3355
+ ///
3356
+ /// If a converted value does not fit in a 32-bit integer, raises a
3357
+ /// floating-point invalid exception. If the exception is masked, returns
3358
+ /// the most negative integer.
3270
3359
  ///
3271
3360
  /// \headerfile <x86intrin.h>
3272
3361
  ///
@@ -3423,8 +3512,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_undefined_si128(void) {
3423
3512
  /// destination vector of [2 x i64].
3424
3513
  /// \returns An initialized 128-bit vector of [2 x i64] containing the values
3425
3514
  /// provided in the operands.
3426
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set_epi64x(long long __q1,
3427
- long long __q0) {
3515
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3516
+ _mm_set_epi64x(long long __q1, long long __q0) {
3428
3517
  return __extension__(__m128i)(__v2di){__q0, __q1};
3429
3518
  }
3430
3519
 
@@ -3444,9 +3533,9 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set_epi64x(long long __q1,
3444
3533
  /// destination vector of [2 x i64].
3445
3534
  /// \returns An initialized 128-bit vector of [2 x i64] containing the values
3446
3535
  /// provided in the operands.
3447
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set_epi64(__m64 __q1,
3448
- __m64 __q0) {
3449
- return _mm_set_epi64x((long long)__q1, (long long)__q0);
3536
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3537
+ _mm_set_epi64(__m64 __q1, __m64 __q0) {
3538
+ return _mm_set_epi64x((long long)__q1[0], (long long)__q0[0]);
3450
3539
  }
3451
3540
 
3452
3541
  /// Initializes the 32-bit values in a 128-bit vector of [4 x i32] with
@@ -3471,8 +3560,10 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set_epi64(__m64 __q1,
3471
3560
  /// vector.
3472
3561
  /// \returns An initialized 128-bit vector of [4 x i32] containing the values
3473
3562
  /// provided in the operands.
3474
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set_epi32(int __i3, int __i2,
3475
- int __i1, int __i0) {
3563
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR _mm_set_epi32(int __i3,
3564
+ int __i2,
3565
+ int __i1,
3566
+ int __i0) {
3476
3567
  return __extension__(__m128i)(__v4si){__i0, __i1, __i2, __i3};
3477
3568
  }
3478
3569
 
@@ -3510,7 +3601,7 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set_epi32(int __i3, int __i2,
3510
3601
  /// vector.
3511
3602
  /// \returns An initialized 128-bit vector of [8 x i16] containing the values
3512
3603
  /// provided in the operands.
3513
- static __inline__ __m128i __DEFAULT_FN_ATTRS
3604
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3514
3605
  _mm_set_epi16(short __w7, short __w6, short __w5, short __w4, short __w3,
3515
3606
  short __w2, short __w1, short __w0) {
3516
3607
  return __extension__(__m128i)(__v8hi){__w0, __w1, __w2, __w3,
@@ -3559,7 +3650,7 @@ _mm_set_epi16(short __w7, short __w6, short __w5, short __w4, short __w3,
3559
3650
  /// Initializes bits [7:0] of the destination vector.
3560
3651
  /// \returns An initialized 128-bit vector of [16 x i8] containing the values
3561
3652
  /// provided in the operands.
3562
- static __inline__ __m128i __DEFAULT_FN_ATTRS
3653
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3563
3654
  _mm_set_epi8(char __b15, char __b14, char __b13, char __b12, char __b11,
3564
3655
  char __b10, char __b9, char __b8, char __b7, char __b6, char __b5,
3565
3656
  char __b4, char __b3, char __b2, char __b1, char __b0) {
@@ -3581,7 +3672,8 @@ _mm_set_epi8(char __b15, char __b14, char __b13, char __b12, char __b11,
3581
3672
  /// vector.
3582
3673
  /// \returns An initialized 128-bit integer vector of [2 x i64] with both
3583
3674
  /// elements containing the value provided in the operand.
3584
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set1_epi64x(long long __q) {
3675
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3676
+ _mm_set1_epi64x(long long __q) {
3585
3677
  return _mm_set_epi64x(__q, __q);
3586
3678
  }
3587
3679
 
@@ -3598,7 +3690,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set1_epi64x(long long __q) {
3598
3690
  /// vector.
3599
3691
  /// \returns An initialized 128-bit vector of [2 x i64] with all elements
3600
3692
  /// containing the value provided in the operand.
3601
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set1_epi64(__m64 __q) {
3693
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3694
+ _mm_set1_epi64(__m64 __q) {
3602
3695
  return _mm_set_epi64(__q, __q);
3603
3696
  }
3604
3697
 
@@ -3615,7 +3708,7 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set1_epi64(__m64 __q) {
3615
3708
  /// vector.
3616
3709
  /// \returns An initialized 128-bit vector of [4 x i32] with all elements
3617
3710
  /// containing the value provided in the operand.
3618
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set1_epi32(int __i) {
3711
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR _mm_set1_epi32(int __i) {
3619
3712
  return _mm_set_epi32(__i, __i, __i, __i);
3620
3713
  }
3621
3714
 
@@ -3632,7 +3725,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set1_epi32(int __i) {
3632
3725
  /// vector.
3633
3726
  /// \returns An initialized 128-bit vector of [8 x i16] with all elements
3634
3727
  /// containing the value provided in the operand.
3635
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set1_epi16(short __w) {
3728
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3729
+ _mm_set1_epi16(short __w) {
3636
3730
  return _mm_set_epi16(__w, __w, __w, __w, __w, __w, __w, __w);
3637
3731
  }
3638
3732
 
@@ -3649,7 +3743,7 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set1_epi16(short __w) {
3649
3743
  /// vector.
3650
3744
  /// \returns An initialized 128-bit vector of [16 x i8] with all elements
3651
3745
  /// containing the value provided in the operand.
3652
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set1_epi8(char __b) {
3746
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR _mm_set1_epi8(char __b) {
3653
3747
  return _mm_set_epi8(__b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b,
3654
3748
  __b, __b, __b, __b, __b);
3655
3749
  }
@@ -3668,8 +3762,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set1_epi8(char __b) {
3668
3762
  /// A 64-bit integral value used to initialize the upper 64 bits of the
3669
3763
  /// result.
3670
3764
  /// \returns An initialized 128-bit integer vector.
3671
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_setr_epi64(__m64 __q0,
3672
- __m64 __q1) {
3765
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3766
+ _mm_setr_epi64(__m64 __q0, __m64 __q1) {
3673
3767
  return _mm_set_epi64(__q1, __q0);
3674
3768
  }
3675
3769
 
@@ -3690,9 +3784,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_setr_epi64(__m64 __q0,
3690
3784
  /// \param __i3
3691
3785
  /// A 32-bit integral value used to initialize bits [127:96] of the result.
3692
3786
  /// \returns An initialized 128-bit integer vector.
3693
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_setr_epi32(int __i0, int __i1,
3694
- int __i2,
3695
- int __i3) {
3787
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3788
+ _mm_setr_epi32(int __i0, int __i1, int __i2, int __i3) {
3696
3789
  return _mm_set_epi32(__i3, __i2, __i1, __i0);
3697
3790
  }
3698
3791
 
@@ -3721,7 +3814,7 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_setr_epi32(int __i0, int __i1,
3721
3814
  /// \param __w7
3722
3815
  /// A 16-bit integral value used to initialize bits [127:112] of the result.
3723
3816
  /// \returns An initialized 128-bit integer vector.
3724
- static __inline__ __m128i __DEFAULT_FN_ATTRS
3817
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3725
3818
  _mm_setr_epi16(short __w0, short __w1, short __w2, short __w3, short __w4,
3726
3819
  short __w5, short __w6, short __w7) {
3727
3820
  return _mm_set_epi16(__w7, __w6, __w5, __w4, __w3, __w2, __w1, __w0);
@@ -3768,7 +3861,7 @@ _mm_setr_epi16(short __w0, short __w1, short __w2, short __w3, short __w4,
3768
3861
  /// \param __b15
3769
3862
  /// An 8-bit integral value used to initialize bits [127:120] of the result.
3770
3863
  /// \returns An initialized 128-bit integer vector.
3771
- static __inline__ __m128i __DEFAULT_FN_ATTRS
3864
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3772
3865
  _mm_setr_epi8(char __b0, char __b1, char __b2, char __b3, char __b4, char __b5,
3773
3866
  char __b6, char __b7, char __b8, char __b9, char __b10,
3774
3867
  char __b11, char __b12, char __b13, char __b14, char __b15) {
@@ -3784,7 +3877,7 @@ _mm_setr_epi8(char __b0, char __b1, char __b2, char __b3, char __b4, char __b5,
3784
3877
  ///
3785
3878
  /// \returns An initialized 128-bit integer vector with all elements set to
3786
3879
  /// zero.
3787
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_setzero_si128(void) {
3880
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR _mm_setzero_si128(void) {
3788
3881
  return __extension__(__m128i)(__v2di){0LL, 0LL};
3789
3882
  }
3790
3883
 
@@ -4050,26 +4143,22 @@ void _mm_mfence(void);
4050
4143
  } // extern "C"
4051
4144
  #endif
4052
4145
 
4053
- /// Converts 16-bit signed integers from both 128-bit integer vector
4054
- /// operands into 8-bit signed integers, and packs the results into the
4055
- /// destination. Positive values greater than 0x7F are saturated to 0x7F.
4056
- /// Negative values less than 0x80 are saturated to 0x80.
4146
+ /// Converts, with saturation, 16-bit signed integers from both 128-bit integer
4147
+ /// vector operands into 8-bit signed integers, and packs the results into
4148
+ /// the destination.
4149
+ ///
4150
+ /// Positive values greater than 0x7F are saturated to 0x7F. Negative values
4151
+ /// less than 0x80 are saturated to 0x80.
4057
4152
  ///
4058
4153
  /// \headerfile <x86intrin.h>
4059
4154
  ///
4060
4155
  /// This intrinsic corresponds to the <c> VPACKSSWB / PACKSSWB </c> instruction.
4061
4156
  ///
4062
4157
  /// \param __a
4063
- /// A 128-bit integer vector of [8 x i16]. Each 16-bit element is treated as
4064
- /// a signed integer and is converted to a 8-bit signed integer with
4065
- /// saturation. Values greater than 0x7F are saturated to 0x7F. Values less
4066
- /// than 0x80 are saturated to 0x80. The converted [8 x i8] values are
4158
+ /// A 128-bit integer vector of [8 x i16]. The converted [8 x i8] values are
4067
4159
  /// written to the lower 64 bits of the result.
4068
4160
  /// \param __b
4069
- /// A 128-bit integer vector of [8 x i16]. Each 16-bit element is treated as
4070
- /// a signed integer and is converted to a 8-bit signed integer with
4071
- /// saturation. Values greater than 0x7F are saturated to 0x7F. Values less
4072
- /// than 0x80 are saturated to 0x80. The converted [8 x i8] values are
4161
+ /// A 128-bit integer vector of [8 x i16]. The converted [8 x i8] values are
4073
4162
  /// written to the higher 64 bits of the result.
4074
4163
  /// \returns A 128-bit vector of [16 x i8] containing the converted values.
4075
4164
  static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_packs_epi16(__m128i __a,
@@ -4077,26 +4166,22 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_packs_epi16(__m128i __a,
4077
4166
  return (__m128i)__builtin_ia32_packsswb128((__v8hi)__a, (__v8hi)__b);
4078
4167
  }
4079
4168
 
4080
- /// Converts 32-bit signed integers from both 128-bit integer vector
4081
- /// operands into 16-bit signed integers, and packs the results into the
4082
- /// destination. Positive values greater than 0x7FFF are saturated to 0x7FFF.
4083
- /// Negative values less than 0x8000 are saturated to 0x8000.
4169
+ /// Converts, with saturation, 32-bit signed integers from both 128-bit integer
4170
+ /// vector operands into 16-bit signed integers, and packs the results into
4171
+ /// the destination.
4172
+ ///
4173
+ /// Positive values greater than 0x7FFF are saturated to 0x7FFF. Negative
4174
+ /// values less than 0x8000 are saturated to 0x8000.
4084
4175
  ///
4085
4176
  /// \headerfile <x86intrin.h>
4086
4177
  ///
4087
4178
  /// This intrinsic corresponds to the <c> VPACKSSDW / PACKSSDW </c> instruction.
4088
4179
  ///
4089
4180
  /// \param __a
4090
- /// A 128-bit integer vector of [4 x i32]. Each 32-bit element is treated as
4091
- /// a signed integer and is converted to a 16-bit signed integer with
4092
- /// saturation. Values greater than 0x7FFF are saturated to 0x7FFF. Values
4093
- /// less than 0x8000 are saturated to 0x8000. The converted [4 x i16] values
4181
+ /// A 128-bit integer vector of [4 x i32]. The converted [4 x i16] values
4094
4182
  /// are written to the lower 64 bits of the result.
4095
4183
  /// \param __b
4096
- /// A 128-bit integer vector of [4 x i32]. Each 32-bit element is treated as
4097
- /// a signed integer and is converted to a 16-bit signed integer with
4098
- /// saturation. Values greater than 0x7FFF are saturated to 0x7FFF. Values
4099
- /// less than 0x8000 are saturated to 0x8000. The converted [4 x i16] values
4184
+ /// A 128-bit integer vector of [4 x i32]. The converted [4 x i16] values
4100
4185
  /// are written to the higher 64 bits of the result.
4101
4186
  /// \returns A 128-bit vector of [8 x i16] containing the converted values.
4102
4187
  static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_packs_epi32(__m128i __a,
@@ -4104,26 +4189,22 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_packs_epi32(__m128i __a,
4104
4189
  return (__m128i)__builtin_ia32_packssdw128((__v4si)__a, (__v4si)__b);
4105
4190
  }
4106
4191
 
4107
- /// Converts 16-bit signed integers from both 128-bit integer vector
4108
- /// operands into 8-bit unsigned integers, and packs the results into the
4109
- /// destination. Values greater than 0xFF are saturated to 0xFF. Values less
4110
- /// than 0x00 are saturated to 0x00.
4192
+ /// Converts, with saturation, 16-bit signed integers from both 128-bit integer
4193
+ /// vector operands into 8-bit unsigned integers, and packs the results into
4194
+ /// the destination.
4195
+ ///
4196
+ /// Values greater than 0xFF are saturated to 0xFF. Values less than 0x00
4197
+ /// are saturated to 0x00.
4111
4198
  ///
4112
4199
  /// \headerfile <x86intrin.h>
4113
4200
  ///
4114
4201
  /// This intrinsic corresponds to the <c> VPACKUSWB / PACKUSWB </c> instruction.
4115
4202
  ///
4116
4203
  /// \param __a
4117
- /// A 128-bit integer vector of [8 x i16]. Each 16-bit element is treated as
4118
- /// a signed integer and is converted to an 8-bit unsigned integer with
4119
- /// saturation. Values greater than 0xFF are saturated to 0xFF. Values less
4120
- /// than 0x00 are saturated to 0x00. The converted [8 x i8] values are
4204
+ /// A 128-bit integer vector of [8 x i16]. The converted [8 x i8] values are
4121
4205
  /// written to the lower 64 bits of the result.
4122
4206
  /// \param __b
4123
- /// A 128-bit integer vector of [8 x i16]. Each 16-bit element is treated as
4124
- /// a signed integer and is converted to an 8-bit unsigned integer with
4125
- /// saturation. Values greater than 0xFF are saturated to 0xFF. Values less
4126
- /// than 0x00 are saturated to 0x00. The converted [8 x i8] values are
4207
+ /// A 128-bit integer vector of [8 x i16]. The converted [8 x i8] values are
4127
4208
  /// written to the higher 64 bits of the result.
4128
4209
  /// \returns A 128-bit vector of [16 x i8] containing the converted values.
4129
4210
  static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_packus_epi16(__m128i __a,
@@ -4529,7 +4610,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_unpacklo_epi64(__m128i __a,
4529
4610
  /// A 128-bit integer vector operand. The lower 64 bits are moved to the
4530
4611
  /// destination.
4531
4612
  /// \returns A 64-bit integer containing the lower 64 bits of the parameter.
4532
- static __inline__ __m64 __DEFAULT_FN_ATTRS _mm_movepi64_pi64(__m128i __a) {
4613
+ static __inline__ __m64 __DEFAULT_FN_ATTRS_CONSTEXPR
4614
+ _mm_movepi64_pi64(__m128i __a) {
4533
4615
  return (__m64)__a[0];
4534
4616
  }
4535
4617
 
@@ -4544,8 +4626,9 @@ static __inline__ __m64 __DEFAULT_FN_ATTRS _mm_movepi64_pi64(__m128i __a) {
4544
4626
  /// A 64-bit value.
4545
4627
  /// \returns A 128-bit integer vector. The lower 64 bits contain the value from
4546
4628
  /// the operand. The upper 64 bits are assigned zeros.
4547
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_movpi64_epi64(__m64 __a) {
4548
- return __extension__(__m128i)(__v2di){(long long)__a, 0};
4629
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
4630
+ _mm_movpi64_epi64(__m64 __a) {
4631
+ return __builtin_shufflevector((__v1di)__a, _mm_setzero_si64(), 0, 1);
4549
4632
  }
4550
4633
 
4551
4634
  /// Moves the lower 64 bits of a 128-bit integer vector to a 128-bit
@@ -4560,7 +4643,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_movpi64_epi64(__m64 __a) {
4560
4643
  /// destination.
4561
4644
  /// \returns A 128-bit integer vector. The lower 64 bits contain the value from
4562
4645
  /// the operand. The upper 64 bits are assigned zeros.
4563
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_move_epi64(__m128i __a) {
4646
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
4647
+ _mm_move_epi64(__m128i __a) {
4564
4648
  return __builtin_shufflevector((__v2di)__a, _mm_setzero_si128(), 0, 2);
4565
4649
  }
4566
4650
 
@@ -4579,8 +4663,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_move_epi64(__m128i __a) {
4579
4663
  /// A 128-bit vector of [2 x double]. \n
4580
4664
  /// Bits [127:64] are written to bits [127:64] of the destination.
4581
4665
  /// \returns A 128-bit vector of [2 x double] containing the interleaved values.
4582
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_unpackhi_pd(__m128d __a,
4583
- __m128d __b) {
4666
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR
4667
+ _mm_unpackhi_pd(__m128d __a, __m128d __b) {
4584
4668
  return __builtin_shufflevector((__v2df)__a, (__v2df)__b, 1, 2 + 1);
4585
4669
  }
4586
4670
 
@@ -4599,8 +4683,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_unpackhi_pd(__m128d __a,
4599
4683
  /// A 128-bit vector of [2 x double]. \n
4600
4684
  /// Bits [63:0] are written to bits [127:64] of the destination.
4601
4685
  /// \returns A 128-bit vector of [2 x double] containing the interleaved values.
4602
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_unpacklo_pd(__m128d __a,
4603
- __m128d __b) {
4686
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR
4687
+ _mm_unpacklo_pd(__m128d __a, __m128d __b) {
4604
4688
  return __builtin_shufflevector((__v2df)__a, (__v2df)__b, 0, 2 + 0);
4605
4689
  }
4606
4690
 
@@ -4663,7 +4747,8 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_movemask_pd(__m128d __a) {
4663
4747
  /// A 128-bit floating-point vector of [2 x double].
4664
4748
  /// \returns A 128-bit floating-point vector of [4 x float] containing the same
4665
4749
  /// bitwise pattern as the parameter.
4666
- static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_castpd_ps(__m128d __a) {
4750
+ static __inline__ __m128 __DEFAULT_FN_ATTRS_CONSTEXPR
4751
+ _mm_castpd_ps(__m128d __a) {
4667
4752
  return (__m128)__a;
4668
4753
  }
4669
4754
 
@@ -4678,7 +4763,8 @@ static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_castpd_ps(__m128d __a) {
4678
4763
  /// A 128-bit floating-point vector of [2 x double].
4679
4764
  /// \returns A 128-bit integer vector containing the same bitwise pattern as the
4680
4765
  /// parameter.
4681
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_castpd_si128(__m128d __a) {
4766
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
4767
+ _mm_castpd_si128(__m128d __a) {
4682
4768
  return (__m128i)__a;
4683
4769
  }
4684
4770
 
@@ -4693,7 +4779,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_castpd_si128(__m128d __a) {
4693
4779
  /// A 128-bit floating-point vector of [4 x float].
4694
4780
  /// \returns A 128-bit floating-point vector of [2 x double] containing the same
4695
4781
  /// bitwise pattern as the parameter.
4696
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_castps_pd(__m128 __a) {
4782
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR
4783
+ _mm_castps_pd(__m128 __a) {
4697
4784
  return (__m128d)__a;
4698
4785
  }
4699
4786
 
@@ -4708,7 +4795,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_castps_pd(__m128 __a) {
4708
4795
  /// A 128-bit floating-point vector of [4 x float].
4709
4796
  /// \returns A 128-bit integer vector containing the same bitwise pattern as the
4710
4797
  /// parameter.
4711
- static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_castps_si128(__m128 __a) {
4798
+ static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
4799
+ _mm_castps_si128(__m128 __a) {
4712
4800
  return (__m128i)__a;
4713
4801
  }
4714
4802
 
@@ -4723,7 +4811,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_castps_si128(__m128 __a) {
4723
4811
  /// A 128-bit integer vector.
4724
4812
  /// \returns A 128-bit floating-point vector of [4 x float] containing the same
4725
4813
  /// bitwise pattern as the parameter.
4726
- static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_castsi128_ps(__m128i __a) {
4814
+ static __inline__ __m128 __DEFAULT_FN_ATTRS_CONSTEXPR
4815
+ _mm_castsi128_ps(__m128i __a) {
4727
4816
  return (__m128)__a;
4728
4817
  }
4729
4818
 
@@ -4738,10 +4827,83 @@ static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_castsi128_ps(__m128i __a) {
4738
4827
  /// A 128-bit integer vector.
4739
4828
  /// \returns A 128-bit floating-point vector of [2 x double] containing the same
4740
4829
  /// bitwise pattern as the parameter.
4741
- static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_castsi128_pd(__m128i __a) {
4830
+ static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR
4831
+ _mm_castsi128_pd(__m128i __a) {
4742
4832
  return (__m128d)__a;
4743
4833
  }
4744
4834
 
4835
+ /// Compares each of the corresponding double-precision values of two
4836
+ /// 128-bit vectors of [2 x double], using the operation specified by the
4837
+ /// immediate integer operand.
4838
+ ///
4839
+ /// Each comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
4840
+ /// If either value in a comparison is NaN, comparisons that are ordered
4841
+ /// return false, and comparisons that are unordered return true.
4842
+ ///
4843
+ /// \headerfile <x86intrin.h>
4844
+ ///
4845
+ /// \code
4846
+ /// __m128d _mm_cmp_pd(__m128d a, __m128d b, const int c);
4847
+ /// \endcode
4848
+ ///
4849
+ /// This intrinsic corresponds to the <c> (V)CMPPD </c> instruction.
4850
+ ///
4851
+ /// \param a
4852
+ /// A 128-bit vector of [2 x double].
4853
+ /// \param b
4854
+ /// A 128-bit vector of [2 x double].
4855
+ /// \param c
4856
+ /// An immediate integer operand, with bits [4:0] specifying which comparison
4857
+ /// operation to use: \n
4858
+ /// 0x00: Equal (ordered, non-signaling) \n
4859
+ /// 0x01: Less-than (ordered, signaling) \n
4860
+ /// 0x02: Less-than-or-equal (ordered, signaling) \n
4861
+ /// 0x03: Unordered (non-signaling) \n
4862
+ /// 0x04: Not-equal (unordered, non-signaling) \n
4863
+ /// 0x05: Not-less-than (unordered, signaling) \n
4864
+ /// 0x06: Not-less-than-or-equal (unordered, signaling) \n
4865
+ /// 0x07: Ordered (non-signaling) \n
4866
+ /// \returns A 128-bit vector of [2 x double] containing the comparison results.
4867
+ #define _mm_cmp_pd(a, b, c) \
4868
+ ((__m128d)__builtin_ia32_cmppd((__v2df)(__m128d)(a), (__v2df)(__m128d)(b), \
4869
+ (c)))
4870
+
4871
+ /// Compares each of the corresponding scalar double-precision values of
4872
+ /// two 128-bit vectors of [2 x double], using the operation specified by the
4873
+ /// immediate integer operand.
4874
+ ///
4875
+ /// Each comparison returns 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
4876
+ /// If either value in a comparison is NaN, comparisons that are ordered
4877
+ /// return false, and comparisons that are unordered return true.
4878
+ ///
4879
+ /// \headerfile <x86intrin.h>
4880
+ ///
4881
+ /// \code
4882
+ /// __m128d _mm_cmp_sd(__m128d a, __m128d b, const int c);
4883
+ /// \endcode
4884
+ ///
4885
+ /// This intrinsic corresponds to the <c> (V)CMPSD </c> instruction.
4886
+ ///
4887
+ /// \param a
4888
+ /// A 128-bit vector of [2 x double].
4889
+ /// \param b
4890
+ /// A 128-bit vector of [2 x double].
4891
+ /// \param c
4892
+ /// An immediate integer operand, with bits [4:0] specifying which comparison
4893
+ /// operation to use: \n
4894
+ /// 0x00: Equal (ordered, non-signaling) \n
4895
+ /// 0x01: Less-than (ordered, signaling) \n
4896
+ /// 0x02: Less-than-or-equal (ordered, signaling) \n
4897
+ /// 0x03: Unordered (non-signaling) \n
4898
+ /// 0x04: Not-equal (unordered, non-signaling) \n
4899
+ /// 0x05: Not-less-than (unordered, signaling) \n
4900
+ /// 0x06: Not-less-than-or-equal (unordered, signaling) \n
4901
+ /// 0x07: Ordered (non-signaling) \n
4902
+ /// \returns A 128-bit vector of [2 x double] containing the comparison results.
4903
+ #define _mm_cmp_sd(a, b, c) \
4904
+ ((__m128d)__builtin_ia32_cmpsd((__v2df)(__m128d)(a), (__v2df)(__m128d)(b), \
4905
+ (c)))
4906
+
4745
4907
  #if defined(__cplusplus)
4746
4908
  extern "C" {
4747
4909
  #endif
@@ -4758,8 +4920,11 @@ void _mm_pause(void);
4758
4920
  #if defined(__cplusplus)
4759
4921
  } // extern "C"
4760
4922
  #endif
4923
+
4924
+ #undef __anyext128
4925
+ #undef __trunc64
4761
4926
  #undef __DEFAULT_FN_ATTRS
4762
- #undef __DEFAULT_FN_ATTRS_MMX
4927
+ #undef __DEFAULT_FN_ATTRS_CONSTEXPR
4763
4928
 
4764
4929
  #define _MM_SHUFFLE2(x, y) (((x) << 1) | (y))
4765
4930