@zigc/lib 0.17.0-dev.135 → 0.17.0-dev.215

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 (673) hide show
  1. package/c/stdlib.zig +32 -22
  2. package/compiler/aro/aro/Compilation.zig +0 -3
  3. package/compiler/translate-c/ast.zig +5 -2
  4. package/compiler_rt/arm.zig +3 -3
  5. package/compiler_rt/trunctfhf2.zig +3 -0
  6. package/compiler_rt.zig +1 -22
  7. package/docs/wasm/markdown/Parser.zig +5 -9
  8. package/include/__clang_spirv_builtins.h +12 -12
  9. package/include/__float_float.h +176 -0
  10. package/include/__float_header_macro.h +12 -0
  11. package/include/__float_infinity_nan.h +20 -0
  12. package/include/amo.h +131 -0
  13. package/include/amxavx512intrin.h +215 -1
  14. package/include/amxintrin.h +0 -2
  15. package/include/arm_acle.h +37 -27
  16. package/include/arm_neon.h +218 -82
  17. package/include/arm_sme.h +8 -8
  18. package/include/arm_sve.h +4162 -3782
  19. package/include/avx10_2_512bf16intrin.h +19 -12
  20. package/include/avx10_2_512convertintrin.h +1 -1
  21. package/include/avx10_2_512niintrin.h +31 -31
  22. package/include/avx10_2_512satcvtdsintrin.h +1 -1
  23. package/include/avx10_2bf16intrin.h +54 -45
  24. package/include/avx10_2convertintrin.h +2 -2
  25. package/include/avx10_2copyintrin.h +1 -1
  26. package/include/avx10_2niintrin.h +14 -14
  27. package/include/avx10_2satcvtdsintrin.h +2 -2
  28. package/include/avx2intrin.h +275 -377
  29. package/include/avx512bf16intrin.h +25 -16
  30. package/include/avx512bitalgintrin.h +19 -30
  31. package/include/avx512bwintrin.h +386 -505
  32. package/include/avx512cdintrin.h +42 -55
  33. package/include/avx512dqintrin.h +132 -161
  34. package/include/avx512fintrin.h +1015 -1424
  35. package/include/avx512fp16intrin.h +112 -110
  36. package/include/avx512ifmaintrin.h +32 -34
  37. package/include/avx512ifmavlintrin.h +73 -46
  38. package/include/avx512vbmi2intrin.h +43 -32
  39. package/include/avx512vbmiintrin.h +19 -27
  40. package/include/avx512vbmivlintrin.h +35 -49
  41. package/include/avx512vlbf16intrin.h +32 -22
  42. package/include/avx512vlbitalgintrin.h +37 -53
  43. package/include/avx512vlbwintrin.h +470 -573
  44. package/include/avx512vlcdintrin.h +74 -102
  45. package/include/avx512vldqintrin.h +110 -127
  46. package/include/avx512vlfp16intrin.h +130 -111
  47. package/include/avx512vlintrin.h +945 -1299
  48. package/include/avx512vlvbmi2intrin.h +78 -63
  49. package/include/avx512vlvnniintrin.h +21 -18
  50. package/include/avx512vlvp2intersectintrin.h +2 -2
  51. package/include/avx512vnniintrin.h +10 -10
  52. package/include/avx512vp2intersectintrin.h +1 -2
  53. package/include/avx512vpopcntdqintrin.h +8 -10
  54. package/include/avx512vpopcntdqvlintrin.h +17 -15
  55. package/include/avxifmaintrin.h +16 -0
  56. package/include/avxintrin.h +165 -241
  57. package/include/avxvnniint16intrin.h +118 -99
  58. package/include/avxvnniint8intrin.h +56 -32
  59. package/include/avxvnniintrin.h +16 -8
  60. package/include/cpuid.h +101 -4
  61. package/include/emmintrin.h +168 -168
  62. package/include/f16cintrin.h +23 -9
  63. package/include/float.h +16 -155
  64. package/include/fma4intrin.h +98 -96
  65. package/include/fmaintrin.h +96 -66
  66. package/include/gfniintrin.h +21 -16
  67. package/include/hexagon_types.h +23 -20
  68. package/include/hvx_hexagon_protos.h +649 -860
  69. package/include/immintrin.h +0 -12
  70. package/include/intrin.h +4 -0
  71. package/include/lasxintrin.h +113 -0
  72. package/include/llvm_libc_wrappers/assert.h +3 -5
  73. package/include/llvm_libc_wrappers/ctype.h +3 -115
  74. package/include/llvm_libc_wrappers/inttypes.h +3 -5
  75. package/include/llvm_libc_wrappers/stdio.h +10 -38
  76. package/include/llvm_libc_wrappers/stdlib.h +3 -24
  77. package/include/llvm_libc_wrappers/string.h +2 -70
  78. package/include/llvm_libc_wrappers/time.h +4 -10
  79. package/include/mmintrin.h +188 -257
  80. package/include/module.modulemap +23 -4
  81. package/include/movrs_avx10_2_512intrin.h +2 -2
  82. package/include/movrs_avx10_2intrin.h +4 -4
  83. package/include/pmmintrin.h +12 -24
  84. package/include/ptrauth.h +16 -2
  85. package/include/riscv_mips.h +34 -0
  86. package/include/riscv_nds.h +89 -0
  87. package/include/sifive_vector.h +58 -2
  88. package/include/sm4evexintrin.h +2 -2
  89. package/include/smmintrin.h +77 -59
  90. package/include/spirvintrin.h +194 -0
  91. package/include/stddefer.h +19 -0
  92. package/include/tmmintrin.h +116 -147
  93. package/include/vaesintrin.h +1 -2
  94. package/include/xmmintrin.h +44 -70
  95. package/include/xopintrin.h +20 -10
  96. package/libcxx/include/__algorithm/all_of.h +11 -5
  97. package/libcxx/include/__algorithm/comp.h +4 -0
  98. package/libcxx/include/__algorithm/copy.h +28 -147
  99. package/libcxx/include/__algorithm/copy_backward.h +9 -24
  100. package/libcxx/include/__algorithm/copy_n.h +50 -16
  101. package/libcxx/include/__algorithm/count.h +2 -2
  102. package/libcxx/include/__algorithm/equal.h +43 -55
  103. package/libcxx/include/__algorithm/fill.h +26 -8
  104. package/libcxx/include/__algorithm/fill_n.h +32 -46
  105. package/libcxx/include/__algorithm/find.h +96 -39
  106. package/libcxx/include/__algorithm/find_end.h +105 -0
  107. package/libcxx/include/__algorithm/for_each.h +18 -24
  108. package/libcxx/include/__algorithm/for_each_n.h +20 -47
  109. package/libcxx/include/__algorithm/for_each_n_segment.h +1 -1
  110. package/libcxx/include/__algorithm/for_each_segment.h +26 -0
  111. package/libcxx/include/__algorithm/generate.h +4 -2
  112. package/libcxx/include/__algorithm/generate_n.h +19 -6
  113. package/libcxx/include/__algorithm/is_permutation.h +4 -4
  114. package/libcxx/include/__algorithm/iterator_operations.h +3 -0
  115. package/libcxx/include/__algorithm/lexicographical_compare.h +2 -2
  116. package/libcxx/include/__algorithm/lexicographical_compare_three_way.h +6 -6
  117. package/libcxx/include/__algorithm/make_heap.h +16 -4
  118. package/libcxx/include/__algorithm/mismatch.h +2 -2
  119. package/libcxx/include/__algorithm/move.h +8 -19
  120. package/libcxx/include/__algorithm/move_backward.h +9 -24
  121. package/libcxx/include/__algorithm/none_of.h +4 -4
  122. package/libcxx/include/__algorithm/partial_sort.h +1 -1
  123. package/libcxx/include/__algorithm/partial_sort_copy.h +1 -1
  124. package/libcxx/include/__algorithm/pstl.h +9 -9
  125. package/libcxx/include/__algorithm/radix_sort.h +27 -25
  126. package/libcxx/include/__algorithm/ranges_copy_n.h +3 -26
  127. package/libcxx/include/__algorithm/ranges_equal.h +17 -26
  128. package/libcxx/include/__algorithm/ranges_fill.h +7 -6
  129. package/libcxx/include/__algorithm/ranges_for_each.h +9 -1
  130. package/libcxx/include/__algorithm/ranges_generate_n.h +2 -6
  131. package/libcxx/include/__algorithm/ranges_search_n.h +2 -2
  132. package/libcxx/include/__algorithm/rotate.h +27 -44
  133. package/libcxx/include/__algorithm/search_n.h +49 -37
  134. package/libcxx/include/__algorithm/sift_down.h +19 -18
  135. package/libcxx/include/__algorithm/simd_utils.h +33 -4
  136. package/libcxx/include/__algorithm/specialized_algorithms.h +54 -0
  137. package/libcxx/include/__algorithm/stable_sort.h +1 -1
  138. package/libcxx/include/__assertion_handler +31 -4
  139. package/libcxx/include/__atomic/atomic.h +36 -60
  140. package/libcxx/include/__atomic/atomic_flag.h +19 -37
  141. package/libcxx/include/__atomic/atomic_ref.h +29 -12
  142. package/libcxx/include/__atomic/atomic_sync.h +127 -55
  143. package/libcxx/include/__atomic/atomic_sync_timed.h +144 -0
  144. package/libcxx/include/__atomic/atomic_waitable_traits.h +103 -0
  145. package/libcxx/include/__atomic/contention_t.h +27 -3
  146. package/libcxx/include/__atomic/floating_point_helper.h +55 -0
  147. package/libcxx/include/__bit/countl.h +1 -2
  148. package/libcxx/include/__bit/countr.h +1 -2
  149. package/libcxx/include/__bit/has_single_bit.h +1 -1
  150. package/libcxx/include/__bit/popcount.h +0 -1
  151. package/libcxx/include/__bit/rotate.h +15 -26
  152. package/libcxx/include/__bit_reference +207 -18
  153. package/libcxx/include/__charconv/from_chars_integral.h +1 -1
  154. package/libcxx/include/__charconv/from_chars_result.h +1 -1
  155. package/libcxx/include/__charconv/to_chars_integral.h +1 -0
  156. package/libcxx/include/__charconv/to_chars_result.h +1 -1
  157. package/libcxx/include/__charconv/traits.h +3 -24
  158. package/libcxx/include/__chrono/day.h +11 -0
  159. package/libcxx/include/__chrono/duration.h +58 -33
  160. package/libcxx/include/__chrono/file_clock.h +4 -2
  161. package/libcxx/include/__chrono/is_clock.h +72 -0
  162. package/libcxx/include/__chrono/leap_second.h +13 -0
  163. package/libcxx/include/__chrono/month.h +13 -0
  164. package/libcxx/include/__chrono/month_weekday.h +22 -0
  165. package/libcxx/include/__chrono/monthday.h +20 -0
  166. package/libcxx/include/__chrono/steady_clock.h +1 -1
  167. package/libcxx/include/__chrono/system_clock.h +3 -3
  168. package/libcxx/include/__chrono/time_point.h +37 -13
  169. package/libcxx/include/__chrono/weekday.h +25 -0
  170. package/libcxx/include/__chrono/year.h +11 -0
  171. package/libcxx/include/__chrono/year_month.h +13 -0
  172. package/libcxx/include/__chrono/year_month_day.h +23 -0
  173. package/libcxx/include/__chrono/year_month_weekday.h +26 -0
  174. package/libcxx/include/__chrono/zoned_time.h +16 -0
  175. package/libcxx/include/__compare/is_eq.h +6 -6
  176. package/libcxx/include/__compare/strong_order.h +12 -30
  177. package/libcxx/include/__compare/three_way_comparable.h +2 -2
  178. package/libcxx/include/__concepts/comparison_common_type.h +40 -0
  179. package/libcxx/include/__concepts/equality_comparable.h +2 -1
  180. package/libcxx/include/__condition_variable/condition_variable.h +1 -1
  181. package/libcxx/include/__config +63 -280
  182. package/libcxx/include/__configuration/abi.h +14 -24
  183. package/libcxx/include/__configuration/availability.h +65 -118
  184. package/libcxx/include/__configuration/compiler.h +6 -6
  185. package/libcxx/include/__configuration/experimental.h +38 -0
  186. package/libcxx/include/__configuration/hardening.h +215 -0
  187. package/libcxx/include/__configuration/language.h +3 -0
  188. package/libcxx/include/__configuration/platform.h +9 -16
  189. package/libcxx/include/__coroutine/coroutine_handle.h +9 -9
  190. package/libcxx/include/__coroutine/noop_coroutine_handle.h +11 -13
  191. package/libcxx/include/__debug_utils/strict_weak_ordering_check.h +1 -1
  192. package/libcxx/include/__exception/exception.h +6 -4
  193. package/libcxx/include/__exception/exception_ptr.h +27 -5
  194. package/libcxx/include/__exception/nested_exception.h +2 -2
  195. package/libcxx/include/__exception/operations.h +5 -5
  196. package/libcxx/include/__expected/bad_expected_access.h +8 -6
  197. package/libcxx/include/__expected/expected.h +62 -64
  198. package/libcxx/include/__expected/unexpected.h +4 -4
  199. package/libcxx/include/__filesystem/copy_options.h +4 -4
  200. package/libcxx/include/__filesystem/directory_entry.h +37 -33
  201. package/libcxx/include/__filesystem/directory_iterator.h +9 -11
  202. package/libcxx/include/__filesystem/directory_options.h +7 -4
  203. package/libcxx/include/__filesystem/file_status.h +3 -3
  204. package/libcxx/include/__filesystem/filesystem_error.h +9 -10
  205. package/libcxx/include/__filesystem/operations.h +97 -66
  206. package/libcxx/include/__filesystem/path.h +68 -64
  207. package/libcxx/include/__filesystem/path_iterator.h +1 -3
  208. package/libcxx/include/__filesystem/perm_options.h +4 -4
  209. package/libcxx/include/__filesystem/perms.h +4 -4
  210. package/libcxx/include/__filesystem/recursive_directory_iterator.h +9 -14
  211. package/libcxx/include/__filesystem/space_info.h +1 -1
  212. package/libcxx/include/__filesystem/u8path.h +12 -14
  213. package/libcxx/include/__flat_map/flat_map.h +88 -71
  214. package/libcxx/include/__flat_map/flat_multimap.h +251 -172
  215. package/libcxx/include/__flat_map/key_value_iterator.h +0 -1
  216. package/libcxx/include/__flat_map/utils.h +1 -0
  217. package/libcxx/include/__flat_set/flat_multiset.h +211 -143
  218. package/libcxx/include/__flat_set/flat_set.h +86 -68
  219. package/libcxx/include/__format/concepts.h +0 -14
  220. package/libcxx/include/__format/extended_grapheme_cluster_table.h +3 -2
  221. package/libcxx/include/__format/fmt_pair_like.h +42 -0
  222. package/libcxx/include/__format/format_arg.h +7 -10
  223. package/libcxx/include/__format/format_args.h +1 -1
  224. package/libcxx/include/__format/format_context.h +5 -5
  225. package/libcxx/include/__format/format_parse_context.h +2 -2
  226. package/libcxx/include/__format/formatter_output.h +30 -34
  227. package/libcxx/include/__format/indic_conjunct_break_table.h +3 -2
  228. package/libcxx/include/__format/range_default_formatter.h +2 -41
  229. package/libcxx/include/__format/range_format.h +71 -0
  230. package/libcxx/include/__format/range_formatter.h +1 -0
  231. package/libcxx/include/__format/width_estimation_table.h +4 -2
  232. package/libcxx/include/__functional/bind.h +10 -15
  233. package/libcxx/include/__functional/bind_back.h +1 -1
  234. package/libcxx/include/__functional/bind_front.h +1 -1
  235. package/libcxx/include/__functional/function.h +57 -75
  236. package/libcxx/include/__functional/hash.h +1 -10
  237. package/libcxx/include/__functional/identity.h +1 -1
  238. package/libcxx/include/__functional/is_transparent.h +8 -0
  239. package/libcxx/include/__functional/mem_fn.h +2 -1
  240. package/libcxx/include/__functional/operations.h +18 -0
  241. package/libcxx/include/__functional/ranges_operations.h +7 -0
  242. package/libcxx/include/__functional/reference_wrapper.h +7 -5
  243. package/libcxx/include/__functional/weak_result_type.h +14 -28
  244. package/libcxx/include/__fwd/ios.h +1 -1
  245. package/libcxx/include/__fwd/tuple.h +14 -0
  246. package/libcxx/include/__hash_table +371 -357
  247. package/libcxx/include/__ios/fpos.h +4 -4
  248. package/libcxx/include/__iterator/back_insert_iterator.h +1 -7
  249. package/libcxx/include/__iterator/bounded_iter.h +7 -8
  250. package/libcxx/include/__iterator/concepts.h +6 -9
  251. package/libcxx/include/__iterator/cpp17_iterator_concepts.h +13 -12
  252. package/libcxx/include/__iterator/distance.h +40 -18
  253. package/libcxx/include/__iterator/front_insert_iterator.h +1 -7
  254. package/libcxx/include/__iterator/insert_iterator.h +1 -7
  255. package/libcxx/include/__iterator/istream_iterator.h +6 -7
  256. package/libcxx/include/__iterator/istreambuf_iterator.h +6 -7
  257. package/libcxx/include/__iterator/iter_move.h +1 -1
  258. package/libcxx/include/__iterator/iterator.h +13 -0
  259. package/libcxx/include/__iterator/iterator_traits.h +13 -14
  260. package/libcxx/include/__iterator/ostream_iterator.h +1 -7
  261. package/libcxx/include/__iterator/ostreambuf_iterator.h +1 -7
  262. package/libcxx/include/__iterator/reverse_iterator.h +8 -13
  263. package/libcxx/include/__iterator/segmented_iterator.h +3 -8
  264. package/libcxx/include/__iterator/static_bounded_iter.h +3 -3
  265. package/libcxx/include/__iterator/wrap_iter.h +8 -6
  266. package/libcxx/include/__locale +3 -10
  267. package/libcxx/include/__locale_dir/locale_base_api/bsd_locale_fallbacks.h +0 -10
  268. package/libcxx/include/__locale_dir/locale_base_api.h +5 -28
  269. package/libcxx/include/__locale_dir/messages.h +1 -1
  270. package/libcxx/include/__locale_dir/money.h +2 -2
  271. package/libcxx/include/__locale_dir/num.h +190 -243
  272. package/libcxx/include/__locale_dir/pad_and_output.h +5 -6
  273. package/libcxx/include/__locale_dir/support/bsd_like.h +0 -20
  274. package/libcxx/include/__locale_dir/support/fuchsia.h +0 -7
  275. package/libcxx/include/__locale_dir/support/linux.h +0 -37
  276. package/libcxx/include/__locale_dir/support/netbsd.h +0 -2
  277. package/libcxx/include/__locale_dir/support/newlib.h +243 -0
  278. package/libcxx/include/__locale_dir/support/no_locale/characters.h +0 -4
  279. package/libcxx/include/__locale_dir/support/no_locale/strtonum.h +0 -9
  280. package/libcxx/include/__locale_dir/support/windows.h +0 -29
  281. package/libcxx/include/__locale_dir/time.h +3 -7
  282. package/libcxx/include/__math/hypot.h +1 -1
  283. package/libcxx/include/__math/logarithms.h +1 -1
  284. package/libcxx/include/__math/traits.h +80 -11
  285. package/libcxx/include/__mdspan/extents.h +7 -4
  286. package/libcxx/include/__mdspan/layout_stride.h +4 -5
  287. package/libcxx/include/__mdspan/mdspan.h +29 -23
  288. package/libcxx/include/__memory/addressof.h +7 -5
  289. package/libcxx/include/__memory/align.h +18 -1
  290. package/libcxx/include/__memory/allocate_at_least.h +15 -10
  291. package/libcxx/include/__memory/allocator.h +14 -26
  292. package/libcxx/include/__memory/allocator_traits.h +6 -4
  293. package/libcxx/include/__memory/compressed_pair.h +15 -9
  294. package/libcxx/include/__memory/construct_at.h +12 -23
  295. package/libcxx/include/__memory/inout_ptr.h +1 -1
  296. package/libcxx/include/__memory/is_sufficiently_aligned.h +1 -1
  297. package/libcxx/include/__memory/out_ptr.h +1 -1
  298. package/libcxx/include/__memory/pointer_traits.h +1 -1
  299. package/libcxx/include/__memory/raw_storage_iterator.h +3 -9
  300. package/libcxx/include/__memory/shared_count.h +9 -30
  301. package/libcxx/include/__memory/shared_ptr.h +100 -145
  302. package/libcxx/include/__memory/temp_value.h +1 -2
  303. package/libcxx/include/__memory/uninitialized_algorithms.h +44 -115
  304. package/libcxx/include/__memory/unique_ptr.h +14 -16
  305. package/libcxx/include/__memory/uses_allocator_construction.h +1 -0
  306. package/libcxx/include/__memory_resource/memory_resource.h +4 -2
  307. package/libcxx/include/__memory_resource/monotonic_buffer_resource.h +1 -1
  308. package/libcxx/include/__memory_resource/polymorphic_allocator.h +13 -8
  309. package/libcxx/include/__memory_resource/pool_options.h +1 -1
  310. package/libcxx/include/__memory_resource/synchronized_pool_resource.h +4 -2
  311. package/libcxx/include/__memory_resource/unsynchronized_pool_resource.h +1 -1
  312. package/libcxx/include/__mutex/mutex.h +2 -2
  313. package/libcxx/include/__mutex/once_flag.h +14 -11
  314. package/libcxx/include/__mutex/tag_types.h +3 -3
  315. package/libcxx/include/__mutex/unique_lock.h +8 -7
  316. package/libcxx/include/__new/align_val_t.h +6 -0
  317. package/libcxx/include/__new/allocate.h +1 -2
  318. package/libcxx/include/__new/exceptions.h +8 -2
  319. package/libcxx/include/__new/global_new_delete.h +4 -11
  320. package/libcxx/include/__new/interference_size.h +0 -4
  321. package/libcxx/include/__new/launder.h +3 -5
  322. package/libcxx/include/__new/nothrow_t.h +1 -1
  323. package/libcxx/include/__numeric/gcd_lcm.h +24 -34
  324. package/libcxx/include/__numeric/midpoint.h +9 -14
  325. package/libcxx/include/__numeric/pstl.h +2 -2
  326. package/libcxx/include/__numeric/saturation_arithmetic.h +13 -5
  327. package/libcxx/include/__ostream/basic_ostream.h +8 -8
  328. package/libcxx/include/__pstl/backends/default.h +14 -14
  329. package/libcxx/include/__pstl/backends/libdispatch.h +2 -2
  330. package/libcxx/include/__pstl/cpu_algos/find_if.h +1 -1
  331. package/libcxx/include/__pstl/cpu_algos/transform.h +5 -6
  332. package/libcxx/include/__pstl/cpu_algos/transform_reduce.h +5 -4
  333. package/libcxx/include/__random/binomial_distribution.h +10 -4
  334. package/libcxx/include/__random/mersenne_twister_engine.h +50 -154
  335. package/libcxx/include/__random/piecewise_constant_distribution.h +3 -2
  336. package/libcxx/include/__random/piecewise_linear_distribution.h +3 -2
  337. package/libcxx/include/__ranges/adjacent_transform_view.h +406 -0
  338. package/libcxx/include/__ranges/adjacent_view.h +419 -0
  339. package/libcxx/include/__ranges/as_rvalue_view.h +9 -9
  340. package/libcxx/include/__ranges/chunk_by_view.h +6 -6
  341. package/libcxx/include/__ranges/common_view.h +7 -7
  342. package/libcxx/include/__ranges/drop_view.h +8 -8
  343. package/libcxx/include/__ranges/drop_while_view.h +5 -5
  344. package/libcxx/include/__ranges/elements_of.h +49 -0
  345. package/libcxx/include/__ranges/empty_view.h +5 -5
  346. package/libcxx/include/__ranges/filter_view.h +10 -10
  347. package/libcxx/include/__ranges/iota_view.h +41 -22
  348. package/libcxx/include/__ranges/owning_view.h +15 -15
  349. package/libcxx/include/__ranges/ref_view.h +6 -6
  350. package/libcxx/include/__ranges/repeat_view.h +17 -10
  351. package/libcxx/include/__ranges/single_view.h +8 -8
  352. package/libcxx/include/__ranges/take_view.h +9 -9
  353. package/libcxx/include/__ranges/transform_view.h +1 -2
  354. package/libcxx/include/__ranges/view_interface.h +10 -10
  355. package/libcxx/include/__ranges/zip_transform_view.h +357 -0
  356. package/libcxx/include/__ranges/zip_view.h +20 -20
  357. package/libcxx/include/__split_buffer +612 -240
  358. package/libcxx/include/__stop_token/atomic_unique_lock.h +1 -1
  359. package/libcxx/include/__stop_token/stop_callback.h +2 -2
  360. package/libcxx/include/__stop_token/stop_source.h +1 -1
  361. package/libcxx/include/__stop_token/stop_state.h +4 -4
  362. package/libcxx/include/__stop_token/stop_token.h +1 -1
  363. package/libcxx/include/__string/char_traits.h +51 -31
  364. package/libcxx/include/__string/constexpr_c_functions.h +5 -5
  365. package/libcxx/include/__support/xlocale/__strtonum_fallback.h +0 -8
  366. package/libcxx/include/__system_error/error_category.h +8 -8
  367. package/libcxx/include/__system_error/error_code.h +5 -5
  368. package/libcxx/include/__system_error/error_condition.h +4 -4
  369. package/libcxx/include/__system_error/system_error.h +1 -1
  370. package/libcxx/include/__thread/id.h +1 -1
  371. package/libcxx/include/__thread/jthread.h +1 -1
  372. package/libcxx/include/__thread/poll_with_backoff.h +27 -8
  373. package/libcxx/include/__thread/support/c11.h +8 -8
  374. package/libcxx/include/__thread/support/pthread.h +8 -8
  375. package/libcxx/include/__thread/support/windows.h +8 -8
  376. package/libcxx/include/__thread/thread.h +13 -8
  377. package/libcxx/include/__thread/timed_backoff_policy.h +3 -2
  378. package/libcxx/include/__tree +849 -701
  379. package/libcxx/include/__tuple/sfinae_helpers.h +1 -44
  380. package/libcxx/include/__tuple/tuple_element.h +0 -12
  381. package/libcxx/include/__tuple/tuple_size.h +0 -4
  382. package/libcxx/include/__tuple/tuple_transform.h +45 -0
  383. package/libcxx/include/__type_traits/aligned_storage.h +13 -40
  384. package/libcxx/include/__type_traits/desugars_to.h +4 -0
  385. package/libcxx/include/__type_traits/invoke.h +8 -0
  386. package/libcxx/include/__type_traits/is_allocator.h +6 -7
  387. package/libcxx/include/__type_traits/is_array.h +26 -0
  388. package/libcxx/include/__type_traits/is_equality_comparable.h +16 -21
  389. package/libcxx/include/__type_traits/is_final.h +1 -1
  390. package/libcxx/include/__type_traits/is_floating_point.h +7 -6
  391. package/libcxx/include/__type_traits/is_generic_transparent_comparator.h +30 -0
  392. package/libcxx/include/__type_traits/is_specialization.h +2 -6
  393. package/libcxx/include/__type_traits/is_within_lifetime.h +29 -0
  394. package/libcxx/include/__type_traits/make_transparent.h +52 -0
  395. package/libcxx/include/__type_traits/reference_constructs_from_temporary.h +1 -7
  396. package/libcxx/include/__type_traits/reference_converts_from_temporary.h +1 -1
  397. package/libcxx/include/__utility/cmp.h +19 -7
  398. package/libcxx/include/__utility/default_three_way_comparator.h +70 -0
  399. package/libcxx/include/__utility/in_place.h +1 -1
  400. package/libcxx/include/__utility/integer_sequence.h +56 -41
  401. package/libcxx/include/__utility/lazy_synth_three_way_comparator.h +120 -0
  402. package/libcxx/include/__utility/pair.h +22 -25
  403. package/libcxx/include/__utility/scope_guard.h +2 -0
  404. package/libcxx/include/__utility/try_key_extraction.h +114 -0
  405. package/libcxx/include/__vector/vector.h +187 -160
  406. package/libcxx/include/__vector/vector_bool.h +76 -83
  407. package/libcxx/include/any +118 -155
  408. package/libcxx/include/array +88 -56
  409. package/libcxx/include/atomic +2 -0
  410. package/libcxx/include/barrier +20 -24
  411. package/libcxx/include/bitset +49 -30
  412. package/libcxx/include/ccomplex +3 -11
  413. package/libcxx/include/chrono +47 -0
  414. package/libcxx/include/ciso646 +3 -6
  415. package/libcxx/include/complex +77 -65
  416. package/libcxx/include/complex.h +10 -10
  417. package/libcxx/include/condition_variable +3 -3
  418. package/libcxx/include/cstdalign +3 -10
  419. package/libcxx/include/cstdbool +3 -10
  420. package/libcxx/include/ctgmath +2 -11
  421. package/libcxx/include/ctype.h +24 -24
  422. package/libcxx/include/cwchar +2 -2
  423. package/libcxx/include/deque +109 -225
  424. package/libcxx/include/errno.h +269 -269
  425. package/libcxx/include/exception +4 -1
  426. package/libcxx/include/ext/hash_map +7 -48
  427. package/libcxx/include/ext/hash_set +2 -8
  428. package/libcxx/include/fenv.h +43 -43
  429. package/libcxx/include/flat_map +663 -11
  430. package/libcxx/include/flat_set +543 -8
  431. package/libcxx/include/float.h +16 -16
  432. package/libcxx/include/forward_list +33 -53
  433. package/libcxx/include/fstream +57 -42
  434. package/libcxx/include/future +41 -51
  435. package/libcxx/include/initializer_list +9 -3
  436. package/libcxx/include/inttypes.h +16 -16
  437. package/libcxx/include/ios +28 -28
  438. package/libcxx/include/istream +19 -13
  439. package/libcxx/include/iterator +10 -0
  440. package/libcxx/include/latch +7 -5
  441. package/libcxx/include/limits +4 -4
  442. package/libcxx/include/list +61 -79
  443. package/libcxx/include/map +386 -274
  444. package/libcxx/include/math.h +19 -0
  445. package/libcxx/include/mdspan +1 -5
  446. package/libcxx/include/mutex +29 -19
  447. package/libcxx/include/optional +644 -149
  448. package/libcxx/include/print +9 -5
  449. package/libcxx/include/queue +39 -37
  450. package/libcxx/include/ranges +48 -0
  451. package/libcxx/include/regex +33 -31
  452. package/libcxx/include/scoped_allocator +16 -11
  453. package/libcxx/include/semaphore +15 -18
  454. package/libcxx/include/set +220 -192
  455. package/libcxx/include/shared_mutex +3 -8
  456. package/libcxx/include/span +53 -37
  457. package/libcxx/include/sstream +34 -28
  458. package/libcxx/include/stack +13 -15
  459. package/libcxx/include/stddef.h +10 -10
  460. package/libcxx/include/stdexcept +2 -2
  461. package/libcxx/include/stdio.h +20 -21
  462. package/libcxx/include/streambuf +59 -19
  463. package/libcxx/include/string +574 -573
  464. package/libcxx/include/string_view +113 -89
  465. package/libcxx/include/strstream +10 -10
  466. package/libcxx/include/syncstream +4 -4
  467. package/libcxx/include/tgmath.h +12 -12
  468. package/libcxx/include/tuple +242 -212
  469. package/libcxx/include/type_traits +8 -2
  470. package/libcxx/include/typeindex +5 -3
  471. package/libcxx/include/typeinfo +92 -89
  472. package/libcxx/include/unordered_map +179 -304
  473. package/libcxx/include/unordered_set +168 -195
  474. package/libcxx/include/utility +12 -0
  475. package/libcxx/include/valarray +106 -161
  476. package/libcxx/include/variant +25 -33
  477. package/libcxx/include/version +41 -24
  478. package/libcxx/include/wctype.h +29 -29
  479. package/libcxx/src/any.cpp +4 -0
  480. package/libcxx/src/atomic.cpp +365 -80
  481. package/libcxx/src/barrier.cpp +4 -3
  482. package/libcxx/src/charconv.cpp +6 -3
  483. package/libcxx/src/condition_variable_destructor.cpp +1 -1
  484. package/libcxx/src/error_category.cpp +3 -1
  485. package/libcxx/src/exception.cpp +2 -10
  486. package/libcxx/src/experimental/time_zone.cpp +1 -1
  487. package/libcxx/src/experimental/tzdb.cpp +4 -1
  488. package/libcxx/src/filesystem/error.h +4 -22
  489. package/libcxx/src/filesystem/format_string.h +9 -18
  490. package/libcxx/src/filesystem/int128_builtins.cpp +2 -0
  491. package/libcxx/src/filesystem/operations.cpp +2 -9
  492. package/libcxx/src/filesystem/path.cpp +3 -1
  493. package/libcxx/src/include/aligned_alloc.h +65 -0
  494. package/libcxx/src/include/config_elast.h +1 -1
  495. package/libcxx/src/include/from_chars_floating_point.h +11 -7
  496. package/libcxx/src/include/overridable_function.h +8 -10
  497. package/libcxx/src/iostream.cpp +56 -37
  498. package/libcxx/src/locale.cpp +213 -196
  499. package/libcxx/src/memory.cpp +12 -14
  500. package/libcxx/src/mutex_destructor.cpp +1 -1
  501. package/libcxx/src/new.cpp +5 -5
  502. package/libcxx/src/optional.cpp +4 -0
  503. package/libcxx/src/print.cpp +9 -1
  504. package/libcxx/src/random.cpp +0 -26
  505. package/libcxx/src/string.cpp +10 -25
  506. package/libcxx/src/support/runtime/exception_fallback.ipp +2 -0
  507. package/libcxx/src/support/runtime/exception_glibcxx.ipp +3 -0
  508. package/libcxx/src/support/runtime/exception_libcxxabi.ipp +6 -2
  509. package/libcxx/src/support/runtime/exception_libcxxrt.ipp +2 -0
  510. package/libcxx/src/support/runtime/exception_msvc.ipp +2 -0
  511. package/libcxx/src/support/runtime/exception_pointer_cxxabi.ipp +9 -10
  512. package/libcxx/src/support/runtime/exception_pointer_glibcxx.ipp +2 -0
  513. package/libcxx/src/support/runtime/exception_pointer_msvc.ipp +1 -0
  514. package/libcxx/src/support/runtime/exception_pointer_unimplemented.ipp +1 -0
  515. package/libcxx/src/support/win32/locale_win32.cpp +1 -1
  516. package/libcxx/src/system_error.cpp +2 -0
  517. package/libcxx/src/thread.cpp +1 -3
  518. package/libcxx/src/valarray.cpp +1 -2
  519. package/libcxx/src/vector.cpp +2 -2
  520. package/libcxxabi/include/__cxxabi_config.h +42 -23
  521. package/libcxxabi/src/cxa_exception.cpp +4 -2
  522. package/libcxxabi/src/cxa_exception.h +16 -14
  523. package/libcxxabi/src/cxa_personality.cpp +126 -9
  524. package/libcxxabi/src/cxa_thread_atexit.cpp +2 -1
  525. package/libcxxabi/src/demangle/DemangleConfig.h +4 -0
  526. package/libcxxabi/src/demangle/ItaniumDemangle.h +9 -6
  527. package/libcxxabi/src/demangle/Utility.h +21 -7
  528. package/libcxxabi/src/fallback_malloc.cpp +1 -1
  529. package/libcxxabi/src/private_typeinfo.cpp +6 -0
  530. package/libcxxabi/src/stdlib_new_delete.cpp +5 -5
  531. package/libtsan/LICENSE.TXT +311 -0
  532. package/libtsan/builtins/assembly.h +41 -8
  533. package/libtsan/interception/interception_win.cpp +4 -0
  534. package/libtsan/sanitizer_common/sanitizer_allocator_primary32.h +1 -0
  535. package/libtsan/sanitizer_common/sanitizer_allocator_primary64.h +18 -0
  536. package/libtsan/sanitizer_common/sanitizer_common.h +15 -2
  537. package/libtsan/sanitizer_common/sanitizer_common_interceptors.inc +30 -4
  538. package/libtsan/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +4 -0
  539. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S +2 -1
  540. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_i386.inc.S +2 -0
  541. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_x86_64.inc.S +2 -0
  542. package/libtsan/sanitizer_common/sanitizer_common_syscalls.inc +18 -0
  543. package/libtsan/sanitizer_common/sanitizer_file.cpp +40 -12
  544. package/libtsan/sanitizer_common/sanitizer_file.h +3 -0
  545. package/libtsan/sanitizer_common/sanitizer_flags.inc +7 -0
  546. package/libtsan/sanitizer_common/sanitizer_fuchsia.cpp +30 -3
  547. package/libtsan/sanitizer_common/sanitizer_haiku.cpp +2 -2
  548. package/libtsan/sanitizer_common/sanitizer_internal_defs.h +1 -1
  549. package/libtsan/sanitizer_common/sanitizer_libc.cpp +8 -0
  550. package/libtsan/sanitizer_common/sanitizer_libc.h +1 -0
  551. package/libtsan/sanitizer_common/sanitizer_linux.cpp +15 -7
  552. package/libtsan/sanitizer_common/sanitizer_linux.h +3 -3
  553. package/libtsan/sanitizer_common/sanitizer_linux_libcdep.cpp +1 -0
  554. package/libtsan/sanitizer_common/sanitizer_mac.cpp +255 -104
  555. package/libtsan/sanitizer_common/sanitizer_mac.h +5 -0
  556. package/libtsan/sanitizer_common/sanitizer_netbsd.cpp +2 -2
  557. package/libtsan/sanitizer_common/sanitizer_platform.h +27 -1
  558. package/libtsan/sanitizer_common/sanitizer_platform_interceptors.h +5 -4
  559. package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.cpp +15 -17
  560. package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.h +32 -6
  561. package/libtsan/sanitizer_common/sanitizer_posix.cpp +3 -12
  562. package/libtsan/sanitizer_common/sanitizer_posix.h +2 -1
  563. package/libtsan/sanitizer_common/sanitizer_posix_libcdep.cpp +19 -0
  564. package/libtsan/sanitizer_common/sanitizer_procmaps_mac.cpp +102 -37
  565. package/libtsan/sanitizer_common/sanitizer_redefine_builtins.h +1 -1
  566. package/libtsan/sanitizer_common/sanitizer_signal_interceptors.inc +40 -2
  567. package/libtsan/sanitizer_common/sanitizer_stoptheworld.h +1 -1
  568. package/libtsan/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp +83 -12
  569. package/libtsan/sanitizer_common/sanitizer_stoptheworld_mac.cpp +3 -3
  570. package/libtsan/sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cpp +7 -7
  571. package/libtsan/sanitizer_common/sanitizer_stoptheworld_win.cpp +2 -2
  572. package/libtsan/sanitizer_common/sanitizer_symbolizer_internal.h +5 -1
  573. package/libtsan/sanitizer_common/sanitizer_symbolizer_libcdep.cpp +11 -1
  574. package/libtsan/sanitizer_common/sanitizer_symbolizer_mac.cpp +86 -29
  575. package/libtsan/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp +27 -16
  576. package/libtsan/sanitizer_common/sanitizer_thread_registry.cpp +5 -4
  577. package/libtsan/sanitizer_common/sanitizer_thread_registry.h +4 -4
  578. package/libtsan/sanitizer_common/sanitizer_win.cpp +1 -3
  579. package/libtsan/tsan_debugging.cpp +2 -2
  580. package/libtsan/tsan_flags.cpp +37 -0
  581. package/libtsan/tsan_flags.h +8 -0
  582. package/libtsan/tsan_flags.inc +12 -0
  583. package/libtsan/tsan_interceptors.h +9 -1
  584. package/libtsan/tsan_interceptors_mac.cpp +19 -0
  585. package/libtsan/tsan_interceptors_posix.cpp +78 -32
  586. package/libtsan/tsan_interface.h +3 -3
  587. package/libtsan/tsan_interface_ann.cpp +23 -9
  588. package/libtsan/tsan_mman.cpp +18 -4
  589. package/libtsan/tsan_platform.h +44 -7
  590. package/libtsan/tsan_platform_linux.cpp +42 -14
  591. package/libtsan/tsan_platform_mac.cpp +16 -3
  592. package/libtsan/tsan_report.h +14 -1
  593. package/libtsan/tsan_rtl.cpp +14 -0
  594. package/libtsan/tsan_rtl.h +7 -2
  595. package/libtsan/tsan_rtl_aarch64.S +3 -5
  596. package/libtsan/tsan_rtl_access.cpp +8 -3
  597. package/libtsan/tsan_rtl_amd64.S +2 -0
  598. package/libtsan/tsan_rtl_mutex.cpp +94 -49
  599. package/libtsan/tsan_rtl_report.cpp +132 -65
  600. package/libtsan/tsan_rtl_thread.cpp +31 -9
  601. package/libtsan/tsan_symbolize.cpp +1 -1
  602. package/libtsan/tsan_symbolize.h +1 -1
  603. package/libtsan/tsan_trace.h +1 -1
  604. package/libunwind/include/__libunwind_config.h +11 -2
  605. package/libunwind/include/libunwind.h +117 -11
  606. package/libunwind/include/unwind_arm_ehabi.h +4 -1
  607. package/libunwind/src/AddressSpace.hpp +40 -19
  608. package/libunwind/src/CompactUnwinder.hpp +16 -5
  609. package/libunwind/src/DwarfInstructions.hpp +24 -13
  610. package/libunwind/src/DwarfParser.hpp +60 -22
  611. package/libunwind/src/EHHeaderParser.hpp +7 -4
  612. package/libunwind/src/Registers.hpp +226 -22
  613. package/libunwind/src/Unwind-seh.cpp +6 -7
  614. package/libunwind/src/Unwind-wasm.c +7 -7
  615. package/libunwind/src/UnwindCursor.hpp +167 -49
  616. package/libunwind/src/UnwindLevel1.c +46 -17
  617. package/libunwind/src/UnwindRegistersRestore.S +46 -5
  618. package/libunwind/src/UnwindRegistersSave.S +86 -2
  619. package/libunwind/src/assembly.h +5 -1
  620. package/libunwind/src/config.h +9 -0
  621. package/libunwind/src/gcc_personality_v0.c +79 -6
  622. package/libunwind/src/libunwind.cpp +104 -4
  623. package/libunwind/src/libunwind_ext.h +7 -1
  624. package/libunwind/src/shadow_stack_unwind.h +2 -2
  625. package/lldb/pretty_printers.py +948 -0
  626. package/package.json +1 -1
  627. package/std/Build/Step/Compile.zig +18 -19
  628. package/std/Build/Step/Run.zig +13 -6
  629. package/std/Build/Step.zig +0 -3
  630. package/std/Io/Threaded.zig +3 -0
  631. package/std/Target/aarch64.zig +620 -77
  632. package/std/Target/amdgcn.zig +421 -21
  633. package/std/Target/arm.zig +40 -6
  634. package/std/Target/bpf.zig +6 -0
  635. package/std/Target/hexagon.zig +41 -6
  636. package/std/Target/loongarch.zig +18 -0
  637. package/std/Target/mips.zig +6 -0
  638. package/std/Target/nvptx.zig +58 -35
  639. package/std/Target/powerpc.zig +27 -19
  640. package/std/Target/riscv.zig +415 -177
  641. package/std/Target/sparc.zig +17 -0
  642. package/std/Target/wasm.zig +7 -0
  643. package/std/Target/x86.zig +200 -31
  644. package/std/Target/xtensa.zig +65 -0
  645. package/std/Target.zig +11 -2
  646. package/std/c.zig +7 -0
  647. package/std/debug/Dwarf.zig +14 -11
  648. package/std/debug/Pdb.zig +24 -16
  649. package/std/hash/xxhash.zig +0 -6
  650. package/std/math/log10.zig +0 -2
  651. package/std/math/modf.zig +0 -1
  652. package/std/mem.zig +1 -2
  653. package/std/os/linux/x86.zig +2 -2
  654. package/std/os/windows.zig +130 -1
  655. package/std/simd.zig +4 -21
  656. package/std/start.zig +4 -3
  657. package/std/zig/Ast.zig +5 -7
  658. package/std/zig/AstGen.zig +20 -14
  659. package/std/zig/ErrorBundle.zig +6 -2
  660. package/std/zig/ZonGen.zig +13 -21
  661. package/std/zig/llvm/Builder.zig +2 -2
  662. package/std/zig/system/arm.zig +56 -2
  663. package/std/zig/system/windows.zig +34 -1
  664. package/std/zig/system/x86.zig +60 -16
  665. package/std/zig/system.zig +0 -10
  666. package/include/amxbf16transposeintrin.h +0 -94
  667. package/include/amxcomplextransposeintrin.h +0 -303
  668. package/include/amxfp16transposeintrin.h +0 -94
  669. package/include/amxmovrstransposeintrin.h +0 -200
  670. package/include/amxtf32transposeintrin.h +0 -105
  671. package/include/amxtransposeintrin.h +0 -248
  672. package/libtsan/sanitizer_common/sanitizer_coverage_interface.inc +0 -43
  673. package/std/Build/Step/CheckObject.zig +0 -2764
