authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-03-16 17:05:46+01:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-03-17 03:25:56+01:00
logedeed592eeed151780ae8a0b13c3d4d17c3f93b2
treefc34ece9021e2f2fefecbee7f84bfb737626b9fd
parente646e0116196c2bd9668317366f5380f08c30e6e

update zig1.wasm

Removes `std.builtin.Type.Fn.alignment`.

2 files changed, 157 insertions(+), 92 deletions(-)

stage1/zig.h+157-92
...@@ -25,11 +25,15 @@ typedef char bool;...@@ -25,11 +25,15 @@ typedef char bool;
25#endif25#endif
26#endif26#endif
2727
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#else33#else
31#define zig_has_builtin(builtin) 034#define zig_has_builtin(builtin) 0
32#endif35#endif
36#define zig_expand_has_builtin(b) zig_has_builtin(b)
3337
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_unavailable116#define zig_never_tail zig_never_tail_unavailable
113#endif117#endif
114118
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#else121#else
118#define zig_always_tail zig_always_tail_unavailable122#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 extern184#define zig_extern extern
181#endif185#endif
182186
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_X64188#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#else206#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#endif209#endif
196210
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#endif310#endif
269311
270#define zig_concat(lhs, rhs) lhs##rhs
271#define zig_expand_concat(lhs, rhs) zig_concat(lhs, rhs)
272
273#if __STDC_VERSION__ >= 201112L312#if __STDC_VERSION__ >= 201112L
274#define zig_noreturn _Noreturn313#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;
21682207
2169#if zig_big_endian2208#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#endif2210#endif
21722211
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);
21752214
2176#if zig_big_endian2215#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 }
22122251
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);
22152254
2216#if zig_big_endian2255#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 }
22522291
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);
22552294
2256#if zig_big_endian2295#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 }
22922331
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);
22952334
2296#if zig_big_endian2335#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 }
23322371
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);
23352374
2336#if zig_big_endian2375#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;
23842423
2385#if zig_big_endian2424#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#endif2426#endif
23882427
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);
23912430
2392#if zig_big_endian2431#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 }
24282467
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);
24312470
2432#if zig_big_endian2471#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 }
24682507
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);
24712510
2472#if zig_big_endian2511#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 }
25082547
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);
25112550
2512#if zig_big_endian2551#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 }
25482587
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);
25512590
2552#if zig_big_endian2591#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;
30933132
3094#define zig_has_f64 13133#define zig_has_f64 1
3095#define zig_libc_name_f64(name) name3134#define zig_libc_name_f64(name) name
3135
3096#if _MSC_VER3136#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#else3138#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)
34803520
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)
35593599
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>
3562typedef enum memory_order zig_memory_order;3602typedef 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__)
3585typedef int zig_memory_order;3630typedef int zig_memory_order;
3586#define memory_order_relaxed __ATOMIC_RELAXED3631#define zig_memory_order_relaxed __ATOMIC_RELAXED
3587#define memory_order_consume __ATOMIC_CONSUME3632#define zig_memory_order_acquire __ATOMIC_ACQUIRE
3588#define memory_order_acquire __ATOMIC_ACQUIRE3633#define zig_memory_order_release __ATOMIC_RELEASE
3589#define memory_order_release __ATOMIC_RELEASE3634#define zig_memory_order_acq_rel __ATOMIC_ACQ_REL
3590#define memory_order_acq_rel __ATOMIC_ACQ_REL3635#define zig_memory_order_seq_cst __ATOMIC_SEQ_CST
3591#define memory_order_seq_cst __ATOMIC_SEQ_CST
3592#define zig_atomic(Type) Type3636#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_xchg3651#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 03654#define zig_memory_order_relaxed 0
3611#define memory_order_consume 13655#define zig_memory_order_acquire 2
3612#define memory_order_acquire 23656#define zig_memory_order_release 3
3613#define memory_order_release 33657#define zig_memory_order_acq_rel 4
3614#define memory_order_acq_rel 43658#define zig_memory_order_seq_cst 5
3615#define memory_order_seq_cst 5
3616#define zig_atomic(Type) Type3659#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#endif3677#endif
3635/* TODO: _MSC_VER && (_M_ARM || _M_ARM64) */3678/* TODO: _MSC_VER && (_M_ARM || _M_ARM64) */
3636#else3679#else
3637#define memory_order_relaxed 03680#define zig_memory_order_relaxed 0
3638#define memory_order_consume 13681#define zig_memory_order_acquire 2
3639#define memory_order_acquire 23682#define zig_memory_order_release 3
3640#define memory_order_release 33683#define zig_memory_order_acq_rel 4
3641#define memory_order_acq_rel 43684#define zig_memory_order_seq_cst 5
3642#define memory_order_seq_cst 5
3643#define zig_atomic(Type) Type3685#define zig_atomic(Type) Type
3644#define zig_cmpxchg_strong( obj, expected, desired, succ, fail, Type, ReprType) zig_atomics_unavailable3686#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_unavailable3687#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}
38323874
3875static 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
3881static 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
3833static inline bool zig_msvc_cmpxchg_i128(zig_i128 volatile* obj, zig_i128* expected, zig_i128 desired) {3886static 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
3890static 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
3896static 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 */
38373902
3838#endif /* _MSC_VER && (_M_IX86 || _M_X64) */3903#endif /* _MSC_VER && (_M_IX86 || _M_X64) */
stage1/zig1.wasm
Binary files a/stage1/zig1.wasm and b/stage1/zig1.wasm differ