authorgravatar for michael.dusan@gmail.comMichael Dusan <michael.dusan@gmail.com> 2023-01-05 11:36:51-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-01-05 15:25:35-07:00
log176940b5045ff0c9b20f9951dca34b2a1bb7edc0
treee3fff85e35287cf106f194ec55b512d823f35d6b
parent1878bdfbb127321d327ce3cfd8ec148959302b95

zig.h: do not assume __GNUC__ is not clang

A followup to 5bd69c655d9e04102c8a64ced1215c9d69f4f03f . For compatibility purposes clang defines __GNUC__. This broke logic where clang14 __has_builtin returns false but `|| defined(__GNUC__)` made it true. CI did not catch this because it uses clang15. However, bootstrapping with latest apple compiler is clang14. We also want to support older clang.

1 files changed, 45 insertions(+), 39 deletions(-)

lib/zig.h+45-39
...@@ -44,13 +44,19 @@ typedef char bool;...@@ -44,13 +44,19 @@ typedef char bool;
44#define zig_threadlocal zig_threadlocal_unavailable44#define zig_threadlocal zig_threadlocal_unavailable
45#endif45#endif
4646
47#if defined(__clang__)
48#define zig_clang
49#elif defined(__GNUC__)
50#define zig_gnuc
51#endif
52
47#if _MSC_VER53#if _MSC_VER
48#define zig_const_arr54#define zig_const_arr
49#else55#else
50#define zig_const_arr static const56#define zig_const_arr static const
51#endif57#endif
5258
53#if zig_has_attribute(naked) || defined(__GNUC__)59#if zig_has_attribute(naked) || defined(zig_gnuc)
54#define zig_naked __attribute__((naked))60#define zig_naked __attribute__((naked))
55#elif defined(_MSC_VER)61#elif defined(_MSC_VER)
56#define zig_naked __declspec(naked)62#define zig_naked __declspec(naked)
...@@ -90,7 +96,7 @@ typedef char bool;...@@ -90,7 +96,7 @@ typedef char bool;
90#define zig_align_fn zig_align_fn_unavailable96#define zig_align_fn zig_align_fn_unavailable
91#endif97#endif
9298
93#if zig_has_builtin(unreachable) || defined(__GNUC__)99#if zig_has_builtin(unreachable) || defined(zig_gnuc)
94#define zig_unreachable() __builtin_unreachable()100#define zig_unreachable() __builtin_unreachable()
95#else101#else
96#define zig_unreachable()102#define zig_unreachable()
...@@ -113,7 +119,7 @@ typedef char bool;...@@ -113,7 +119,7 @@ typedef char bool;
113119
114#if zig_has_builtin(debugtrap)120#if zig_has_builtin(debugtrap)
115#define zig_breakpoint() __builtin_debugtrap()121#define zig_breakpoint() __builtin_debugtrap()
116#elif zig_has_builtin(trap) || defined(__GNUC__)122#elif zig_has_builtin(trap) || defined(zig_gnuc)
117#define zig_breakpoint() __builtin_trap()123#define zig_breakpoint() __builtin_trap()
118#elif defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__)124#elif defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__)
119#define zig_breakpoint() __debugbreak()125#define zig_breakpoint() __debugbreak()
...@@ -123,7 +129,7 @@ typedef char bool;...@@ -123,7 +129,7 @@ typedef char bool;
123#define zig_breakpoint() raise(SIGTRAP)129#define zig_breakpoint() raise(SIGTRAP)
124#endif130#endif
125131
126#if zig_has_builtin(return_address) || defined(__GNUC__)132#if zig_has_builtin(return_address) || defined(zig_gnuc)
127#define zig_return_address() __builtin_extract_return_addr(__builtin_return_address(0))133#define zig_return_address() __builtin_extract_return_addr(__builtin_return_address(0))
128#elif defined(_MSC_VER)134#elif defined(_MSC_VER)
129#define zig_return_address() _ReturnAddress()135#define zig_return_address() _ReturnAddress()
...@@ -131,13 +137,13 @@ typedef char bool;...@@ -131,13 +137,13 @@ typedef char bool;
131#define zig_return_address() 0137#define zig_return_address() 0
132#endif138#endif
133139
134#if zig_has_builtin(frame_address) || defined(__GNUC__)140#if zig_has_builtin(frame_address) || defined(zig_gnuc)
135#define zig_frame_address() __builtin_frame_address(0)141#define zig_frame_address() __builtin_frame_address(0)
136#else142#else
137#define zig_frame_address() 0143#define zig_frame_address() 0
138#endif144#endif
139145
140#if zig_has_builtin(prefetch) || defined(__GNUC__)146#if zig_has_builtin(prefetch) || defined(zig_gnuc)
141#define zig_prefetch(addr, rw, locality) __builtin_prefetch(addr, rw, locality)147#define zig_prefetch(addr, rw, locality) __builtin_prefetch(addr, rw, locality)
142#else148#else
143#define zig_prefetch(addr, rw, locality)149#define zig_prefetch(addr, rw, locality)
...@@ -242,7 +248,7 @@ typedef char bool;...@@ -242,7 +248,7 @@ typedef char bool;
242248
243#if __STDC_VERSION__ >= 201112L249#if __STDC_VERSION__ >= 201112L
244#define zig_noreturn _Noreturn void250#define zig_noreturn _Noreturn void
245#elif zig_has_attribute(noreturn) || defined(__GNUC__)251#elif zig_has_attribute(noreturn) || defined(zig_gnuc)
246#define zig_noreturn __attribute__((noreturn)) void252#define zig_noreturn __attribute__((noreturn)) void
247#elif _MSC_VER253#elif _MSC_VER
248#define zig_noreturn __declspec(noreturn) void254#define zig_noreturn __declspec(noreturn) void
...@@ -412,7 +418,7 @@ zig_int_helpers(32)...@@ -412,7 +418,7 @@ zig_int_helpers(32)
412zig_int_helpers(64)418zig_int_helpers(64)
413419
414static inline bool zig_addo_u32(zig_u32 *res, zig_u32 lhs, zig_u32 rhs, zig_u8 bits) {420static inline bool zig_addo_u32(zig_u32 *res, zig_u32 lhs, zig_u32 rhs, zig_u8 bits) {
415#if zig_has_builtin(add_overflow) || defined(__GNUC__)421#if zig_has_builtin(add_overflow) || defined(zig_gnuc)
416 zig_u32 full_res;422 zig_u32 full_res;
417 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);423 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
418 *res = zig_wrap_u32(full_res, bits);424 *res = zig_wrap_u32(full_res, bits);
...@@ -431,7 +437,7 @@ static inline void zig_vaddo_u32(zig_u8 *ov, zig_u32 *res, int n,...@@ -431,7 +437,7 @@ static inline void zig_vaddo_u32(zig_u8 *ov, zig_u32 *res, int n,
431437
432zig_extern zig_i32 __addosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow);438zig_extern zig_i32 __addosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow);
433static inline bool zig_addo_i32(zig_i32 *res, zig_i32 lhs, zig_i32 rhs, zig_u8 bits) {439static inline bool zig_addo_i32(zig_i32 *res, zig_i32 lhs, zig_i32 rhs, zig_u8 bits) {
434#if zig_has_builtin(add_overflow) || defined(__GNUC__)440#if zig_has_builtin(add_overflow) || defined(zig_gnuc)
435 zig_i32 full_res;441 zig_i32 full_res;
436 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);442 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
437#else443#else
...@@ -450,7 +456,7 @@ static inline void zig_vaddo_i32(zig_u8 *ov, zig_i32 *res, int n,...@@ -450,7 +456,7 @@ static inline void zig_vaddo_i32(zig_u8 *ov, zig_i32 *res, int n,
450}456}
451457
452static inline bool zig_addo_u64(zig_u64 *res, zig_u64 lhs, zig_u64 rhs, zig_u8 bits) {458static inline bool zig_addo_u64(zig_u64 *res, zig_u64 lhs, zig_u64 rhs, zig_u8 bits) {
453#if zig_has_builtin(add_overflow) || defined(__GNUC__)459#if zig_has_builtin(add_overflow) || defined(zig_gnuc)
454 zig_u64 full_res;460 zig_u64 full_res;
455 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);461 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
456 *res = zig_wrap_u64(full_res, bits);462 *res = zig_wrap_u64(full_res, bits);
...@@ -469,7 +475,7 @@ static inline void zig_vaddo_u64(zig_u8 *ov, zig_u64 *res, int n,...@@ -469,7 +475,7 @@ static inline void zig_vaddo_u64(zig_u8 *ov, zig_u64 *res, int n,
469475
470zig_extern zig_i64 __addodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow);476zig_extern zig_i64 __addodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow);
471static inline bool zig_addo_i64(zig_i64 *res, zig_i64 lhs, zig_i64 rhs, zig_u8 bits) {477static inline bool zig_addo_i64(zig_i64 *res, zig_i64 lhs, zig_i64 rhs, zig_u8 bits) {
472#if zig_has_builtin(add_overflow) || defined(__GNUC__)478#if zig_has_builtin(add_overflow) || defined(zig_gnuc)
473 zig_i64 full_res;479 zig_i64 full_res;
474 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);480 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
475#else481#else
...@@ -488,7 +494,7 @@ static inline void zig_vaddo_i64(zig_u8 *ov, zig_i64 *res, int n,...@@ -488,7 +494,7 @@ static inline void zig_vaddo_i64(zig_u8 *ov, zig_i64 *res, int n,
488}494}
489495
490static inline bool zig_addo_u8(zig_u8 *res, zig_u8 lhs, zig_u8 rhs, zig_u8 bits) {496static inline bool zig_addo_u8(zig_u8 *res, zig_u8 lhs, zig_u8 rhs, zig_u8 bits) {
491#if zig_has_builtin(add_overflow) || defined(__GNUC__)497#if zig_has_builtin(add_overflow) || defined(zig_gnuc)
492 zig_u8 full_res;498 zig_u8 full_res;
493 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);499 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
494 *res = zig_wrap_u8(full_res, bits);500 *res = zig_wrap_u8(full_res, bits);
...@@ -508,7 +514,7 @@ static inline void zig_vaddo_u8(zig_u8 *ov, zig_u8 *res, int n,...@@ -508,7 +514,7 @@ static inline void zig_vaddo_u8(zig_u8 *ov, zig_u8 *res, int n,
508}514}
509515
510static inline bool zig_addo_i8(zig_i8 *res, zig_i8 lhs, zig_i8 rhs, zig_u8 bits) {516static inline bool zig_addo_i8(zig_i8 *res, zig_i8 lhs, zig_i8 rhs, zig_u8 bits) {
511#if zig_has_builtin(add_overflow) || defined(__GNUC__)517#if zig_has_builtin(add_overflow) || defined(zig_gnuc)
512 zig_i8 full_res;518 zig_i8 full_res;
513 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);519 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
514 *res = zig_wrap_i8(full_res, bits);520 *res = zig_wrap_i8(full_res, bits);
...@@ -528,7 +534,7 @@ static inline void zig_vaddo_i8(zig_u8 *ov, zig_i8 *res, int n,...@@ -528,7 +534,7 @@ static inline void zig_vaddo_i8(zig_u8 *ov, zig_i8 *res, int n,
528}534}
529535
530static inline bool zig_addo_u16(zig_u16 *res, zig_u16 lhs, zig_u16 rhs, zig_u8 bits) {536static inline bool zig_addo_u16(zig_u16 *res, zig_u16 lhs, zig_u16 rhs, zig_u8 bits) {
531#if zig_has_builtin(add_overflow) || defined(__GNUC__)537#if zig_has_builtin(add_overflow) || defined(zig_gnuc)
532 zig_u16 full_res;538 zig_u16 full_res;
533 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);539 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
534 *res = zig_wrap_u16(full_res, bits);540 *res = zig_wrap_u16(full_res, bits);
...@@ -548,7 +554,7 @@ static inline void zig_vaddo_u16(zig_u8 *ov, zig_u16 *res, int n,...@@ -548,7 +554,7 @@ static inline void zig_vaddo_u16(zig_u8 *ov, zig_u16 *res, int n,
548}554}
549555
550static inline bool zig_addo_i16(zig_i16 *res, zig_i16 lhs, zig_i16 rhs, zig_u8 bits) {556static inline bool zig_addo_i16(zig_i16 *res, zig_i16 lhs, zig_i16 rhs, zig_u8 bits) {
551#if zig_has_builtin(add_overflow) || defined(__GNUC__)557#if zig_has_builtin(add_overflow) || defined(zig_gnuc)
552 zig_i16 full_res;558 zig_i16 full_res;
553 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);559 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
554 *res = zig_wrap_i16(full_res, bits);560 *res = zig_wrap_i16(full_res, bits);
...@@ -568,7 +574,7 @@ static inline void zig_vaddo_i16(zig_u8 *ov, zig_i16 *res, int n,...@@ -568,7 +574,7 @@ static inline void zig_vaddo_i16(zig_u8 *ov, zig_i16 *res, int n,
568}574}
569575
570static inline bool zig_subo_u32(zig_u32 *res, zig_u32 lhs, zig_u32 rhs, zig_u8 bits) {576static inline bool zig_subo_u32(zig_u32 *res, zig_u32 lhs, zig_u32 rhs, zig_u8 bits) {
571#if zig_has_builtin(sub_overflow) || defined(__GNUC__)577#if zig_has_builtin(sub_overflow) || defined(zig_gnuc)
572 zig_u32 full_res;578 zig_u32 full_res;
573 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);579 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
574 *res = zig_wrap_u32(full_res, bits);580 *res = zig_wrap_u32(full_res, bits);
...@@ -587,7 +593,7 @@ static inline void zig_vsubo_u32(zig_u8 *ov, zig_u32 *res, int n,...@@ -587,7 +593,7 @@ static inline void zig_vsubo_u32(zig_u8 *ov, zig_u32 *res, int n,
587593
588zig_extern zig_i32 __subosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow);594zig_extern zig_i32 __subosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow);
589static inline bool zig_subo_i32(zig_i32 *res, zig_i32 lhs, zig_i32 rhs, zig_u8 bits) {595static inline bool zig_subo_i32(zig_i32 *res, zig_i32 lhs, zig_i32 rhs, zig_u8 bits) {
590#if zig_has_builtin(sub_overflow) || defined(__GNUC__)596#if zig_has_builtin(sub_overflow) || defined(zig_gnuc)
591 zig_i32 full_res;597 zig_i32 full_res;
592 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);598 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
593#else599#else
...@@ -606,7 +612,7 @@ static inline void zig_vsubo_i32(zig_u8 *ov, zig_i32 *res, int n,...@@ -606,7 +612,7 @@ static inline void zig_vsubo_i32(zig_u8 *ov, zig_i32 *res, int n,
606}612}
607613
608static inline bool zig_subo_u64(zig_u64 *res, zig_u64 lhs, zig_u64 rhs, zig_u8 bits) {614static inline bool zig_subo_u64(zig_u64 *res, zig_u64 lhs, zig_u64 rhs, zig_u8 bits) {
609#if zig_has_builtin(sub_overflow) || defined(__GNUC__)615#if zig_has_builtin(sub_overflow) || defined(zig_gnuc)
610 zig_u64 full_res;616 zig_u64 full_res;
611 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);617 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
612 *res = zig_wrap_u64(full_res, bits);618 *res = zig_wrap_u64(full_res, bits);
...@@ -625,7 +631,7 @@ static inline void zig_vsubo_u64(zig_u8 *ov, zig_u64 *res, int n,...@@ -625,7 +631,7 @@ static inline void zig_vsubo_u64(zig_u8 *ov, zig_u64 *res, int n,
625631
626zig_extern zig_i64 __subodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow);632zig_extern zig_i64 __subodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow);
627static inline bool zig_subo_i64(zig_i64 *res, zig_i64 lhs, zig_i64 rhs, zig_u8 bits) {633static inline bool zig_subo_i64(zig_i64 *res, zig_i64 lhs, zig_i64 rhs, zig_u8 bits) {
628#if zig_has_builtin(sub_overflow) || defined(__GNUC__)634#if zig_has_builtin(sub_overflow) || defined(zig_gnuc)
629 zig_i64 full_res;635 zig_i64 full_res;
630 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);636 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
631#else637#else
...@@ -644,7 +650,7 @@ static inline void zig_vsubo_i64(zig_u8 *ov, zig_i64 *res, int n,...@@ -644,7 +650,7 @@ static inline void zig_vsubo_i64(zig_u8 *ov, zig_i64 *res, int n,
644}650}
645651
646static inline bool zig_subo_u8(zig_u8 *res, zig_u8 lhs, zig_u8 rhs, zig_u8 bits) {652static inline bool zig_subo_u8(zig_u8 *res, zig_u8 lhs, zig_u8 rhs, zig_u8 bits) {
647#if zig_has_builtin(sub_overflow) || defined(__GNUC__)653#if zig_has_builtin(sub_overflow) || defined(zig_gnuc)
648 zig_u8 full_res;654 zig_u8 full_res;
649 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);655 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
650 *res = zig_wrap_u8(full_res, bits);656 *res = zig_wrap_u8(full_res, bits);
...@@ -664,7 +670,7 @@ static inline void zig_vsubo_u8(zig_u8 *ov, zig_u8 *res, int n,...@@ -664,7 +670,7 @@ static inline void zig_vsubo_u8(zig_u8 *ov, zig_u8 *res, int n,
664}670}
665671
666static inline bool zig_subo_i8(zig_i8 *res, zig_i8 lhs, zig_i8 rhs, zig_u8 bits) {672static inline bool zig_subo_i8(zig_i8 *res, zig_i8 lhs, zig_i8 rhs, zig_u8 bits) {
667#if zig_has_builtin(sub_overflow) || defined(__GNUC__)673#if zig_has_builtin(sub_overflow) || defined(zig_gnuc)
668 zig_i8 full_res;674 zig_i8 full_res;
669 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);675 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
670 *res = zig_wrap_i8(full_res, bits);676 *res = zig_wrap_i8(full_res, bits);
...@@ -685,7 +691,7 @@ static inline void zig_vsubo_i8(zig_u8 *ov, zig_i8 *res, int n,...@@ -685,7 +691,7 @@ static inline void zig_vsubo_i8(zig_u8 *ov, zig_i8 *res, int n,
685691
686692
687static inline bool zig_subo_u16(zig_u16 *res, zig_u16 lhs, zig_u16 rhs, zig_u8 bits) {693static inline bool zig_subo_u16(zig_u16 *res, zig_u16 lhs, zig_u16 rhs, zig_u8 bits) {
688#if zig_has_builtin(sub_overflow) || defined(__GNUC__)694#if zig_has_builtin(sub_overflow) || defined(zig_gnuc)
689 zig_u16 full_res;695 zig_u16 full_res;
690 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);696 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
691 *res = zig_wrap_u16(full_res, bits);697 *res = zig_wrap_u16(full_res, bits);
...@@ -706,7 +712,7 @@ static inline void zig_vsubo_u16(zig_u8 *ov, zig_u16 *res, int n,...@@ -706,7 +712,7 @@ static inline void zig_vsubo_u16(zig_u8 *ov, zig_u16 *res, int n,
706712
707713
708static inline bool zig_subo_i16(zig_i16 *res, zig_i16 lhs, zig_i16 rhs, zig_u8 bits) {714static inline bool zig_subo_i16(zig_i16 *res, zig_i16 lhs, zig_i16 rhs, zig_u8 bits) {
709#if zig_has_builtin(sub_overflow) || defined(__GNUC__)715#if zig_has_builtin(sub_overflow) || defined(zig_gnuc)
710 zig_i16 full_res;716 zig_i16 full_res;
711 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);717 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
712 *res = zig_wrap_i16(full_res, bits);718 *res = zig_wrap_i16(full_res, bits);
...@@ -726,7 +732,7 @@ static inline void zig_vsubo_i16(zig_u8 *ov, zig_i16 *res, int n,...@@ -726,7 +732,7 @@ static inline void zig_vsubo_i16(zig_u8 *ov, zig_i16 *res, int n,
726}732}
727733
728static inline bool zig_mulo_u32(zig_u32 *res, zig_u32 lhs, zig_u32 rhs, zig_u8 bits) {734static inline bool zig_mulo_u32(zig_u32 *res, zig_u32 lhs, zig_u32 rhs, zig_u8 bits) {
729#if zig_has_builtin(mul_overflow) || defined(__GNUC__)735#if zig_has_builtin(mul_overflow) || defined(zig_gnuc)
730 zig_u32 full_res;736 zig_u32 full_res;
731 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);737 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
732 *res = zig_wrap_u32(full_res, bits);738 *res = zig_wrap_u32(full_res, bits);
...@@ -745,7 +751,7 @@ static inline void zig_vmulo_u32(zig_u8 *ov, zig_u32 *res, int n,...@@ -745,7 +751,7 @@ static inline void zig_vmulo_u32(zig_u8 *ov, zig_u32 *res, int n,
745751
746zig_extern zig_i32 __mulosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow);752zig_extern zig_i32 __mulosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow);
747static inline bool zig_mulo_i32(zig_i32 *res, zig_i32 lhs, zig_i32 rhs, zig_u8 bits) {753static inline bool zig_mulo_i32(zig_i32 *res, zig_i32 lhs, zig_i32 rhs, zig_u8 bits) {
748#if zig_has_builtin(mul_overflow) || defined(__GNUC__)754#if zig_has_builtin(mul_overflow) || defined(zig_gnuc)
749 zig_i32 full_res;755 zig_i32 full_res;
750 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);756 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
751#else757#else
...@@ -764,7 +770,7 @@ static inline void zig_vmulo_i32(zig_u8 *ov, zig_i32 *res, int n,...@@ -764,7 +770,7 @@ static inline void zig_vmulo_i32(zig_u8 *ov, zig_i32 *res, int n,
764}770}
765771
766static inline bool zig_mulo_u64(zig_u64 *res, zig_u64 lhs, zig_u64 rhs, zig_u8 bits) {772static inline bool zig_mulo_u64(zig_u64 *res, zig_u64 lhs, zig_u64 rhs, zig_u8 bits) {
767#if zig_has_builtin(mul_overflow) || defined(__GNUC__)773#if zig_has_builtin(mul_overflow) || defined(zig_gnuc)
768 zig_u64 full_res;774 zig_u64 full_res;
769 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);775 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
770 *res = zig_wrap_u64(full_res, bits);776 *res = zig_wrap_u64(full_res, bits);
...@@ -783,7 +789,7 @@ static inline void zig_vmulo_u64(zig_u8 *ov, zig_u64 *res, int n,...@@ -783,7 +789,7 @@ static inline void zig_vmulo_u64(zig_u8 *ov, zig_u64 *res, int n,
783789
784zig_extern zig_i64 __mulodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow);790zig_extern zig_i64 __mulodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow);
785static inline bool zig_mulo_i64(zig_i64 *res, zig_i64 lhs, zig_i64 rhs, zig_u8 bits) {791static inline bool zig_mulo_i64(zig_i64 *res, zig_i64 lhs, zig_i64 rhs, zig_u8 bits) {
786#if zig_has_builtin(mul_overflow) || defined(__GNUC__)792#if zig_has_builtin(mul_overflow) || defined(zig_gnuc)
787 zig_i64 full_res;793 zig_i64 full_res;
788 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);794 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
789#else795#else
...@@ -802,7 +808,7 @@ static inline void zig_vmulo_i64(zig_u8 *ov, zig_i64 *res, int n,...@@ -802,7 +808,7 @@ static inline void zig_vmulo_i64(zig_u8 *ov, zig_i64 *res, int n,
802}808}
803809
804static inline bool zig_mulo_u8(zig_u8 *res, zig_u8 lhs, zig_u8 rhs, zig_u8 bits) {810static inline bool zig_mulo_u8(zig_u8 *res, zig_u8 lhs, zig_u8 rhs, zig_u8 bits) {
805#if zig_has_builtin(mul_overflow) || defined(__GNUC__)811#if zig_has_builtin(mul_overflow) || defined(zig_gnuc)
806 zig_u8 full_res;812 zig_u8 full_res;
807 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);813 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
808 *res = zig_wrap_u8(full_res, bits);814 *res = zig_wrap_u8(full_res, bits);
...@@ -822,7 +828,7 @@ static inline void zig_vmulo_u8(zig_u8 *ov, zig_u8 *res, int n,...@@ -822,7 +828,7 @@ static inline void zig_vmulo_u8(zig_u8 *ov, zig_u8 *res, int n,
822}828}
823829
824static inline bool zig_mulo_i8(zig_i8 *res, zig_i8 lhs, zig_i8 rhs, zig_u8 bits) {830static inline bool zig_mulo_i8(zig_i8 *res, zig_i8 lhs, zig_i8 rhs, zig_u8 bits) {
825#if zig_has_builtin(mul_overflow) || defined(__GNUC__)831#if zig_has_builtin(mul_overflow) || defined(zig_gnuc)
826 zig_i8 full_res;832 zig_i8 full_res;
827 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);833 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
828 *res = zig_wrap_i8(full_res, bits);834 *res = zig_wrap_i8(full_res, bits);
...@@ -842,7 +848,7 @@ static inline void zig_vmulo_i8(zig_u8 *ov, zig_i8 *res, int n,...@@ -842,7 +848,7 @@ static inline void zig_vmulo_i8(zig_u8 *ov, zig_i8 *res, int n,
842}848}
843849
844static inline bool zig_mulo_u16(zig_u16 *res, zig_u16 lhs, zig_u16 rhs, zig_u8 bits) {850static inline bool zig_mulo_u16(zig_u16 *res, zig_u16 lhs, zig_u16 rhs, zig_u8 bits) {
845#if zig_has_builtin(mul_overflow) || defined(__GNUC__)851#if zig_has_builtin(mul_overflow) || defined(zig_gnuc)
846 zig_u16 full_res;852 zig_u16 full_res;
847 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);853 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
848 *res = zig_wrap_u16(full_res, bits);854 *res = zig_wrap_u16(full_res, bits);
...@@ -862,7 +868,7 @@ static inline void zig_vmulo_u16(zig_u8 *ov, zig_u16 *res, int n,...@@ -862,7 +868,7 @@ static inline void zig_vmulo_u16(zig_u8 *ov, zig_u16 *res, int n,
862}868}
863869
864static inline bool zig_mulo_i16(zig_i16 *res, zig_i16 lhs, zig_i16 rhs, zig_u8 bits) {870static inline bool zig_mulo_i16(zig_i16 *res, zig_i16 lhs, zig_i16 rhs, zig_u8 bits) {
865#if zig_has_builtin(mul_overflow) || defined(__GNUC__)871#if zig_has_builtin(mul_overflow) || defined(zig_gnuc)
866 zig_i16 full_res;872 zig_i16 full_res;
867 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);873 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
868 *res = zig_wrap_i16(full_res, bits);874 *res = zig_wrap_i16(full_res, bits);
...@@ -977,7 +983,7 @@ static inline zig_i8 zig_byte_swap_i8(zig_i8 val, zig_u8 bits) {...@@ -977,7 +983,7 @@ static inline zig_i8 zig_byte_swap_i8(zig_i8 val, zig_u8 bits) {
977983
978static inline zig_u16 zig_byte_swap_u16(zig_u16 val, zig_u8 bits) {984static inline zig_u16 zig_byte_swap_u16(zig_u16 val, zig_u8 bits) {
979 zig_u16 full_res;985 zig_u16 full_res;
980#if zig_has_builtin(bswap16) || defined(__GNUC__)986#if zig_has_builtin(bswap16) || defined(zig_gnuc)
981 full_res = __builtin_bswap16(val);987 full_res = __builtin_bswap16(val);
982#else988#else
983 full_res = (zig_u16)zig_byte_swap_u8((zig_u8)(val >> 0), 8) << 8 |989 full_res = (zig_u16)zig_byte_swap_u8((zig_u8)(val >> 0), 8) << 8 |
...@@ -992,7 +998,7 @@ static inline zig_i16 zig_byte_swap_i16(zig_i16 val, zig_u8 bits) {...@@ -992,7 +998,7 @@ static inline zig_i16 zig_byte_swap_i16(zig_i16 val, zig_u8 bits) {
992998
993static inline zig_u32 zig_byte_swap_u32(zig_u32 val, zig_u8 bits) {999static inline zig_u32 zig_byte_swap_u32(zig_u32 val, zig_u8 bits) {
994 zig_u32 full_res;1000 zig_u32 full_res;
995#if zig_has_builtin(bswap32) || defined(__GNUC__)1001#if zig_has_builtin(bswap32) || defined(zig_gnuc)
996 full_res = __builtin_bswap32(val);1002 full_res = __builtin_bswap32(val);
997#else1003#else
998 full_res = (zig_u32)zig_byte_swap_u16((zig_u16)(val >> 0), 16) << 16 |1004 full_res = (zig_u32)zig_byte_swap_u16((zig_u16)(val >> 0), 16) << 16 |
...@@ -1007,7 +1013,7 @@ static inline zig_i32 zig_byte_swap_i32(zig_i32 val, zig_u8 bits) {...@@ -1007,7 +1013,7 @@ static inline zig_i32 zig_byte_swap_i32(zig_i32 val, zig_u8 bits) {
10071013
1008static inline zig_u64 zig_byte_swap_u64(zig_u64 val, zig_u8 bits) {1014static inline zig_u64 zig_byte_swap_u64(zig_u64 val, zig_u8 bits) {
1009 zig_u64 full_res;1015 zig_u64 full_res;
1010#if zig_has_builtin(bswap64) || defined(__GNUC__)1016#if zig_has_builtin(bswap64) || defined(zig_gnuc)
1011 full_res = __builtin_bswap64(val);1017 full_res = __builtin_bswap64(val);
1012#else1018#else
1013 full_res = (zig_u64)zig_byte_swap_u32((zig_u32)(val >> 0), 32) << 32 |1019 full_res = (zig_u64)zig_byte_swap_u32((zig_u32)(val >> 0), 32) << 32 |
...@@ -1087,7 +1093,7 @@ static inline zig_i64 zig_bit_reverse_i64(zig_i64 val, zig_u8 bits) {...@@ -1087,7 +1093,7 @@ static inline zig_i64 zig_bit_reverse_i64(zig_i64 val, zig_u8 bits) {
1087 static inline zig_u8 zig_popcount_i##w(zig_i##w val, zig_u8 bits) { \1093 static inline zig_u8 zig_popcount_i##w(zig_i##w val, zig_u8 bits) { \
1088 return zig_popcount_u##w((zig_u##w)val, bits); \1094 return zig_popcount_u##w((zig_u##w)val, bits); \
1089 }1095 }
1090#if zig_has_builtin(popcount) || defined(__GNUC__)1096#if zig_has_builtin(popcount) || defined(zig_gnuc)
1091#define zig_builtin_popcount(w) \1097#define zig_builtin_popcount(w) \
1092 static inline zig_u8 zig_popcount_u##w(zig_u##w val, zig_u8 bits) { \1098 static inline zig_u8 zig_popcount_u##w(zig_u##w val, zig_u8 bits) { \
1093 (void)bits; \1099 (void)bits; \
...@@ -1116,7 +1122,7 @@ zig_builtin_popcount(64)...@@ -1116,7 +1122,7 @@ zig_builtin_popcount(64)
1116 static inline zig_u8 zig_ctz_i##w(zig_i##w val, zig_u8 bits) { \1122 static inline zig_u8 zig_ctz_i##w(zig_i##w val, zig_u8 bits) { \
1117 return zig_ctz_u##w((zig_u##w)val, bits); \1123 return zig_ctz_u##w((zig_u##w)val, bits); \
1118 }1124 }
1119#if zig_has_builtin(ctz) || defined(__GNUC__)1125#if zig_has_builtin(ctz) || defined(zig_gnuc)
1120#define zig_builtin_ctz(w) \1126#define zig_builtin_ctz(w) \
1121 static inline zig_u8 zig_ctz_u##w(zig_u##w val, zig_u8 bits) { \1127 static inline zig_u8 zig_ctz_u##w(zig_u##w val, zig_u8 bits) { \
1122 if (val == 0) return bits; \1128 if (val == 0) return bits; \
...@@ -1141,7 +1147,7 @@ zig_builtin_ctz(64)...@@ -1141,7 +1147,7 @@ zig_builtin_ctz(64)
1141 static inline zig_u8 zig_clz_i##w(zig_i##w val, zig_u8 bits) { \1147 static inline zig_u8 zig_clz_i##w(zig_i##w val, zig_u8 bits) { \
1142 return zig_clz_u##w((zig_u##w)val, bits); \1148 return zig_clz_u##w((zig_u##w)val, bits); \
1143 }1149 }
1144#if zig_has_builtin(clz) || defined(__GNUC__)1150#if zig_has_builtin(clz) || defined(zig_gnuc)
1145#define zig_builtin_clz(w) \1151#define zig_builtin_clz(w) \
1146 static inline zig_u8 zig_clz_u##w(zig_u##w val, zig_u8 bits) { \1152 static inline zig_u8 zig_clz_u##w(zig_u##w val, zig_u8 bits) { \
1147 if (val == 0) return bits; \1153 if (val == 0) return bits; \
...@@ -1764,7 +1770,7 @@ static inline zig_i128 zig_bit_reverse_i128(zig_i128 val, zig_u8 bits) {...@@ -1764,7 +1770,7 @@ static inline zig_i128 zig_bit_reverse_i128(zig_i128 val, zig_u8 bits) {
1764#define __builtin_infl() zig_msvc_flt_infl1770#define __builtin_infl() zig_msvc_flt_infl
1765#endif1771#endif
17661772
1767#if (zig_has_builtin(nan) && zig_has_builtin(nans) && zig_has_builtin(inf)) || defined(__GNUC__)1773#if (zig_has_builtin(nan) && zig_has_builtin(nans) && zig_has_builtin(inf))
1768#define zig_has_float_builtins 11774#define zig_has_float_builtins 1
1769#define zig_as_special_f16(sign, name, arg, repr) sign zig_as_f16(__builtin_##name, )(arg)1775#define zig_as_special_f16(sign, name, arg, repr) sign zig_as_f16(__builtin_##name, )(arg)
1770#define zig_as_special_f32(sign, name, arg, repr) sign zig_as_f32(__builtin_##name, )(arg)1776#define zig_as_special_f32(sign, name, arg, repr) sign zig_as_f32(__builtin_##name, )(arg)
...@@ -1796,7 +1802,7 @@ typedef double zig_f16;...@@ -1796,7 +1802,7 @@ typedef double zig_f16;
1796#define zig_bitSizeOf_c_longdouble 161802#define zig_bitSizeOf_c_longdouble 16
1797typedef long double zig_f16;1803typedef long double zig_f16;
1798#define zig_as_f16(fp, repr) fp##l1804#define zig_as_f16(fp, repr) fp##l
1799#elif FLT16_MANT_DIG == 11 && (zig_has_builtin(inff16) || defined(__GNUC__))1805#elif FLT16_MANT_DIG == 11 && (zig_has_builtin(inff16) || defined(zig_gnuc))
1800typedef _Float16 zig_f16;1806typedef _Float16 zig_f16;
1801#define zig_as_f16(fp, repr) fp##f161807#define zig_as_f16(fp, repr) fp##f16
1802#elif defined(__SIZEOF_FP16__)1808#elif defined(__SIZEOF_FP16__)