@@ -9,6 +9,7 @@
9
9
  #ifndef _LIBCPP___ATOMIC_ATOMIC_SYNC_H
10
10
  #define _LIBCPP___ATOMIC_ATOMIC_SYNC_H
11
11
 
12
+ #include <__atomic/atomic_waitable_traits.h>
12
13
  #include <__atomic/contention_t.h>
13
14
  #include <__atomic/memory_order.h>
14
15
  #include <__atomic/to_gcc_order.h>
@@ -19,6 +20,7 @@
19
20
  #include <__type_traits/conjunction.h>
20
21
  #include <__type_traits/decay.h>
21
22
  #include <__type_traits/invoke.h>
23
+ #include <__type_traits/is_same.h>
22
24
  #include <__type_traits/void_t.h>
23
25
  #include <__utility/declval.h>
24
26
  #include <cstring>
@@ -29,50 +31,89 @@
29
31
 
30
32
  _LIBCPP_BEGIN_NAMESPACE_STD
31
33
 
32
- // The customisation points to enable the following functions:
33
- // - __atomic_wait
34
- // - __atomic_wait_unless
35
- // - __atomic_notify_one
36
- // - __atomic_notify_all
37
- // Note that std::atomic<T>::wait was back-ported to C++03
38
- // The below implementations look ugly to support C++03
39
- template <class _Tp, class = void>
40
- struct __atomic_waitable_traits {
41
- template <class _AtomicWaitable>
42
- static void __atomic_load(_AtomicWaitable&&, memory_order) = delete;
43
-
44
- template <class _AtomicWaitable>
45
- static void __atomic_contention_address(_AtomicWaitable&&) = delete;
46
- };
47
-
48
- template <class _Tp, class = void>
49
- struct __atomic_waitable : false_type {};
50
-
51
- template <class _Tp>
52
- struct __atomic_waitable< _Tp,
53
- __void_t<decltype(__atomic_waitable_traits<__decay_t<_Tp> >::__atomic_load(
54
- std::declval<const _Tp&>(), std::declval<memory_order>())),
55
- decltype(__atomic_waitable_traits<__decay_t<_Tp> >::__atomic_contention_address(
56
- std::declval<const _Tp&>()))> > : true_type {};
57
-
58
34
  #if _LIBCPP_STD_VER >= 20
