| ... | @@ -25,11 +25,15 @@ typedef char bool; | ... | @@ -25,11 +25,15 @@ typedef char bool; |
| 25 | #endif | 25 | #endif |
| 26 | #endif | 26 | #endif |
| 27 | | 27 | |
| | 28 | #define zig_concat(lhs, rhs) lhs##rhs |
| | 29 | #define zig_expand_concat(lhs, rhs) zig_concat(lhs, rhs) |
| | 30 | |
| 28 | #if defined(__has_builtin) | 31 | #if defined(__has_builtin) |
| 29 | #define zig_has_builtin(builtin) __has_builtin(__builtin_##builtin) | 32 | #define zig_has_builtin(builtin) __has_builtin(__builtin_##builtin) |
| 30 | #else | 33 | #else |
| 31 | #define zig_has_builtin(builtin) 0 | 34 | #define zig_has_builtin(builtin) 0 |
| 32 | #endif | 35 | #endif |
| | 36 | #define zig_expand_has_builtin(b) zig_has_builtin(b) |
| 33 | | 37 | |
| 34 | #if defined(__has_attribute) | 38 | #if defined(__has_attribute) |
| 35 | #define zig_has_attribute(attribute) __has_attribute(attribute) | 39 | #define zig_has_attribute(attribute) __has_attribute(attribute) |
| ... | @@ -112,7 +116,7 @@ typedef char bool; | ... | @@ -112,7 +116,7 @@ typedef char bool; |
| 112 | #define zig_never_tail zig_never_tail_unavailable | 116 | #define zig_never_tail zig_never_tail_unavailable |
| 113 | #endif | 117 | #endif |
| 114 | | 118 | |
| 115 | #if zig_has_attribute(always_inline) | 119 | #if zig_has_attribute(musttail) |
| 116 | #define zig_always_tail __attribute__((musttail)) | 120 | #define zig_always_tail __attribute__((musttail)) |
| 117 | #else | 121 | #else |
| 118 | #define zig_always_tail zig_always_tail_unavailable | 122 | #define zig_always_tail zig_always_tail_unavailable |
| ... | @@ -180,20 +184,58 @@ typedef char bool; | ... | @@ -180,20 +184,58 @@ typedef char bool; |
| 180 | #define zig_extern extern | 184 | #define zig_extern extern |
| 181 | #endif | 185 | #endif |
| 182 | | 186 | |
| 183 | #if zig_has_attribute(alias) | 187 | #if _MSC_VER |
| 184 | #define zig_export(sig, symbol, name) zig_extern sig __attribute__((alias(symbol))) | | |
| 185 | #elif _MSC_VER | | |
| 186 | #if _M_X64 | 188 | #if _M_X64 |
| 187 | #define zig_export(sig, symbol, name) sig;\ | 189 | #define zig_mangle_c(symbol) symbol |
| 188 | __pragma(comment(linker, "/alternatename:" name "=" symbol )) | | |
| 189 | #else /*_M_X64 */ | 190 | #else /*_M_X64 */ |
| 190 | #define zig_export(sig, symbol, name) sig;\ | 191 | #define zig_mangle_c(symbol) "_" symbol |
| 191 | __pragma(comment(linker, "/alternatename:_" name "=_" symbol )) | | |
| 192 | #endif /*_M_X64 */ | 192 | #endif /*_M_X64 */ |
| | 193 | #else /* _MSC_VER */ |
| | 194 | #if __APPLE__ |
| | 195 | #define zig_mangle_c(symbol) "_" symbol |
| | 196 | #else /* __APPLE__ */ |
| | 197 | #define zig_mangle_c(symbol) symbol |
| | 198 | #endif /* __APPLE__ */ |
| | 199 | #endif /* _MSC_VER */ |
| | 200 | |
| | 201 | #if zig_has_attribute(alias) && !__APPLE__ |
| | 202 | #define zig_export(symbol, name) __attribute__((alias(symbol))) |
| | 203 | #elif _MSC_VER |
| | 204 | #define zig_export(symbol, name) ; \ |
| | 205 | __pragma(comment(linker, "/alternatename:" zig_mangle_c(name) "=" zig_mangle_c(symbol))) |
| 193 | #else | 206 | #else |
| 194 | #define zig_export(sig, symbol, name) __asm(name " = " symbol) | 207 | #define zig_export(symbol, name) ; \ |
| | 208 | __asm(zig_mangle_c(name) " = " zig_mangle_c(symbol)) |
| 195 | #endif | 209 | #endif |
| 196 | | 210 | |
| | 211 | #if _MSC_VER |
| | 212 | #define zig_mangled_tentative(mangled, unmangled) |
| | 213 | #define zig_mangled_final(mangled, unmangled) ; \ |
| | 214 | zig_export(#mangled, unmangled) |
| | 215 | #define zig_mangled_export(mangled, unmangled, symbol) \ |
| | 216 | zig_export(unmangled, #mangled) \ |
| | 217 | zig_export(symbol, unmangled) |
| | 218 | #else /* _MSC_VER */ |
| | 219 | #define zig_mangled_tentative(mangled, unmangled) __asm(zig_mangle_c(unmangled)) |
| | 220 | #define zig_mangled_final(mangled, unmangled) zig_mangled_tentative(mangled, unmangled) |
| | 221 | #define zig_mangled_export(mangled, unmangled, symbol) \ |
| | 222 | zig_mangled_final(mangled, unmangled) \ |
| | 223 | zig_export(symbol, unmangled) |
| | 224 | #endif /* _MSC_VER */ |
| | 225 | |
| | 226 | #if _MSC_VER |
| | 227 | #define zig_import(Type, fn_name, libc_name, sig_args, call_args) zig_extern Type fn_name sig_args;\ |
| | 228 | __pragma(comment(linker, "/alternatename:" zig_mangle_c(#fn_name) "=" zig_mangle_c(#libc_name))); |
| | 229 | #define zig_import_builtin(Type, fn_name, libc_name, sig_args, call_args) zig_import(Type, fn_name, sig_args, call_args) |
| | 230 | #else /* _MSC_VER */ |
| | 231 | #define zig_import(Type, fn_name, libc_name, sig_args, call_args) zig_extern Type fn_name sig_args __asm(zig_mangle_c(#libc_name)); |
| | 232 | #define zig_import_builtin(Type, fn_name, libc_name, sig_args, call_args) zig_extern Type libc_name sig_args; \ |
| | 233 | static inline Type fn_name sig_args { return libc_name call_args; } |
| | 234 | #endif |
| | 235 | |
| | 236 | #define zig_expand_import_0(Type, fn_name, libc_name, sig_args, call_args) zig_import(Type, fn_name, libc_name, sig_args, call_args) |
| | 237 | #define zig_expand_import_1(Type, fn_name, libc_name, sig_args, call_args) zig_import_builtin(Type, fn_name, libc_name, sig_args, call_args) |
| | 238 | |
| 197 | #if zig_has_attribute(weak) || defined(zig_gnuc) | 239 | #if zig_has_attribute(weak) || defined(zig_gnuc) |
| 198 | #define zig_weak_linkage __attribute__((weak)) | 240 | #define zig_weak_linkage __attribute__((weak)) |
| 199 | #define zig_weak_linkage_fn __attribute__((weak)) | 241 | #define zig_weak_linkage_fn __attribute__((weak)) |
| ... | @@ -267,9 +309,6 @@ typedef char bool; | ... | @@ -267,9 +309,6 @@ typedef char bool; |
| 267 | #define zig_wasm_memory_grow(index, delta) zig_unimplemented() | 309 | #define zig_wasm_memory_grow(index, delta) zig_unimplemented() |
| 268 | #endif | 310 | #endif |
| 269 | | 311 | |
| 270 | #define zig_concat(lhs, rhs) lhs##rhs | | |
| 271 | #define zig_expand_concat(lhs, rhs) zig_concat(lhs, rhs) | | |
| 272 | | | |
| 273 | #if __STDC_VERSION__ >= 201112L | 312 | #if __STDC_VERSION__ >= 201112L |
| 274 | #define zig_noreturn _Noreturn | 313 | #define zig_noreturn _Noreturn |
| 275 | #elif zig_has_attribute(noreturn) || defined(zig_gnuc) | 314 | #elif zig_has_attribute(noreturn) || defined(zig_gnuc) |
| ... | @@ -2163,7 +2202,7 @@ static inline bool zig_addo_big(void *res, const void *lhs, const void *rhs, boo | ... | @@ -2163,7 +2202,7 @@ static inline bool zig_addo_big(void *res, const void *lhs, const void *rhs, boo |
| 2163 | const uint8_t *rhs_bytes = rhs; | 2202 | const uint8_t *rhs_bytes = rhs; |
| 2164 | uint16_t byte_offset = 0; | 2203 | uint16_t byte_offset = 0; |
| 2165 | uint16_t remaining_bytes = zig_int_bytes(bits); | 2204 | uint16_t remaining_bytes = zig_int_bytes(bits); |
| 2166 | uint16_t top_bits = remaining_bytes * 8 - bits; | 2205 | uint8_t top_bits = (uint8_t)(remaining_bytes * 8 - bits); |
| 2167 | bool overflow = false; | 2206 | bool overflow = false; |
| 2168 | | 2207 | |
| 2169 | #if zig_big_endian | 2208 | #if zig_big_endian |
| ... | @@ -2171,7 +2210,7 @@ static inline bool zig_addo_big(void *res, const void *lhs, const void *rhs, boo | ... | @@ -2171,7 +2210,7 @@ static inline bool zig_addo_big(void *res, const void *lhs, const void *rhs, boo |
| 2171 | #endif | 2210 | #endif |
| 2172 | | 2211 | |
| 2173 | while (remaining_bytes >= 128 / CHAR_BIT) { | 2212 | while (remaining_bytes >= 128 / CHAR_BIT) { |
| 2174 | uint16_t limb_bits = 128 - (remaining_bytes == 128 / CHAR_BIT ? top_bits : 0); | 2213 | uint8_t limb_bits = 128 - (remaining_bytes == 128 / CHAR_BIT ? top_bits : 0); |
| 2175 | | 2214 | |
| 2176 | #if zig_big_endian | 2215 | #if zig_big_endian |
| 2177 | byte_offset -= 128 / CHAR_BIT; | 2216 | byte_offset -= 128 / CHAR_BIT; |
| ... | @@ -2211,7 +2250,7 @@ static inline bool zig_addo_big(void *res, const void *lhs, const void *rhs, boo | ... | @@ -2211,7 +2250,7 @@ static inline bool zig_addo_big(void *res, const void *lhs, const void *rhs, boo |
| 2211 | } | 2250 | } |
| 2212 | | 2251 | |
| 2213 | while (remaining_bytes >= 64 / CHAR_BIT) { | 2252 | while (remaining_bytes >= 64 / CHAR_BIT) { |
| 2214 | uint16_t limb_bits = 64 - (remaining_bytes == 64 / CHAR_BIT ? top_bits : 0); | 2253 | uint8_t limb_bits = 64 - (remaining_bytes == 64 / CHAR_BIT ? top_bits : 0); |
| 2215 | | 2254 | |
| 2216 | #if zig_big_endian | 2255 | #if zig_big_endian |
| 2217 | byte_offset -= 64 / CHAR_BIT; | 2256 | byte_offset -= 64 / CHAR_BIT; |
| ... | @@ -2251,7 +2290,7 @@ static inline bool zig_addo_big(void *res, const void *lhs, const void *rhs, boo | ... | @@ -2251,7 +2290,7 @@ static inline bool zig_addo_big(void *res, const void *lhs, const void *rhs, boo |
| 2251 | } | 2290 | } |
| 2252 | | 2291 | |
| 2253 | while (remaining_bytes >= 32 / CHAR_BIT) { | 2292 | while (remaining_bytes >= 32 / CHAR_BIT) { |
| 2254 | uint16_t limb_bits = 32 - (remaining_bytes == 32 / CHAR_BIT ? top_bits : 0); | 2293 | uint8_t limb_bits = 32 - (remaining_bytes == 32 / CHAR_BIT ? top_bits : 0); |
| 2255 | | 2294 | |
| 2256 | #if zig_big_endian | 2295 | #if zig_big_endian |
| 2257 | byte_offset -= 32 / CHAR_BIT; | 2296 | byte_offset -= 32 / CHAR_BIT; |
| ... | @@ -2291,7 +2330,7 @@ static inline bool zig_addo_big(void *res, const void *lhs, const void *rhs, boo | ... | @@ -2291,7 +2330,7 @@ static inline bool zig_addo_big(void *res, const void *lhs, const void *rhs, boo |
| 2291 | } | 2330 | } |
| 2292 | | 2331 | |
| 2293 | while (remaining_bytes >= 16 / CHAR_BIT) { | 2332 | while (remaining_bytes >= 16 / CHAR_BIT) { |
| 2294 | uint16_t limb_bits = 16 - (remaining_bytes == 16 / CHAR_BIT ? top_bits : 0); | 2333 | uint8_t limb_bits = 16 - (remaining_bytes == 16 / CHAR_BIT ? top_bits : 0); |
| 2295 | | 2334 | |
| 2296 | #if zig_big_endian | 2335 | #if zig_big_endian |
| 2297 | byte_offset -= 16 / CHAR_BIT; | 2336 | byte_offset -= 16 / CHAR_BIT; |
| ... | @@ -2331,7 +2370,7 @@ static inline bool zig_addo_big(void *res, const void *lhs, const void *rhs, boo | ... | @@ -2331,7 +2370,7 @@ static inline bool zig_addo_big(void *res, const void *lhs, const void *rhs, boo |
| 2331 | } | 2370 | } |
| 2332 | | 2371 | |
| 2333 | while (remaining_bytes >= 8 / CHAR_BIT) { | 2372 | while (remaining_bytes >= 8 / CHAR_BIT) { |
| 2334 | uint16_t limb_bits = 8 - (remaining_bytes == 8 / CHAR_BIT ? top_bits : 0); | 2373 | uint8_t limb_bits = 8 - (remaining_bytes == 8 / CHAR_BIT ? top_bits : 0); |
| 2335 | | 2374 | |
| 2336 | #if zig_big_endian | 2375 | #if zig_big_endian |
| 2337 | byte_offset -= 8 / CHAR_BIT; | 2376 | byte_offset -= 8 / CHAR_BIT; |
| ... | @@ -2379,7 +2418,7 @@ static inline bool zig_subo_big(void *res, const void *lhs, const void *rhs, boo | ... | @@ -2379,7 +2418,7 @@ static inline bool zig_subo_big(void *res, const void *lhs, const void *rhs, boo |
| 2379 | const uint8_t *rhs_bytes = rhs; | 2418 | const uint8_t *rhs_bytes = rhs; |
| 2380 | uint16_t byte_offset = 0; | 2419 | uint16_t byte_offset = 0; |
| 2381 | uint16_t remaining_bytes = zig_int_bytes(bits); | 2420 | uint16_t remaining_bytes = zig_int_bytes(bits); |
| 2382 | uint16_t top_bits = remaining_bytes * 8 - bits; | 2421 | uint8_t top_bits = (uint8_t)(remaining_bytes * 8 - bits); |
| 2383 | bool overflow = false; | 2422 | bool overflow = false; |
| 2384 | | 2423 | |
| 2385 | #if zig_big_endian | 2424 | #if zig_big_endian |
| ... | @@ -2387,7 +2426,7 @@ static inline bool zig_subo_big(void *res, const void *lhs, const void *rhs, boo | ... | @@ -2387,7 +2426,7 @@ static inline bool zig_subo_big(void *res, const void *lhs, const void *rhs, boo |
| 2387 | #endif | 2426 | #endif |
| 2388 | | 2427 | |
| 2389 | while (remaining_bytes >= 128 / CHAR_BIT) { | 2428 | while (remaining_bytes >= 128 / CHAR_BIT) { |
| 2390 | uint16_t limb_bits = 128 - (remaining_bytes == 128 / CHAR_BIT ? top_bits : 0); | 2429 | uint8_t limb_bits = 128 - (remaining_bytes == 128 / CHAR_BIT ? top_bits : 0); |
| 2391 | | 2430 | |
| 2392 | #if zig_big_endian | 2431 | #if zig_big_endian |
| 2393 | byte_offset -= 128 / CHAR_BIT; | 2432 | byte_offset -= 128 / CHAR_BIT; |
| ... | @@ -2427,7 +2466,7 @@ static inline bool zig_subo_big(void *res, const void *lhs, const void *rhs, boo | ... | @@ -2427,7 +2466,7 @@ static inline bool zig_subo_big(void *res, const void *lhs, const void *rhs, boo |
| 2427 | } | 2466 | } |
| 2428 | | 2467 | |
| 2429 | while (remaining_bytes >= 64 / CHAR_BIT) { | 2468 | while (remaining_bytes >= 64 / CHAR_BIT) { |
| 2430 | uint16_t limb_bits = 64 - (remaining_bytes == 64 / CHAR_BIT ? top_bits : 0); | 2469 | uint8_t limb_bits = 64 - (remaining_bytes == 64 / CHAR_BIT ? top_bits : 0); |
| 2431 | | 2470 | |
| 2432 | #if zig_big_endian | 2471 | #if zig_big_endian |
| 2433 | byte_offset -= 64 / CHAR_BIT; | 2472 | byte_offset -= 64 / CHAR_BIT; |
| ... | @@ -2467,7 +2506,7 @@ static inline bool zig_subo_big(void *res, const void *lhs, const void *rhs, boo | ... | @@ -2467,7 +2506,7 @@ static inline bool zig_subo_big(void *res, const void *lhs, const void *rhs, boo |
| 2467 | } | 2506 | } |
| 2468 | | 2507 | |
| 2469 | while (remaining_bytes >= 32 / CHAR_BIT) { | 2508 | while (remaining_bytes >= 32 / CHAR_BIT) { |
| 2470 | uint16_t limb_bits = 32 - (remaining_bytes == 32 / CHAR_BIT ? top_bits : 0); | 2509 | uint8_t limb_bits = 32 - (remaining_bytes == 32 / CHAR_BIT ? top_bits : 0); |
| 2471 | | 2510 | |
| 2472 | #if zig_big_endian | 2511 | #if zig_big_endian |
| 2473 | byte_offset -= 32 / CHAR_BIT; | 2512 | byte_offset -= 32 / CHAR_BIT; |
| ... | @@ -2507,7 +2546,7 @@ static inline bool zig_subo_big(void *res, const void *lhs, const void *rhs, boo | ... | @@ -2507,7 +2546,7 @@ static inline bool zig_subo_big(void *res, const void *lhs, const void *rhs, boo |
| 2507 | } | 2546 | } |
| 2508 | | 2547 | |
| 2509 | while (remaining_bytes >= 16 / CHAR_BIT) { | 2548 | while (remaining_bytes >= 16 / CHAR_BIT) { |
| 2510 | uint16_t limb_bits = 16 - (remaining_bytes == 16 / CHAR_BIT ? top_bits : 0); | 2549 | uint8_t limb_bits = 16 - (remaining_bytes == 16 / CHAR_BIT ? top_bits : 0); |
| 2511 | | 2550 | |
| 2512 | #if zig_big_endian | 2551 | #if zig_big_endian |
| 2513 | byte_offset -= 16 / CHAR_BIT; | 2552 | byte_offset -= 16 / CHAR_BIT; |
| ... | @@ -2547,7 +2586,7 @@ static inline bool zig_subo_big(void *res, const void *lhs, const void *rhs, boo | ... | @@ -2547,7 +2586,7 @@ static inline bool zig_subo_big(void *res, const void *lhs, const void *rhs, boo |
| 2547 | } | 2586 | } |
| 2548 | | 2587 | |
| 2549 | while (remaining_bytes >= 8 / CHAR_BIT) { | 2588 | while (remaining_bytes >= 8 / CHAR_BIT) { |
| 2550 | uint16_t limb_bits = 8 - (remaining_bytes == 8 / CHAR_BIT ? top_bits : 0); | 2589 | uint8_t limb_bits = 8 - (remaining_bytes == 8 / CHAR_BIT ? top_bits : 0); |
| 2551 | | 2590 | |
| 2552 | #if zig_big_endian | 2591 | #if zig_big_endian |
| 2553 | byte_offset -= 8 / CHAR_BIT; | 2592 | byte_offset -= 8 / CHAR_BIT; |
| ... | @@ -3093,6 +3132,7 @@ ypedef uint32_t zig_f32; | ... | @@ -3093,6 +3132,7 @@ ypedef uint32_t zig_f32; |
| 3093 | | 3132 | |
| 3094 | #define zig_has_f64 1 | 3133 | #define zig_has_f64 1 |
| 3095 | #define zig_libc_name_f64(name) name | 3134 | #define zig_libc_name_f64(name) name |
| | 3135 | |
| 3096 | #if _MSC_VER | 3136 | #if _MSC_VER |
| 3097 | #define zig_init_special_f64(sign, name, arg, repr) sign zig_make_f64(zig_msvc_flt_##name, ) | 3137 | #define zig_init_special_f64(sign, name, arg, repr) sign zig_make_f64(zig_msvc_flt_##name, ) |
| 3098 | #else | 3138 | #else |
| ... | @@ -3336,31 +3376,31 @@ zig_float_negate_builtin(128, zig_make_u128, (UINT64_C(1) << 63, UINT64_C(0))) | ... | @@ -3336,31 +3376,31 @@ zig_float_negate_builtin(128, zig_make_u128, (UINT64_C(1) << 63, UINT64_C(0))) |
| 3336 | zig_expand_concat(zig_float_binary_builtin_, zig_has_f##w)(f##w, sub, -) \ | 3376 | zig_expand_concat(zig_float_binary_builtin_, zig_has_f##w)(f##w, sub, -) \ |
| 3337 | zig_expand_concat(zig_float_binary_builtin_, zig_has_f##w)(f##w, mul, *) \ | 3377 | zig_expand_concat(zig_float_binary_builtin_, zig_has_f##w)(f##w, mul, *) \ |
| 3338 | zig_expand_concat(zig_float_binary_builtin_, zig_has_f##w)(f##w, div, /) \ | 3378 | zig_expand_concat(zig_float_binary_builtin_, zig_has_f##w)(f##w, div, /) \ |
| 3339 | zig_extern zig_f##w zig_libc_name_f##w(sqrt)(zig_f##w); \ | 3379 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(sqrt)))(zig_f##w, zig_float_fn_f##w##_sqrt, zig_libc_name_f##w(sqrt), (zig_f##w x), (x)) \ |
| 3340 | zig_extern zig_f##w zig_libc_name_f##w(sin)(zig_f##w); \ | 3380 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(sin)))(zig_f##w, zig_float_fn_f##w##_sin, zig_libc_name_f##w(sin), (zig_f##w x), (x)) \ |
| 3341 | zig_extern zig_f##w zig_libc_name_f##w(cos)(zig_f##w); \ | 3381 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(cos)))(zig_f##w, zig_float_fn_f##w##_cos, zig_libc_name_f##w(cos), (zig_f##w x), (x)) \ |
| 3342 | zig_extern zig_f##w zig_libc_name_f##w(tan)(zig_f##w); \ | 3382 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(tan)))(zig_f##w, zig_float_fn_f##w##_tan, zig_libc_name_f##w(tan), (zig_f##w x), (x)) \ |
| 3343 | zig_extern zig_f##w zig_libc_name_f##w(exp)(zig_f##w); \ | 3383 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(exp)))(zig_f##w, zig_float_fn_f##w##_exp, zig_libc_name_f##w(exp), (zig_f##w x), (x)) \ |
| 3344 | zig_extern zig_f##w zig_libc_name_f##w(exp2)(zig_f##w); \ | 3384 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(exp2)))(zig_f##w, zig_float_fn_f##w##_exp2, zig_libc_name_f##w(exp2), (zig_f##w x), (x)) \ |
| 3345 | zig_extern zig_f##w zig_libc_name_f##w(log)(zig_f##w); \ | 3385 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(log)))(zig_f##w, zig_float_fn_f##w##_log, zig_libc_name_f##w(log), (zig_f##w x), (x)) \ |
| 3346 | zig_extern zig_f##w zig_libc_name_f##w(log2)(zig_f##w); \ | 3386 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(log2)))(zig_f##w, zig_float_fn_f##w##_log2, zig_libc_name_f##w(log2), (zig_f##w x), (x)) \ |
| 3347 | zig_extern zig_f##w zig_libc_name_f##w(log10)(zig_f##w); \ | 3387 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(log10)))(zig_f##w, zig_float_fn_f##w##_log10, zig_libc_name_f##w(log10), (zig_f##w x), (x)) \ |
| 3348 | zig_extern zig_f##w zig_libc_name_f##w(fabs)(zig_f##w); \ | 3388 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(fabs)))(zig_f##w, zig_float_fn_f##w##_fabs, zig_libc_name_f##w(fabs), (zig_f##w x), (x)) \ |
| 3349 | zig_extern zig_f##w zig_libc_name_f##w(floor)(zig_f##w); \ | 3389 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(floor)))(zig_f##w, zig_float_fn_f##w##_floor, zig_libc_name_f##w(floor), (zig_f##w x), (x)) \ |
| 3350 | zig_extern zig_f##w zig_libc_name_f##w(ceil)(zig_f##w); \ | 3390 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(ceil)))(zig_f##w, zig_float_fn_f##w##_ceil, zig_libc_name_f##w(ceil), (zig_f##w x), (x)) \ |
| 3351 | zig_extern zig_f##w zig_libc_name_f##w(round)(zig_f##w); \ | 3391 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(round)))(zig_f##w, zig_float_fn_f##w##_round, zig_libc_name_f##w(round), (zig_f##w x), (x)) \ |
| 3352 | zig_extern zig_f##w zig_libc_name_f##w(trunc)(zig_f##w); \ | 3392 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(trunc)))(zig_f##w, zig_float_fn_f##w##_trunc, zig_libc_name_f##w(trunc), (zig_f##w x), (x)) \ |
| 3353 | zig_extern zig_f##w zig_libc_name_f##w(fmod)(zig_f##w, zig_f##w); \ | 3393 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(fmod)))(zig_f##w, zig_float_fn_f##w##_fmod, zig_libc_name_f##w(fmod), (zig_f##w x, zig_f##w y), (x, y)) \ |
| 3354 | zig_extern zig_f##w zig_libc_name_f##w(fmin)(zig_f##w, zig_f##w); \ | 3394 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(fmin)))(zig_f##w, zig_float_fn_f##w##_fmin, zig_libc_name_f##w(fmin), (zig_f##w x, zig_f##w y), (x, y)) \ |
| 3355 | zig_extern zig_f##w zig_libc_name_f##w(fmax)(zig_f##w, zig_f##w); \ | 3395 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(fmax)))(zig_f##w, zig_float_fn_f##w##_fmax, zig_libc_name_f##w(fmax), (zig_f##w x, zig_f##w y), (x, y)) \ |
| 3356 | zig_extern zig_f##w zig_libc_name_f##w(fma)(zig_f##w, zig_f##w, zig_f##w); \ | 3396 | zig_expand_concat(zig_expand_import_, zig_expand_has_builtin(zig_libc_name_f##w(fma)))(zig_f##w, zig_float_fn_f##w##_fma, zig_libc_name_f##w(fma), (zig_f##w x, zig_f##w y, zig_f##w z), (x, y, z)) \ |
| 3357 | \ | 3397 | \ |
| 3358 | static inline zig_f##w zig_div_trunc_f##w(zig_f##w lhs, zig_f##w rhs) { \ | 3398 | static inline zig_f##w zig_div_trunc_f##w(zig_f##w lhs, zig_f##w rhs) { \ |
| 3359 | return zig_libc_name_f##w(trunc)(zig_div_f##w(lhs, rhs)); \ | 3399 | return zig_float_fn_f##w##_trunc(zig_div_f##w(lhs, rhs)); \ |
| 3360 | } \ | 3400 | } \ |
| 3361 | \ | 3401 | \ |
| 3362 | static inline zig_f##w zig_div_floor_f##w(zig_f##w lhs, zig_f##w rhs) { \ | 3402 | static inline zig_f##w zig_div_floor_f##w(zig_f##w lhs, zig_f##w rhs) { \ |
| 3363 | return zig_libc_name_f##w(floor)(zig_div_f##w(lhs, rhs)); \ | 3403 | return zig_float_fn_f##w##_floor(zig_div_f##w(lhs, rhs)); \ |
| 3364 | } \ | 3404 | } \ |
| 3365 | \ | 3405 | \ |
| 3366 | static inline zig_f##w zig_mod_f##w(zig_f##w lhs, zig_f##w rhs) { \ | 3406 | static inline zig_f##w zig_mod_f##w(zig_f##w lhs, zig_f##w rhs) { \ |
| ... | @@ -3437,129 +3477,134 @@ zig_float_builtins(64) | ... | @@ -3437,129 +3477,134 @@ zig_float_builtins(64) |
| 3437 | /* Note that zig_atomicrmw_expected is needed to handle aliasing between res and arg. */ | 3477 | /* Note that zig_atomicrmw_expected is needed to handle aliasing between res and arg. */ |
| 3438 | #define zig_atomicrmw_xchg_float(res, obj, arg, order, Type, ReprType) do { \ | 3478 | #define zig_atomicrmw_xchg_float(res, obj, arg, order, Type, ReprType) do { \ |
| 3439 | zig_##Type zig_atomicrmw_expected; \ | 3479 | zig_##Type zig_atomicrmw_expected; \ |
| 3440 | zig_atomic_load(zig_atomicrmw_expected, obj, memory_order_relaxed, Type, ReprType); \ | 3480 | zig_atomic_load(zig_atomicrmw_expected, obj, zig_memory_order_relaxed, Type, ReprType); \ |
| 3441 | while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, arg, order, memory_order_relaxed, Type, ReprType)); \ | 3481 | while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, arg, order, zig_memory_order_relaxed, Type, ReprType)); \ |
| 3442 | res = zig_atomicrmw_expected; \ | 3482 | res = zig_atomicrmw_expected; \ |
| 3443 | } while (0) | 3483 | } while (0) |
| 3444 | #define zig_atomicrmw_add_float(res, obj, arg, order, Type, ReprType) do { \ | 3484 | #define zig_atomicrmw_add_float(res, obj, arg, order, Type, ReprType) do { \ |
| 3445 | zig_##Type zig_atomicrmw_expected; \ | 3485 | zig_##Type zig_atomicrmw_expected; \ |
| 3446 | zig_##Type zig_atomicrmw_desired; \ | 3486 | zig_##Type zig_atomicrmw_desired; \ |
| 3447 | zig_atomic_load(zig_atomicrmw_expected, obj, memory_order_relaxed, Type, ReprType); \ | 3487 | zig_atomic_load(zig_atomicrmw_expected, obj, zig_memory_order_relaxed, Type, ReprType); \ |
| 3448 | do { \ | 3488 | do { \ |
| 3449 | zig_atomicrmw_desired = zig_add_##Type(zig_atomicrmw_expected, arg); \ | 3489 | zig_atomicrmw_desired = zig_add_##Type(zig_atomicrmw_expected, arg); \ |
| 3450 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, memory_order_relaxed, Type, ReprType)); \ | 3490 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, zig_memory_order_relaxed, Type, ReprType)); \ |
| 3451 | res = zig_atomicrmw_expected; \ | 3491 | res = zig_atomicrmw_expected; \ |
| 3452 | } while (0) | 3492 | } while (0) |
| 3453 | #define zig_atomicrmw_sub_float(res, obj, arg, order, Type, ReprType) do { \ | 3493 | #define zig_atomicrmw_sub_float(res, obj, arg, order, Type, ReprType) do { \ |
| 3454 | zig_##Type zig_atomicrmw_expected; \ | 3494 | zig_##Type zig_atomicrmw_expected; \ |
| 3455 | zig_##Type zig_atomicrmw_desired; \ | 3495 | zig_##Type zig_atomicrmw_desired; \ |
| 3456 | zig_atomic_load(zig_atomicrmw_expected, obj, memory_order_relaxed, Type, ReprType); \ | 3496 | zig_atomic_load(zig_atomicrmw_expected, obj, zig_memory_order_relaxed, Type, ReprType); \ |
| 3457 | do { \ | 3497 | do { \ |
| 3458 | zig_atomicrmw_desired = zig_sub_##Type(zig_atomicrmw_expected, arg); \ | 3498 | zig_atomicrmw_desired = zig_sub_##Type(zig_atomicrmw_expected, arg); \ |
| 3459 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, memory_order_relaxed, Type, ReprType)); \ | 3499 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, zig_memory_order_relaxed, Type, ReprType)); \ |
| 3460 | res = zig_atomicrmw_expected; \ | 3500 | res = zig_atomicrmw_expected; \ |
| 3461 | } while (0) | 3501 | } while (0) |
| 3462 | #define zig_atomicrmw_min_float(res, obj, arg, order, Type, ReprType) do { \ | 3502 | #define zig_atomicrmw_min_float(res, obj, arg, order, Type, ReprType) do { \ |
| 3463 | zig_##Type zig_atomicrmw_expected; \ | 3503 | zig_##Type zig_atomicrmw_expected; \ |
| 3464 | zig_##Type zig_atomicrmw_desired; \ | 3504 | zig_##Type zig_atomicrmw_desired; \ |
| 3465 | zig_atomic_load(zig_atomicrmw_expected, obj, memory_order_relaxed, Type, ReprType); \ | 3505 | zig_atomic_load(zig_atomicrmw_expected, obj, zig_memory_order_relaxed, Type, ReprType); \ |
| 3466 | do { \ | 3506 | do { \ |
| 3467 | zig_atomicrmw_desired = zig_libc_name_##Type(fmin)(zig_atomicrmw_expected, arg); \ | 3507 | zig_atomicrmw_desired = zig_float_fn_##Type##_fmin(zig_atomicrmw_expected, arg); \ |
| 3468 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, memory_order_relaxed, Type, ReprType)); \ | 3508 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, zig_memory_order_relaxed, Type, ReprType)); \ |
| 3469 | res = zig_atomicrmw_expected; \ | 3509 | res = zig_atomicrmw_expected; \ |
| 3470 | } while (0) | 3510 | } while (0) |
| 3471 | #define zig_atomicrmw_max_float(res, obj, arg, order, Type, ReprType) do { \ | 3511 | #define zig_atomicrmw_max_float(res, obj, arg, order, Type, ReprType) do { \ |
| 3472 | zig_##Type zig_atomicrmw_expected; \ | 3512 | zig_##Type zig_atomicrmw_expected; \ |
| 3473 | zig_##Type zig_atomicrmw_desired; \ | 3513 | zig_##Type zig_atomicrmw_desired; \ |
| 3474 | zig_atomic_load(zig_atomicrmw_expected, obj, memory_order_relaxed, Type, ReprType); \ | 3514 | zig_atomic_load(zig_atomicrmw_expected, obj, zig_memory_order_relaxed, Type, ReprType); \ |
| 3475 | do { \ | 3515 | do { \ |
| 3476 | zig_atomicrmw_desired = zig_libc_name_##Type(fmax)(zig_atomicrmw_expected, arg); \ | 3516 | zig_atomicrmw_desired = zig_float_fn_##Type##_fmax(zig_atomicrmw_expected, arg); \ |
| 3477 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, memory_order_relaxed, Type, ReprType)); \ | 3517 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, zig_memory_order_relaxed, Type, ReprType)); \ |
| 3478 | res = zig_atomicrmw_expected; \ | 3518 | res = zig_atomicrmw_expected; \ |
| 3479 | } while (0) | 3519 | } while (0) |
| 3480 | | 3520 | |
| 3481 | #define zig_atomicrmw_xchg_int128(res, obj, arg, order, Type, ReprType) do { \ | 3521 | #define zig_atomicrmw_xchg_int128(res, obj, arg, order, Type, ReprType) do { \ |
| 3482 | zig_##Type zig_atomicrmw_expected; \ | 3522 | zig_##Type zig_atomicrmw_expected; \ |
| 3483 | zig_atomic_load(zig_atomicrmw_expected, obj, memory_order_relaxed, Type, ReprType); \ | 3523 | zig_atomic_load(zig_atomicrmw_expected, obj, zig_memory_order_relaxed, Type, ReprType); \ |
| 3484 | while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, arg, order, memory_order_relaxed, Type, ReprType)); \ | 3524 | while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, arg, order, zig_memory_order_relaxed, Type, ReprType)); \ |
| 3485 | res = zig_atomicrmw_expected; \ | 3525 | res = zig_atomicrmw_expected; \ |
| 3486 | } while (0) | 3526 | } while (0) |
| 3487 | #define zig_atomicrmw_add_int128(res, obj, arg, order, Type, ReprType) do { \ | 3527 | #define zig_atomicrmw_add_int128(res, obj, arg, order, Type, ReprType) do { \ |
| 3488 | zig_##Type zig_atomicrmw_expected; \ | 3528 | zig_##Type zig_atomicrmw_expected; \ |
| 3489 | zig_##Type zig_atomicrmw_desired; \ | 3529 | zig_##Type zig_atomicrmw_desired; \ |
| 3490 | zig_atomic_load(zig_atomicrmw_expected, obj, memory_order_relaxed, Type, ReprType); \ | 3530 | zig_atomic_load(zig_atomicrmw_expected, obj, zig_memory_order_relaxed, Type, ReprType); \ |
| 3491 | do { \ | 3531 | do { \ |
| 3492 | zig_atomicrmw_desired = zig_add_##Type(zig_atomicrmw_expected, arg); \ | 3532 | zig_atomicrmw_desired = zig_add_##Type(zig_atomicrmw_expected, arg); \ |
| 3493 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, memory_order_relaxed, Type, ReprType)); \ | 3533 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, zig_memory_order_relaxed, Type, ReprType)); \ |
| 3494 | res = zig_atomicrmw_expected; \ | 3534 | res = zig_atomicrmw_expected; \ |
| 3495 | } while (0) | 3535 | } while (0) |
| 3496 | #define zig_atomicrmw_sub_int128(res, obj, arg, order, Type, ReprType) do { \ | 3536 | #define zig_atomicrmw_sub_int128(res, obj, arg, order, Type, ReprType) do { \ |
| 3497 | zig_##Type zig_atomicrmw_expected; \ | 3537 | zig_##Type zig_atomicrmw_expected; \ |
| 3498 | zig_##Type zig_atomicrmw_desired; \ | 3538 | zig_##Type zig_atomicrmw_desired; \ |
| 3499 | zig_atomic_load(zig_atomicrmw_expected, obj, memory_order_relaxed, Type, ReprType); \ | 3539 | zig_atomic_load(zig_atomicrmw_expected, obj, zig_memory_order_relaxed, Type, ReprType); \ |
| 3500 | do { \ | 3540 | do { \ |
| 3501 | zig_atomicrmw_desired = zig_sub_##Type(zig_atomicrmw_expected, arg); \ | 3541 | zig_atomicrmw_desired = zig_sub_##Type(zig_atomicrmw_expected, arg); \ |
| 3502 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, memory_order_relaxed, Type, ReprType)); \ | 3542 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, zig_memory_order_relaxed, Type, ReprType)); \ |
| 3503 | res = zig_atomicrmw_expected; \ | 3543 | res = zig_atomicrmw_expected; \ |
| 3504 | } while (0) | 3544 | } while (0) |
| 3505 | #define zig_atomicrmw_and_int128(res, obj, arg, order, Type, ReprType) do { \ | 3545 | #define zig_atomicrmw_and_int128(res, obj, arg, order, Type, ReprType) do { \ |
| 3506 | zig_##Type zig_atomicrmw_expected; \ | 3546 | zig_##Type zig_atomicrmw_expected; \ |
| 3507 | zig_##Type zig_atomicrmw_desired; \ | 3547 | zig_##Type zig_atomicrmw_desired; \ |
| 3508 | zig_atomic_load(zig_atomicrmw_expected, obj, memory_order_relaxed, Type, ReprType); \ | 3548 | zig_atomic_load(zig_atomicrmw_expected, obj, zig_memory_order_relaxed, Type, ReprType); \ |
| 3509 | do { \ | 3549 | do { \ |
| 3510 | zig_atomicrmw_desired = zig_and_##Type(zig_atomicrmw_expected, arg); \ | 3550 | zig_atomicrmw_desired = zig_and_##Type(zig_atomicrmw_expected, arg); \ |
| 3511 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, memory_order_relaxed, Type, ReprType)); \ | 3551 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, zig_memory_order_relaxed, Type, ReprType)); \ |
| 3512 | res = zig_atomicrmw_expected; \ | 3552 | res = zig_atomicrmw_expected; \ |
| 3513 | } while (0) | 3553 | } while (0) |
| 3514 | #define zig_atomicrmw_nand_int128(res, obj, arg, order, Type, ReprType) do { \ | 3554 | #define zig_atomicrmw_nand_int128(res, obj, arg, order, Type, ReprType) do { \ |
| 3515 | zig_##Type zig_atomicrmw_expected; \ | 3555 | zig_##Type zig_atomicrmw_expected; \ |
| 3516 | zig_##Type zig_atomicrmw_desired; \ | 3556 | zig_##Type zig_atomicrmw_desired; \ |
| 3517 | zig_atomic_load(zig_atomicrmw_expected, obj, memory_order_relaxed, Type, ReprType); \ | 3557 | zig_atomic_load(zig_atomicrmw_expected, obj, zig_memory_order_relaxed, Type, ReprType); \ |
| 3518 | do { \ | 3558 | do { \ |
| 3519 | zig_atomicrmw_desired = zig_not_##Type(zig_and_##Type(zig_atomicrmw_expected, arg), 128); \ | 3559 | zig_atomicrmw_desired = zig_not_##Type(zig_and_##Type(zig_atomicrmw_expected, arg), 128); \ |
| 3520 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, memory_order_relaxed, Type, ReprType)); \ | 3560 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, zig_memory_order_relaxed, Type, ReprType)); \ |
| 3521 | res = zig_atomicrmw_expected; \ | 3561 | res = zig_atomicrmw_expected; \ |
| 3522 | } while (0) | 3562 | } while (0) |
| 3523 | #define zig_atomicrmw_or_int128(res, obj, arg, order, Type, ReprType) do { \ | 3563 | #define zig_atomicrmw_or_int128(res, obj, arg, order, Type, ReprType) do { \ |
| 3524 | zig_##Type zig_atomicrmw_expected; \ | 3564 | zig_##Type zig_atomicrmw_expected; \ |
| 3525 | zig_##Type zig_atomicrmw_desired; \ | 3565 | zig_##Type zig_atomicrmw_desired; \ |
| 3526 | zig_atomic_load(zig_atomicrmw_expected, obj, memory_order_relaxed, Type, ReprType); \ | 3566 | zig_atomic_load(zig_atomicrmw_expected, obj, zig_memory_order_relaxed, Type, ReprType); \ |
| 3527 | do { \ | 3567 | do { \ |
| 3528 | zig_atomicrmw_desired = zig_or_##Type(zig_atomicrmw_expected, arg); \ | 3568 | zig_atomicrmw_desired = zig_or_##Type(zig_atomicrmw_expected, arg); \ |
| 3529 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, memory_order_relaxed, Type, ReprType)); \ | 3569 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, zig_memory_order_relaxed, Type, ReprType)); \ |
| 3530 | res = zig_atomicrmw_expected; \ | 3570 | res = zig_atomicrmw_expected; \ |
| 3531 | } while (0) | 3571 | } while (0) |
| 3532 | #define zig_atomicrmw_xor_int128(res, obj, arg, order, Type, ReprType) do { \ | 3572 | #define zig_atomicrmw_xor_int128(res, obj, arg, order, Type, ReprType) do { \ |
| 3533 | zig_##Type zig_atomicrmw_expected; \ | 3573 | zig_##Type zig_atomicrmw_expected; \ |
| 3534 | zig_##Type zig_atomicrmw_desired; \ | 3574 | zig_##Type zig_atomicrmw_desired; \ |
| 3535 | zig_atomic_load(zig_atomicrmw_expected, obj, memory_order_relaxed, Type, ReprType); \ | 3575 | zig_atomic_load(zig_atomicrmw_expected, obj, zig_memory_order_relaxed, Type, ReprType); \ |
| 3536 | do { \ | 3576 | do { \ |
| 3537 | zig_atomicrmw_desired = zig_xor_##Type(zig_atomicrmw_expected, arg); \ | 3577 | zig_atomicrmw_desired = zig_xor_##Type(zig_atomicrmw_expected, arg); \ |
| 3538 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, memory_order_relaxed, Type, ReprType)); \ | 3578 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, zig_memory_order_relaxed, Type, ReprType)); \ |
| 3539 | res = zig_atomicrmw_expected; \ | 3579 | res = zig_atomicrmw_expected; \ |
| 3540 | } while (0) | 3580 | } while (0) |
| 3541 | #define zig_atomicrmw_min_int128(res, obj, arg, order, Type, ReprType) do { \ | 3581 | #define zig_atomicrmw_min_int128(res, obj, arg, order, Type, ReprType) do { \ |
| 3542 | zig_##Type zig_atomicrmw_expected; \ | 3582 | zig_##Type zig_atomicrmw_expected; \ |
| 3543 | zig_##Type zig_atomicrmw_desired; \ | 3583 | zig_##Type zig_atomicrmw_desired; \ |
| 3544 | zig_atomic_load(zig_atomicrmw_expected, obj, memory_order_relaxed, Type, ReprType); \ | 3584 | zig_atomic_load(zig_atomicrmw_expected, obj, zig_memory_order_relaxed, Type, ReprType); \ |
| 3545 | do { \ | 3585 | do { \ |
| 3546 | zig_atomicrmw_desired = zig_min_##Type(zig_atomicrmw_expected, arg); \ | 3586 | zig_atomicrmw_desired = zig_min_##Type(zig_atomicrmw_expected, arg); \ |
| 3547 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, memory_order_relaxed, Type, ReprType)); \ | 3587 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, zig_memory_order_relaxed, Type, ReprType)); \ |
| 3548 | res = zig_atomicrmw_expected; \ | 3588 | res = zig_atomicrmw_expected; \ |
| 3549 | } while (0) | 3589 | } while (0) |
| 3550 | #define zig_atomicrmw_max_int128(res, obj, arg, order, Type, ReprType) do { \ | 3590 | #define zig_atomicrmw_max_int128(res, obj, arg, order, Type, ReprType) do { \ |
| 3551 | zig_##Type zig_atomicrmw_expected; \ | 3591 | zig_##Type zig_atomicrmw_expected; \ |
| 3552 | zig_##Type zig_atomicrmw_desired; \ | 3592 | zig_##Type zig_atomicrmw_desired; \ |
| 3553 | zig_atomic_load(zig_atomicrmw_expected, obj, memory_order_relaxed, Type, ReprType); \ | 3593 | zig_atomic_load(zig_atomicrmw_expected, obj, zig_memory_order_relaxed, Type, ReprType); \ |
| 3554 | do { \ | 3594 | do { \ |
| 3555 | zig_atomicrmw_desired = zig_max_##Type(zig_atomicrmw_expected, arg); \ | 3595 | zig_atomicrmw_desired = zig_max_##Type(zig_atomicrmw_expected, arg); \ |
| 3556 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, memory_order_relaxed, Type, ReprType)); \ | 3596 | } while (!zig_cmpxchg_weak(obj, zig_atomicrmw_expected, zig_atomicrmw_desired, order, zig_memory_order_relaxed, Type, ReprType)); \ |
| 3557 | res = zig_atomicrmw_expected; \ | 3597 | res = zig_atomicrmw_expected; \ |
| 3558 | } while (0) | 3598 | } while (0) |
| 3559 | | 3599 | |
| 3560 | #if __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_ATOMICS__) | 3600 | #if __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_ATOMICS__) |
| 3561 | #include <stdatomic.h> | 3601 | #include <stdatomic.h> |
| 3562 | typedef enum memory_order zig_memory_order; | 3602 | typedef enum memory_order zig_memory_order; |
| | 3603 | #define zig_memory_order_relaxed memory_order_relaxed |
| | 3604 | #define zig_memory_order_acquire memory_order_acquire |
| | 3605 | #define zig_memory_order_release memory_order_release |
| | 3606 | #define zig_memory_order_acq_rel memory_order_acq_rel |
| | 3607 | #define zig_memory_order_seq_cst memory_order_seq_cst |
| 3563 | #define zig_atomic(Type) _Atomic(Type) | 3608 | #define zig_atomic(Type) _Atomic(Type) |
| 3564 | #define zig_cmpxchg_strong( obj, expected, desired, succ, fail, Type, ReprType) atomic_compare_exchange_strong_explicit(obj, &(expected), desired, succ, fail) | 3609 | #define zig_cmpxchg_strong( obj, expected, desired, succ, fail, Type, ReprType) atomic_compare_exchange_strong_explicit(obj, &(expected), desired, succ, fail) |
| 3565 | #define zig_cmpxchg_weak( obj, expected, desired, succ, fail, Type, ReprType) atomic_compare_exchange_weak_explicit (obj, &(expected), desired, succ, fail) | 3610 | #define zig_cmpxchg_weak( obj, expected, desired, succ, fail, Type, ReprType) atomic_compare_exchange_weak_explicit (obj, &(expected), desired, succ, fail) |
| ... | @@ -3583,12 +3628,11 @@ typedef enum memory_order zig_memory_order; | ... | @@ -3583,12 +3628,11 @@ typedef enum memory_order zig_memory_order; |
| 3583 | #define zig_fence(order) atomic_thread_fence(order) | 3628 | #define zig_fence(order) atomic_thread_fence(order) |
| 3584 | #elif defined(__GNUC__) | 3629 | #elif defined(__GNUC__) |
| 3585 | typedef int zig_memory_order; | 3630 | typedef int zig_memory_order; |
| 3586 | #define memory_order_relaxed __ATOMIC_RELAXED | 3631 | #define zig_memory_order_relaxed __ATOMIC_RELAXED |
| 3587 | #define memory_order_consume __ATOMIC_CONSUME | 3632 | #define zig_memory_order_acquire __ATOMIC_ACQUIRE |
| 3588 | #define memory_order_acquire __ATOMIC_ACQUIRE | 3633 | #define zig_memory_order_release __ATOMIC_RELEASE |
| 3589 | #define memory_order_release __ATOMIC_RELEASE | 3634 | #define zig_memory_order_acq_rel __ATOMIC_ACQ_REL |
| 3590 | #define memory_order_acq_rel __ATOMIC_ACQ_REL | 3635 | #define zig_memory_order_seq_cst __ATOMIC_SEQ_CST |
| 3591 | #define memory_order_seq_cst __ATOMIC_SEQ_CST | | |
| 3592 | #define zig_atomic(Type) Type | 3636 | #define zig_atomic(Type) Type |
| 3593 | #define zig_cmpxchg_strong( obj, expected, desired, succ, fail, Type, ReprType) __atomic_compare_exchange(obj, &(expected), &(desired), false, succ, fail) | 3637 | #define zig_cmpxchg_strong( obj, expected, desired, succ, fail, Type, ReprType) __atomic_compare_exchange(obj, &(expected), &(desired), false, succ, fail) |
| 3594 | #define zig_cmpxchg_weak( obj, expected, desired, succ, fail, Type, ReprType) __atomic_compare_exchange(obj, &(expected), &(desired), true, succ, fail) | 3638 | #define zig_cmpxchg_weak( obj, expected, desired, succ, fail, Type, ReprType) __atomic_compare_exchange(obj, &(expected), &(desired), true, succ, fail) |
| ... | @@ -3607,12 +3651,11 @@ typedef int zig_memory_order; | ... | @@ -3607,12 +3651,11 @@ typedef int zig_memory_order; |
| 3607 | #define zig_atomicrmw_xchg_float zig_atomicrmw_xchg | 3651 | #define zig_atomicrmw_xchg_float zig_atomicrmw_xchg |
| 3608 | #define zig_fence(order) __atomic_thread_fence(order) | 3652 | #define zig_fence(order) __atomic_thread_fence(order) |
| 3609 | #elif _MSC_VER && (_M_IX86 || _M_X64) | 3653 | #elif _MSC_VER && (_M_IX86 || _M_X64) |
| 3610 | #define memory_order_relaxed 0 | 3654 | #define zig_memory_order_relaxed 0 |
| 3611 | #define memory_order_consume 1 | 3655 | #define zig_memory_order_acquire 2 |
| 3612 | #define memory_order_acquire 2 | 3656 | #define zig_memory_order_release 3 |
| 3613 | #define memory_order_release 3 | 3657 | #define zig_memory_order_acq_rel 4 |
| 3614 | #define memory_order_acq_rel 4 | 3658 | #define zig_memory_order_seq_cst 5 |
| 3615 | #define memory_order_seq_cst 5 | | |
| 3616 | #define zig_atomic(Type) Type | 3659 | #define zig_atomic(Type) Type |
| 3617 | #define zig_cmpxchg_strong( obj, expected, desired, succ, fail, Type, ReprType) zig_msvc_cmpxchg_##Type(obj, &(expected), desired) | 3660 | #define zig_cmpxchg_strong( obj, expected, desired, succ, fail, Type, ReprType) zig_msvc_cmpxchg_##Type(obj, &(expected), desired) |
| 3618 | #define zig_cmpxchg_weak( obj, expected, desired, succ, fail, Type, ReprType) zig_cmpxchg_strong(obj, expected, desired, succ, fail, Type, ReprType) | 3661 | #define zig_cmpxchg_weak( obj, expected, desired, succ, fail, Type, ReprType) zig_cmpxchg_strong(obj, expected, desired, succ, fail, Type, ReprType) |
| ... | @@ -3634,12 +3677,11 @@ typedef int zig_memory_order; | ... | @@ -3634,12 +3677,11 @@ typedef int zig_memory_order; |
| 3634 | #endif | 3677 | #endif |
| 3635 | /* TODO: _MSC_VER && (_M_ARM || _M_ARM64) */ | 3678 | /* TODO: _MSC_VER && (_M_ARM || _M_ARM64) */ |
| 3636 | #else | 3679 | #else |
| 3637 | #define memory_order_relaxed 0 | 3680 | #define zig_memory_order_relaxed 0 |
| 3638 | #define memory_order_consume 1 | 3681 | #define zig_memory_order_acquire 2 |
| 3639 | #define memory_order_acquire 2 | 3682 | #define zig_memory_order_release 3 |
| 3640 | #define memory_order_release 3 | 3683 | #define zig_memory_order_acq_rel 4 |
| 3641 | #define memory_order_acq_rel 4 | 3684 | #define zig_memory_order_seq_cst 5 |
| 3642 | #define memory_order_seq_cst 5 | | |
| 3643 | #define zig_atomic(Type) Type | 3685 | #define zig_atomic(Type) Type |
| 3644 | #define zig_cmpxchg_strong( obj, expected, desired, succ, fail, Type, ReprType) zig_atomics_unavailable | 3686 | #define zig_cmpxchg_strong( obj, expected, desired, succ, fail, Type, ReprType) zig_atomics_unavailable |
| 3645 | #define zig_cmpxchg_weak( obj, expected, desired, succ, fail, Type, ReprType) zig_atomics_unavailable | 3687 | #define zig_cmpxchg_weak( obj, expected, desired, succ, fail, Type, ReprType) zig_atomics_unavailable |
| ... | @@ -3830,9 +3872,32 @@ static inline bool zig_msvc_cmpxchg_u128(zig_u128 volatile* obj, zig_u128* expec | ... | @@ -3830,9 +3872,32 @@ static inline bool zig_msvc_cmpxchg_u128(zig_u128 volatile* obj, zig_u128* expec |
| 3830 | return _InterlockedCompareExchange128((__int64 volatile*)obj, (__int64)zig_hi_u128(desired), (__int64)zig_lo_u128(desired), (__int64*)expected); | 3872 | return _InterlockedCompareExchange128((__int64 volatile*)obj, (__int64)zig_hi_u128(desired), (__int64)zig_lo_u128(desired), (__int64*)expected); |
| 3831 | } | 3873 | } |
| 3832 | | 3874 | |
| | 3875 | static inline zig_u128 zig_msvc_atomic_load_u128(zig_u128 volatile* obj) { |
| | 3876 | zig_u128 expected = zig_make_u128(UINT64_C(0), UINT64_C(0)); |
| | 3877 | (void)zig_cmpxchg_strong(obj, expected, expected, zig_memory_order_seq_cst, zig_memory_order_seq_cst, u128, zig_u128); |
| | 3878 | return expected; |
| | 3879 | } |
| | 3880 | |
| | 3881 | static inline void zig_msvc_atomic_store_u128(zig_u128 volatile* obj, zig_u128 arg) { |
| | 3882 | zig_u128 expected = zig_make_u128(UINT64_C(0), UINT64_C(0)); |
| | 3883 | while (!zig_cmpxchg_weak(obj, expected, arg, zig_memory_order_seq_cst, zig_memory_order_seq_cst, u128, zig_u128)); |
| | 3884 | } |
| | 3885 | |
| 3833 | static inline bool zig_msvc_cmpxchg_i128(zig_i128 volatile* obj, zig_i128* expected, zig_i128 desired) { | 3886 | static inline bool zig_msvc_cmpxchg_i128(zig_i128 volatile* obj, zig_i128* expected, zig_i128 desired) { |
| 3834 | return _InterlockedCompareExchange128((__int64 volatile*)obj, (__int64)zig_hi_i128(desired), (__int64)zig_lo_i128(desired), (__int64*)expected); | 3887 | return _InterlockedCompareExchange128((__int64 volatile*)obj, (__int64)zig_hi_i128(desired), (__int64)zig_lo_i128(desired), (__int64*)expected); |
| 3835 | } | 3888 | } |
| | 3889 | |
| | 3890 | static inline zig_i128 zig_msvc_atomic_load_i128(zig_i128 volatile* obj) { |
| | 3891 | zig_i128 expected = zig_make_i128(INT64_C(0), UINT64_C(0)); |
| | 3892 | (void)zig_cmpxchg_strong(obj, expected, expected, zig_memory_order_seq_cst, zig_memory_order_seq_cst, i128, zig_i128); |
| | 3893 | return expected; |
| | 3894 | } |
| | 3895 | |
| | 3896 | static inline void zig_msvc_atomic_store_i128(zig_i128 volatile* obj, zig_i128 arg) { |
| | 3897 | zig_i128 expected = zig_make_i128(INT64_C(0), UINT64_C(0)); |
| | 3898 | while (!zig_cmpxchg_weak(obj, expected, arg, zig_memory_order_seq_cst, zig_memory_order_seq_cst, i128, zig_i128)); |
| | 3899 | } |
| | 3900 | |
| 3836 | #endif /* _M_IX86 */ | 3901 | #endif /* _M_IX86 */ |
| 3837 | | 3902 | |
| 3838 | #endif /* _MSC_VER && (_M_IX86 || _M_X64) */ | 3903 | #endif /* _MSC_VER && (_M_IX86 || _M_X64) */ |