59
35
  # if _LIBCPP_HAS_THREADS
60
36
 
61
- _LIBCPP_AVAILABILITY_SYNC _LIBCPP_EXPORTED_FROM_ABI void __cxx_atomic_notify_one(void const volatile*) _NOEXCEPT;
62
- _LIBCPP_AVAILABILITY_SYNC _LIBCPP_EXPORTED_FROM_ABI void __cxx_atomic_notify_all(void const volatile*) _NOEXCEPT;
63
- _LIBCPP_AVAILABILITY_SYNC _LIBCPP_EXPORTED_FROM_ABI __cxx_contention_t
64
- __libcpp_atomic_monitor(void const volatile*) _NOEXCEPT;
65
- _LIBCPP_AVAILABILITY_SYNC _LIBCPP_EXPORTED_FROM_ABI void
66
- __libcpp_atomic_wait(void const volatile*, __cxx_contention_t) _NOEXCEPT;
67
-
68
- _LIBCPP_AVAILABILITY_SYNC _LIBCPP_EXPORTED_FROM_ABI void
69
- __cxx_atomic_notify_one(__cxx_atomic_contention_t const volatile*) _NOEXCEPT;
70
- _LIBCPP_AVAILABILITY_SYNC _LIBCPP_EXPORTED_FROM_ABI void
71
- __cxx_atomic_notify_all(__cxx_atomic_contention_t const volatile*) _NOEXCEPT;
72
- _LIBCPP_AVAILABILITY_SYNC _LIBCPP_EXPORTED_FROM_ABI __cxx_contention_t
37
+ # if !_LIBCPP_AVAILABILITY_HAS_NEW_SYNC
38
+
39
+ // old dylib interface kept for backwards compatibility
40
+ _LIBCPP_EXPORTED_FROM_ABI void __cxx_atomic_notify_one(void const volatile*) _NOEXCEPT;
41
+ _LIBCPP_EXPORTED_FROM_ABI void __cxx_atomic_notify_all(void const volatile*) _NOEXCEPT;
42
+ _LIBCPP_EXPORTED_FROM_ABI __cxx_contention_t __libcpp_atomic_monitor(void const volatile*) _NOEXCEPT;
43
+ _LIBCPP_EXPORTED_FROM_ABI void __libcpp_atomic_wait(void const volatile*, __cxx_contention_t) _NOEXCEPT;
44
+
45
+ _LIBCPP_EXPORTED_FROM_ABI void __cxx_atomic_notify_one(__cxx_atomic_contention_t const volatile*) _NOEXCEPT;
46
+ _LIBCPP_EXPORTED_FROM_ABI void __cxx_atomic_notify_all(__cxx_atomic_contention_t const volatile*) _NOEXCEPT;
47
+ _LIBCPP_EXPORTED_FROM_ABI __cxx_contention_t
73
48
  __libcpp_atomic_monitor(__cxx_atomic_contention_t const volatile*) _NOEXCEPT;
74
- _LIBCPP_AVAILABILITY_SYNC _LIBCPP_EXPORTED_FROM_ABI void
49
+ _LIBCPP_EXPORTED_FROM_ABI void
75
50
  __libcpp_atomic_wait(__cxx_atomic_contention_t const volatile*, __cxx_contention_t) _NOEXCEPT;
51
+ # endif // !_LIBCPP_AVAILABILITY_HAS_NEW_SYNC
52
+
53
+ // new dylib interface
54
+
55
+ // return the global contention state's current value for the address
56
+ _LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI __cxx_contention_t
57
+ __atomic_monitor_global(void const* __address) _NOEXCEPT;
58
+
59
+ // wait on the global contention state to be changed from the given value for the address
60
+ _LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI void
61
+ __atomic_wait_global_table(void const* __address, __cxx_contention_t __monitor_value) _NOEXCEPT;
62
+
63
+ // notify one waiter waiting on the global contention state for the address
64
+ _LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI void __atomic_notify_one_global_table(void const*) _NOEXCEPT;
65
+
66
+ // notify all waiters waiting on the global contention state for the address
67
+ _LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI void __atomic_notify_all_global_table(void const*) _NOEXCEPT;
68
+
69
+ // wait on the address directly with the native platform wait
70
+ template <std::size_t _Size>
71
+ _LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI void
72
+ __atomic_wait_native(void const* __address, void const* __old_value) _NOEXCEPT;
73
+
74
+ // notify one waiter waiting on the address directly with the native platform wait
75
+ template <std::size_t _Size>
76
+ _LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI void __atomic_notify_one_native(const void*) _NOEXCEPT;
77
+
78
+ // notify all waiters waiting on the address directly with the native platform wait
79
+ template <std::size_t _Size>
80
+ _LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI void __atomic_notify_all_native(const void*) _NOEXCEPT;
81
+
82
+ # if _LIBCPP_AVAILABILITY_HAS_NEW_SYNC
83
+
84
+ template <class _AtomicWaitable, class _Poll>
85
+ struct __atomic_wait_backoff_impl {
86
+ const _AtomicWaitable& __a_;
87
+ _Poll __poll_;
88
+ memory_order __order_;
89
+
90
+ using __waitable_traits _LIBCPP_NODEBUG = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >;
91
+ using __value_type _LIBCPP_NODEBUG = typename __waitable_traits::__value_type;
92
+
93
+ _LIBCPP_HIDE_FROM_ABI __backoff_results operator()(chrono::nanoseconds __elapsed) const {
94
+ if (__elapsed > chrono::microseconds(4)) {
95
+ auto __contention_address = const_cast<const void*>(
96
+ static_cast<const volatile void*>(__waitable_traits::__atomic_contention_address(__a_)));
97
+
98
+ if constexpr (__has_native_atomic_wait<__value_type>) {
99
+ auto __atomic_value = __waitable_traits::__atomic_load(__a_, __order_);
100
+ if (__poll_(__atomic_value))
101
+ return __backoff_results::__poll_success;
102
+ std::__atomic_wait_native<sizeof(__value_type)>(__contention_address, std::addressof(__atomic_value));
103
+ } else {
104
+ __cxx_contention_t __monitor_val = std::__atomic_monitor_global(__contention_address);
105
+ auto __atomic_value = __waitable_traits::__atomic_load(__a_, __order_);
106
+ if (__poll_(__atomic_value))
107
+ return __backoff_results::__poll_success;
108
+ std::__atomic_wait_global_table(__contention_address, __monitor_val);
109
+ }
110
+ } else {
111
+ } // poll
112
+ return __backoff_results::__continue_poll;
113
+ }
114
+ };
115
+
116
+ # else // _LIBCPP_AVAILABILITY_HAS_NEW_SYNC
76
117
 
77
118
  template <class _AtomicWaitable, class _Poll>
78
119
  struct __atomic_wait_backoff_impl {
@@ -82,7 +123,6 @@ struct __atomic_wait_backoff_impl {
82
123
 
83
124
  using __waitable_traits _LIBCPP_NODEBUG = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >;
84
125
 
85
- _LIBCPP_AVAILABILITY_SYNC
86
126
  _LIBCPP_HIDE_FROM_ABI bool
87
127
  __update_monitor_val_and_poll(__cxx_atomic_contention_t const volatile*, __cxx_contention_t& __monitor_val) const {
88
128
  // In case the contention type happens to be __cxx_atomic_contention_t, i.e. __cxx_atomic_impl<int64_t>,
@@ -95,7 +135,6 @@ struct __atomic_wait_backoff_impl {
95
135
  return __poll_(__monitor_val);
96
136
  }
97
137
 
98
- _LIBCPP_AVAILABILITY_SYNC
99
138
  _LIBCPP_HIDE_FROM_ABI bool
100
139
  __update_monitor_val_and_poll(void const volatile* __contention_address, __cxx_contention_t& __monitor_val) const {
101
140
  // In case the contention type is anything else, platform wait is monitoring a __cxx_atomic_contention_t
@@ -105,20 +144,21 @@ struct __atomic_wait_backoff_impl {
105
144
  return __poll_(__current_val);
106
145
  }
107
146
 
108
- _LIBCPP_AVAILABILITY_SYNC
109
- _LIBCPP_HIDE_FROM_ABI bool operator()(chrono::nanoseconds __elapsed) const {
147
+ _LIBCPP_HIDE_FROM_ABI __backoff_results operator()(chrono::nanoseconds __elapsed) const {
110
148
  if (__elapsed > chrono::microseconds(4)) {
111
149
  auto __contention_address = __waitable_traits::__atomic_contention_address(__a_);
112
150
  __cxx_contention_t __monitor_val;
113
151
  if (__update_monitor_val_and_poll(__contention_address, __monitor_val))
114
- return true;
152
+ return __backoff_results::__poll_success;
115
153
  std::__libcpp_atomic_wait(__contention_address, __monitor_val);
116
154
  } else {
117
155
  } // poll
118
- return false;
156
+ return __backoff_results::__continue_poll;
119
157
  }
120
158
  };
121
159
 
160
+ # endif // _LIBCPP_AVAILABILITY_HAS_NEW_SYNC
161
+
122
162
  // The semantics of this function are similar to `atomic`'s
123
163
  // `.wait(T old, std::memory_order order)`, but instead of having a hardcoded
124
164
  // predicate (is the loaded value unequal to `old`?), the predicate function is
@@ -128,9 +168,8 @@ struct __atomic_wait_backoff_impl {
128
168
  // `false`, it must set the argument to its current understanding of the atomic
129
169
  // value. The predicate function must not return `false` spuriously.
130
170
  template <class _AtomicWaitable, class _Poll>
131
- _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void
132
- __atomic_wait_unless(const _AtomicWaitable& __a, memory_order __order, _Poll&& __poll) {
133
- static_assert(__atomic_waitable<_AtomicWaitable>::value, "");
171
+ _LIBCPP_HIDE_FROM_ABI void __atomic_wait_unless(const _AtomicWaitable& __a, memory_order __order, _Poll&& __poll) {
172
+ static_assert(__atomic_waitable<_AtomicWaitable>);
134
173
  __atomic_wait_backoff_impl<_AtomicWaitable, __decay_t<_Poll> > __backoff_fn = {__a, __poll, __order};
135
174
  std::__libcpp_thread_poll_with_backoff(
136
175
  /* poll */
@@ -141,18 +180,52 @@ __atomic_wait_unless(const _AtomicWaitable& __a, memory_order __order, _Poll&& _
141
180
  /* backoff */ __backoff_fn);
142
181
  }
143
182
 
183
+ # if _LIBCPP_AVAILABILITY_HAS_NEW_SYNC
184
+
144
185
  template <class _AtomicWaitable>
145
- _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void __atomic_notify_one(const _AtomicWaitable& __a) {
146
- static_assert(__atomic_waitable<_AtomicWaitable>::value, "");
186
+ _LIBCPP_HIDE_FROM_ABI void __atomic_notify_one(const _AtomicWaitable& __a) {
187
+ static_assert(__atomic_waitable<_AtomicWaitable>);
188
+ using __value_type _LIBCPP_NODEBUG = typename __atomic_waitable_traits<__decay_t<_AtomicWaitable> >::__value_type;
189
+ using __waitable_traits _LIBCPP_NODEBUG = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >;
190
+ auto __contention_address =
191
+ const_cast<const void*>(static_cast<const volatile void*>(__waitable_traits::__atomic_contention_address(__a)));
192
+ if constexpr (__has_native_atomic_wait<__value_type>) {
193
+ std::__atomic_notify_one_native<sizeof(__value_type)>(__contention_address);
194
+ } else {
195
+ std::__atomic_notify_one_global_table(__contention_address);
196
+ }
197
+ }
198
+
199
+ template <class _AtomicWaitable>
200
+ _LIBCPP_HIDE_FROM_ABI void __atomic_notify_all(const _AtomicWaitable& __a) {
201
+ static_assert(__atomic_waitable<_AtomicWaitable>);
202
+ using __value_type _LIBCPP_NODEBUG = typename __atomic_waitable_traits<__decay_t<_AtomicWaitable> >::__value_type;
203
+ using __waitable_traits _LIBCPP_NODEBUG = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >;
204
+ auto __contention_address =
205
+ const_cast<const void*>(static_cast<const volatile void*>(__waitable_traits::__atomic_contention_address(__a)));
206
+ if constexpr (__has_native_atomic_wait<__value_type>) {
207
+ std::__atomic_notify_all_native<sizeof(__value_type)>(__contention_address);
208
+ } else {
209
+ std::__atomic_notify_all_global_table(__contention_address);
210
+ }
211
+ }
212
+
213
+ # else // _LIBCPP_AVAILABILITY_HAS_NEW_SYNC
214
+
215
+ template <class _AtomicWaitable>
216
+ _LIBCPP_HIDE_FROM_ABI void __atomic_notify_one(const _AtomicWaitable& __a) {
217
+ static_assert(__atomic_waitable<_AtomicWaitable>);
147
218
  std::__cxx_atomic_notify_one(__atomic_waitable_traits<__decay_t<_AtomicWaitable> >::__atomic_contention_address(__a));
148
219
  }
149
220
 
150
221
  template <class _AtomicWaitable>
151
- _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void __atomic_notify_all(const _AtomicWaitable& __a) {
152
- static_assert(__atomic_waitable<_AtomicWaitable>::value, "");
222
+ _LIBCPP_HIDE_FROM_ABI void __atomic_notify_all(const _AtomicWaitable& __a) {
223
+ static_assert(__atomic_waitable<_AtomicWaitable>);
153
224
  std::__cxx_atomic_notify_all(__atomic_waitable_traits<__decay_t<_AtomicWaitable> >::__atomic_contention_address(__a));
154
225
  }
155
226
 
227
+ # endif
228
+
156
229
  # else // _LIBCPP_HAS_THREADS
157
230
 
158
231
  template <class _AtomicWaitable, class _Poll>
@@ -180,9 +253,8 @@ _LIBCPP_HIDE_FROM_ABI bool __cxx_nonatomic_compare_equal(_Tp const& __lhs, _Tp c
180
253
  }
181
254
 
182
255
  template <class _AtomicWaitable, class _Tp>
183
- _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void
184
- __atomic_wait(_AtomicWaitable& __a, _Tp __val, memory_order __order) {
185
- static_assert(__atomic_waitable<_AtomicWaitable>::value, "");
256
+ _LIBCPP_HIDE_FROM_ABI void __atomic_wait(_AtomicWaitable& __a, _Tp __val, memory_order __order) {
257
+ static_assert(__atomic_waitable<_AtomicWaitable>);
186
258
  std::__atomic_wait_unless(__a, __order, [&](_Tp const& __current) {
187
259
  return !std::__cxx_nonatomic_compare_equal(__current, __val);
188
260
  });
@@ -0,0 +1,144 @@
1
+ //===----------------------------------------------------------------------===//
2
+ //
3
+ // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
+ // See https://llvm.org/LICENSE.txt for license information.
5
+ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #ifndef _LIBCPP___ATOMIC_ATOMIC_SYNC_TIMED_H
10
+ #define _LIBCPP___ATOMIC_ATOMIC_SYNC_TIMED_H
11
+
12
+ #include <__atomic/atomic_waitable_traits.h>
13
+ #include <__atomic/contention_t.h>
14
+ #include <__atomic/memory_order.h>
15
+ #include <__atomic/to_gcc_order.h>
16
+ #include <__chrono/duration.h>
17
+ #include <__config>
18
+ #include <__memory/addressof.h>
19
+ #include <__thread/poll_with_backoff.h>
20
+ #include <__thread/timed_backoff_policy.h>
21
+ #include <__type_traits/conjunction.h>
22
+ #include <__type_traits/decay.h>
23
+ #include <__type_traits/has_unique_object_representation.h>
24
+ #include <__type_traits/invoke.h>
25
+ #include <__type_traits/is_same.h>
26
+ #include <__type_traits/is_trivially_copyable.h>
27
+ #include <__type_traits/void_t.h>
28
+ #include <__utility/declval.h>
29
+ #include <cstdint>
30
+ #include <cstring>
31
+
32
+ #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
33
+ # pragma GCC system_header
34
+ #endif
35
+
36
+ _LIBCPP_BEGIN_NAMESPACE_STD
37
+
38
+ #if _LIBCPP_STD_VER >= 20
39
+ # if _LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_NEW_SYNC
40
+
41
+ _LIBCPP_AVAILABILITY_NEW_SYNC
42
+ _LIBCPP_EXPORTED_FROM_ABI __cxx_contention_t __atomic_monitor_global(void const* __address) _NOEXCEPT;
43
+
44
+ // wait on the global contention state to be changed from the given value for the address
45
+ _LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI void __atomic_wait_global_table_with_timeout(
46
+ void const* __address, __cxx_contention_t __monitor_value, uint64_t __timeout_ns) _NOEXCEPT;
47
+
48
+ // wait on the address directly with the native platform wait
49
+ template <std::size_t _Size>
50
+ _LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI void
51
+ __atomic_wait_native_with_timeout(void const* __address, void const* __old_value, uint64_t __timeout_ns) _NOEXCEPT;
52
+
53
+ template <class _AtomicWaitable, class _Poll, class _Rep, class _Period>
54
+ struct __atomic_wait_timed_backoff_impl {
55
+ const _AtomicWaitable& __a_;
56
+ _Poll __poll_;
57
+ memory_order __order_;
58
+ chrono::duration<_Rep, _Period> __rel_time_;
59
+
60
+ using __waitable_traits _LIBCPP_NODEBUG = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >;
61
+ using __value_type _LIBCPP_NODEBUG = typename __waitable_traits::__value_type;
62
+
63
+ _LIBCPP_HIDE_FROM_ABI __backoff_results operator()(chrono::nanoseconds __elapsed) const {
64
+ if (__elapsed > chrono::microseconds(4)) {
65
+ auto __contention_address = const_cast<const void*>(
66
+ static_cast<const volatile void*>(__waitable_traits::__atomic_contention_address(__a_)));
67
+
68
+ uint64_t __timeout_ns =
69
+ static_cast<uint64_t>((chrono::duration_cast<chrono::nanoseconds>(__rel_time_) - __elapsed).count());
70
+
71
+ if constexpr (__has_native_atomic_wait<__value_type>) {
72
+ auto __atomic_value = __waitable_traits::__atomic_load(__a_, __order_);
73
+ if (__poll_(__atomic_value))
74
+ return __backoff_results::__poll_success;
75
+ std::__atomic_wait_native_with_timeout<sizeof(__value_type)>(
76
+ __contention_address, std::addressof(__atomic_value), __timeout_ns);
77
+ } else {
78
+ __cxx_contention_t __monitor_val = std::__atomic_monitor_global(__contention_address);
79
+ auto __atomic_value = __waitable_traits::__atomic_load(__a_, __order_);
80
+ if (__poll_(__atomic_value))
81
+ return __backoff_results::__poll_success;
82
+ std::__atomic_wait_global_table_with_timeout(__contention_address, __monitor_val, __timeout_ns);
83
+ }
84
+ } else {
85
+ } // poll
86
+ return __backoff_results::__continue_poll;
87
+ }
88
+ };
89
+
90
+ // The semantics of this function are similar to `atomic`'s
91
+ // `.wait(T old, std::memory_order order)` with a timeout, but instead of having a hardcoded
92
+ // predicate (is the loaded value unequal to `old`?), the predicate function is
93
+ // specified as an argument. The loaded value is given as an in-out argument to
94
+ // the predicate. If the predicate function returns `true`,
95
+ // `__atomic_wait_unless_with_timeout` will return. If the predicate function returns
96
+ // `false`, it must set the argument to its current understanding of the atomic
97
+ // value. The predicate function must not return `false` spuriously.
98
+ template <class _AtomicWaitable, class _Poll, class _Rep, class _Period>
99
+ _LIBCPP_HIDE_FROM_ABI bool __atomic_wait_unless_with_timeout(
100
+ const _AtomicWaitable& __a,
101
+ memory_order __order,
102
+ _Poll&& __poll,
103
+ chrono::duration<_Rep, _Period> const& __rel_time) {
104
+ static_assert(__atomic_waitable<_AtomicWaitable>, "");
105
+ __atomic_wait_timed_backoff_impl<_AtomicWaitable, __decay_t<_Poll>, _Rep, _Period> __backoff_fn = {
106
+ __a, __poll, __order, __rel_time};
107
+ auto __poll_result = std::__libcpp_thread_poll_with_backoff(
108
+ /* poll */
109
+ [&]() {
110
+ auto __current_val = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >::__atomic_load(__a, __order);
111
+ return __poll(__current_val);
112
+ },
113
+ /* backoff */ __backoff_fn,
114
+ __rel_time);
115
+
116
+ return __poll_result == __poll_with_backoff_results::__poll_success;
117
+ }
118
+
119
+ # elif _LIBCPP_HAS_THREADS // _LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_NEW_SYNC
120
+
121
+ template <class _AtomicWaitable, class _Poll, class _Rep, class _Period>
122
+ _LIBCPP_HIDE_FROM_ABI bool __atomic_wait_unless_with_timeout(
123
+ const _AtomicWaitable& __a,
124
+ memory_order __order,
125
+ _Poll&& __poll,
126
+ chrono::duration<_Rep, _Period> const& __rel_time) {
127
+ auto __res = std::__libcpp_thread_poll_with_backoff(
128
+ /* poll */
129
+ [&]() {
130
+ auto __current_val = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >::__atomic_load(__a, __order);
131
+ return __poll(__current_val);
132
+ },
133
+ /* backoff */ __libcpp_timed_backoff_policy(),
134
+ __rel_time);
135
+ return __res == __poll_with_backoff_results::__poll_success;
136
+ }
137
+
138
+ # endif // _LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_NEW_SYNC
139
+
140
+ #endif // C++20
141
+
142
+ _LIBCPP_END_NAMESPACE_STD
143
+
144
+ #endif // _LIBCPP___ATOMIC_ATOMIC_SYNC_TIMED_H
@@ -0,0 +1,103 @@
1
+ //===----------------------------------------------------------------------===//
2
+ //
3
+ // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
+ // See https://llvm.org/LICENSE.txt for license information.
5
+ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #ifndef _LIBCPP___ATOMIC_ATOMIC_WAITABLE_TRAITS_H
10
+ #define _LIBCPP___ATOMIC_ATOMIC_WAITABLE_TRAITS_H
11
+
12
+ #include <__atomic/contention_t.h>
13
+ #include <__atomic/memory_order.h>
14
+ #include <__config>
15
+ #include <__type_traits/decay.h>
16
+ #include <__type_traits/has_unique_object_representation.h>
17
+ #include <__type_traits/is_same.h>
18
+ #include <__type_traits/is_trivially_copyable.h>
19
+ #include <__type_traits/void_t.h>
20
+ #include <__utility/declval.h>
21
+ #include <cstring>
22
+
23
+ #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
24
+ # pragma GCC system_header
25
+ #endif
26
+
27
+ _LIBCPP_BEGIN_NAMESPACE_STD
28
+
29
+ #if _LIBCPP_STD_VER >= 20
30
+
31
+ // The customisation points to enable the following functions:
32
+ // - __atomic_wait
33
+ // - __atomic_wait_unless
34
+ // - __atomic_notify_one
35
+ // - __atomic_notify_all
36
+ template <class _Tp, class = void>
37
+ struct __atomic_waitable_traits {
38
+ using __value_type _LIBCPP_NODEBUG = void;
39
+
40
+ template <class _AtomicWaitable>
41
+ static void __atomic_load(_AtomicWaitable&&, memory_order) = delete;
42
+
43
+ template <class _AtomicWaitable>
44
+ static void __atomic_contention_address(_AtomicWaitable&&) = delete;
45
+ };
46
+
47
+ template <class _Tp>
48
+ concept __atomic_waitable = requires(const _Tp __t, memory_order __order) {
49
+ typename __atomic_waitable_traits<__decay_t<_Tp> >::__value_type;
50
+ { __atomic_waitable_traits<__decay_t<_Tp> >::__atomic_load(__t, __order) };
51
+ { __atomic_waitable_traits<__decay_t<_Tp> >::__atomic_contention_address(__t) };
52
+ };
53
+
54
+ # ifdef __linux__
55
+ # define _LIBCPP_NATIVE_PLATFORM_WAIT_SIZES(_APPLY) _APPLY(4)
56
+ # elif defined(__APPLE__)
57
+ # define _LIBCPP_NATIVE_PLATFORM_WAIT_SIZES(_APPLY) \
58
+ _APPLY(4) \
59
+ _APPLY(8)
60
+ # elif defined(__FreeBSD__) && __SIZEOF_LONG__ == 8
61
+ # define _LIBCPP_NATIVE_PLATFORM_WAIT_SIZES(_APPLY) _APPLY(8)
62
+ # elif defined(_WIN32)
63
+ # define _LIBCPP_NATIVE_PLATFORM_WAIT_SIZES(_APPLY) _APPLY(8)
64
+ # else
65
+ # define _LIBCPP_NATIVE_PLATFORM_WAIT_SIZES(_APPLY) _APPLY(sizeof(__cxx_contention_t))
66
+ # endif // __linux__
67
+
68
+ // concepts defines the types are supported natively by the platform's wait
69
+
70
+ # if defined(_LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE)
71
+
72
+ template <class _Tp>
73
+ _LIBCPP_HIDE_FROM_ABI constexpr bool __has_native_atomic_wait_impl() {
74
+ if (alignof(_Tp) % sizeof(_Tp) != 0)
75
+ return false;
76
+ switch (sizeof(_Tp)) {
77
+ # define _LIBCPP_MAKE_CASE(n) \
78
+ case n: \
79
+ return true;
80
+ _LIBCPP_NATIVE_PLATFORM_WAIT_SIZES(_LIBCPP_MAKE_CASE)
81
+ default:
82
+ return false;
83
+ # undef _LIBCPP_MAKE_CASE
84
+ };
85
+ }
86
+
87
+ template <class _Tp>
88
+ concept __has_native_atomic_wait =
89
+ has_unique_object_representations_v<_Tp> && is_trivially_copyable_v<_Tp> &&
90
+ std::__has_native_atomic_wait_impl<_Tp>();
91
+
92
+ # else // _LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE
93
+
94
+ template <class _Tp>
95
+ concept __has_native_atomic_wait = is_same_v<_Tp, __cxx_contention_t>;
96
+
97
+ # endif // _LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE
98
+
99
+ #endif // C++20
100
+
101
+ _LIBCPP_END_NAMESPACE_STD
102
+
103
+ #endif // _LIBCPP___ATOMIC_ATOMIC_WAITABLE_TRAITS_H
@@ -19,11 +19,35 @@
19
19
 
20
20
  _LIBCPP_BEGIN_NAMESPACE_STD
21
21
 
22
- #if defined(__linux__) || (defined(_AIX) && !defined(__64BIT__))
22
+ // The original definition of `__cxx_contention_t` seemed a bit arbitrary.
23
+ // When we enable the _LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE ABI,
24
+ // use definitions that are based on what the underlying platform supports
25
+ // instead.
26
+ #if defined(_LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE)
27
+
28
+ # ifdef __linux__
29
+ using __cxx_contention_t _LIBCPP_NODEBUG = int32_t;
30
+ # elif defined(__APPLE__)
31
+ using __cxx_contention_t _LIBCPP_NODEBUG = int64_t;
32
+ # elif defined(__FreeBSD__) && __SIZEOF_LONG__ == 8
33
+ using __cxx_contention_t _LIBCPP_NODEBUG = int64_t;
34
+ # elif defined(_AIX) && !defined(__64BIT__)
35
+ using __cxx_contention_t _LIBCPP_NODEBUG = int32_t;
36
+ # elif defined(_WIN32)
37
+ using __cxx_contention_t _LIBCPP_NODEBUG = int64_t;
38
+ # else
39
+ using __cxx_contention_t _LIBCPP_NODEBUG = int64_t;
40
+ # endif // __linux__
41
+
42
+ #else // _LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE
43
+
44
+ # if defined(__linux__) || (defined(_AIX) && !defined(__64BIT__))
23
45
  using __cxx_contention_t _LIBCPP_NODEBUG = int32_t;
24
- #else
46
+ # else
25
47
  using __cxx_contention_t _LIBCPP_NODEBUG = int64_t;
26
- #endif // __linux__ || (_AIX && !__64BIT__)
48
+ # endif // __linux__ || (_AIX && !__64BIT__)
49
+
50
+ #endif // _LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE
27
51
 
28
52
  using __cxx_atomic_contention_t _LIBCPP_NODEBUG = __cxx_atomic_impl<__cxx_contention_t>;
29
53
 
@@ -0,0 +1,55 @@
1
+ //===----------------------------------------------------------------------===//
2
+ //
3
+ // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
+ // See https://llvm.org/LICENSE.txt for license information.
5
+ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #ifndef _LIBCPP___ATOMIC_FLOATING_POINT_HELPER_H
10
+ #define _LIBCPP___ATOMIC_FLOATING_POINT_HELPER_H
11
+
12
+ #include <__config>
13
+ #include <__type_traits/is_floating_point.h>
14
+ #include <__type_traits/is_same.h>
15
+
16
+ #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
17
+ # pragma GCC system_header
18
+ #endif
19
+
20
+ _LIBCPP_BEGIN_NAMESPACE_STD
21
+
22
+ #if _LIBCPP_STD_VER >= 20
23
+
24
+ template <class _Tp>
25
+ _LIBCPP_HIDE_FROM_ABI constexpr bool __is_fp80_long_double() {
26
+ // Only x87-fp80 long double has 64-bit mantissa
27
+ return __LDBL_MANT_DIG__ == 64 && std::is_same_v<_Tp, long double>;
28
+ }
29
+
30
+ template <class _Tp>
31
+ _LIBCPP_HIDE_FROM_ABI constexpr bool __has_rmw_builtin() {
32
+ static_assert(std::is_floating_point_v<_Tp>);
33
+ # ifndef _LIBCPP_COMPILER_CLANG_BASED
34
+ return false;
35
+ # else
36
+ // The builtin __cxx_atomic_fetch_add errors during compilation for
37
+ // long double on platforms with fp80 format.
38
+ // For more details, see
39
+ // lib/Sema/SemaChecking.cpp function IsAllowedValueType
40
+ // LLVM Parser does not allow atomicrmw with x86_fp80 type.
41
+ // if (ValType->isSpecificBuiltinType(BuiltinType::LongDouble) &&
42
+ // &Context.getTargetInfo().getLongDoubleFormat() ==
43
+ // &llvm::APFloat::x87DoubleExtended())
44
+ // For more info
45
+ // https://llvm.org/PR68602
46
+ // https://reviews.llvm.org/D53965
47
+ return !std::__is_fp80_long_double<_Tp>();
48
+ # endif
49
+ }
50
+
51
+ #endif
52
+
53
+ _LIBCPP_END_NAMESPACE_STD
54
+
55
+ #endif // _LIBCPP___ATOMIC_FLOATING_POINT_HELPER_H
@@ -24,7 +24,6 @@ _LIBCPP_BEGIN_NAMESPACE_STD
24
24
 
25
25
  template <class _Tp>
26
26
  _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 int __countl_zero(_Tp __t) _NOEXCEPT {
27
- static_assert(__is_unsigned_integer_v<_Tp>, "__countl_zero requires an unsigned integer type");
28
27
  return __builtin_clzg(__t, numeric_limits<_Tp>::digits);
29
28
  }
30
29
 
@@ -37,7 +36,7 @@ template <__unsigned_integer _Tp>
37
36
 
38
37
  template <__unsigned_integer _Tp>
39
38
  [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr int countl_one(_Tp __t) noexcept {
40
- return __t != numeric_limits<_Tp>::max() ? std::countl_zero(static_cast<_Tp>(~__t)) : numeric_limits<_Tp>::digits;
39
+ return std::countl_zero(static_cast<_Tp>(~__t));
41
40
  }
42
41
 
43
42
  #endif // _LIBCPP_STD_VER >= 20
@@ -24,7 +24,6 @@ _LIBCPP_BEGIN_NAMESPACE_STD
24
24
 
25
25
  template <class _Tp>
26
26
  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR int __countr_zero(_Tp __t) _NOEXCEPT {
27
- static_assert(__is_unsigned_integer_v<_Tp>, "__countr_zero only works with unsigned types");
28
27
  return __builtin_ctzg(__t, numeric_limits<_Tp>::digits);
29
28
  }
30
29
 
@@ -37,7 +36,7 @@ template <__unsigned_integer _Tp>
37
36
 
38
37
  template <__unsigned_integer _Tp>
39
38
  [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr int countr_one(_Tp __t) noexcept {
40
- return __t != numeric_limits<_Tp>::max() ? std::countr_zero(static_cast<_Tp>(~__t)) : numeric_limits<_Tp>::digits;
39
+ return std::countr_zero(static_cast<_Tp>(~__t));
41
40
  }
42
41
 
43
42
  #endif // _LIBCPP_STD_VER >= 20
@@ -25,7 +25,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
25
25
 
26
26
  template <__unsigned_integer _Tp>
27
27
  [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool has_single_bit(_Tp __t) noexcept {
28
- return __t != 0 && (((__t & (__t - 1)) == 0));
28
+ return __builtin_popcountg(__t) == 1;
29
29
  }
30
30
 
31
31
  _LIBCPP_END_NAMESPACE_STD
@@ -23,7 +23,6 @@ _LIBCPP_BEGIN_NAMESPACE_STD
23
23
 
24
24
  template <class _Tp>
25
25
  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR int __popcount(_Tp __t) _NOEXCEPT {
26
- static_assert(__is_unsigned_integer_v<_Tp>, "__popcount only works with unsigned types");
27
26
  return __builtin_popcountg(__t);
28
27
  }
29
28