authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-02-15 19:16:44+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-02-16 00:21:51+01:00
logd7f9b5a6618eebf6f2c7c205ebdad47a7959ecc1
treed2d3847d787e77112d329a9d2ffb3e759c8d5700
parente5174c7441e42a1ecc4d31ed505301f6d2c26d50

zig.h: Add new zig_gcc macro to indicate GCC.

As opposed to "GNU C" (zig_gnuc) which includes Clang. This addresses #22890 but does not fix it until a zig1.wasm update.

1 files changed, 41 insertions(+), 40 deletions(-)

lib/zig.h+41-40
...@@ -9,6 +9,7 @@...@@ -9,6 +9,7 @@
9#define zig_clang9#define zig_clang
10#define zig_gnuc10#define zig_gnuc
11#elif defined(__GNUC__)11#elif defined(__GNUC__)
12#define zig_gcc
12#define zig_gnuc13#define zig_gnuc
13#elif defined(__IBMC__)14#elif defined(__IBMC__)
14#define zig_xlc15#define zig_xlc
...@@ -171,7 +172,7 @@...@@ -171,7 +172,7 @@
171#define zig_callconv(c) __attribute__((c))172#define zig_callconv(c) __attribute__((c))
172#endif173#endif
173174
174#if zig_has_attribute(naked) || defined(zig_gnuc)175#if zig_has_attribute(naked) || defined(zig_gcc)
175#define zig_naked_decl __attribute__((naked))176#define zig_naked_decl __attribute__((naked))
176#define zig_naked __attribute__((naked))177#define zig_naked __attribute__((naked))
177#elif defined(zig_msvc)178#elif defined(zig_msvc)
...@@ -265,7 +266,7 @@...@@ -265,7 +266,7 @@
265#define zig_linksection_fn zig_linksection266#define zig_linksection_fn zig_linksection
266#endif267#endif
267268
268#if zig_has_builtin(unreachable) || defined(zig_gnuc) || defined(zig_tinyc)269#if zig_has_builtin(unreachable) || defined(zig_gcc) || defined(zig_tinyc)
269#define zig_unreachable() __builtin_unreachable()270#define zig_unreachable() __builtin_unreachable()
270#elif defined(zig_msvc)271#elif defined(zig_msvc)
271#define zig_unreachable() __assume(0)272#define zig_unreachable() __assume(0)
...@@ -331,7 +332,7 @@...@@ -331,7 +332,7 @@
331#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)332#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)
332#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)333#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)
333334
334#if zig_has_attribute(weak) || defined(zig_gnuc) || defined(zig_tinyc)335#if zig_has_attribute(weak) || defined(zig_gcc) || defined(zig_tinyc)
335#define zig_weak_linkage __attribute__((weak))336#define zig_weak_linkage __attribute__((weak))
336#define zig_weak_linkage_fn __attribute__((weak))337#define zig_weak_linkage_fn __attribute__((weak))
337#elif defined(zig_msvc)338#elif defined(zig_msvc)
...@@ -418,7 +419,7 @@...@@ -418,7 +419,7 @@
418#define zig_breakpoint() zig_breakpoint_unavailable419#define zig_breakpoint() zig_breakpoint_unavailable
419#endif420#endif
420421
421#if zig_has_builtin(return_address) || defined(zig_gnuc) || defined(zig_tinyc)422#if zig_has_builtin(return_address) || defined(zig_gcc) || defined(zig_tinyc)
422#define zig_return_address() __builtin_extract_return_addr(__builtin_return_address(0))423#define zig_return_address() __builtin_extract_return_addr(__builtin_return_address(0))
423#elif defined(zig_msvc)424#elif defined(zig_msvc)
424#define zig_return_address() _ReturnAddress()425#define zig_return_address() _ReturnAddress()
...@@ -426,7 +427,7 @@...@@ -426,7 +427,7 @@
426#define zig_return_address() 0427#define zig_return_address() 0
427#endif428#endif
428429
429#if zig_has_builtin(frame_address) || defined(zig_gnuc) || defined(zig_tinyc)430#if zig_has_builtin(frame_address) || defined(zig_gcc) || defined(zig_tinyc)
430#define zig_frame_address() __builtin_frame_address(0)431#define zig_frame_address() __builtin_frame_address(0)
431#elif defined(zig_msvc)432#elif defined(zig_msvc)
432#define zig_frame_address() _AddressOfReturnAddress()433#define zig_frame_address() _AddressOfReturnAddress()
...@@ -434,7 +435,7 @@...@@ -434,7 +435,7 @@
434#define zig_frame_address() 0435#define zig_frame_address() 0
435#endif436#endif
436437
437#if zig_has_builtin(prefetch) || defined(zig_gnuc)438#if zig_has_builtin(prefetch) || defined(zig_gcc)
438#define zig_prefetch(addr, rw, locality) __builtin_prefetch(addr, rw, locality)439#define zig_prefetch(addr, rw, locality) __builtin_prefetch(addr, rw, locality)
439#else440#else
440#define zig_prefetch(addr, rw, locality)441#define zig_prefetch(addr, rw, locality)
...@@ -452,7 +453,7 @@...@@ -452,7 +453,7 @@
452#define zig_noreturn [[noreturn]]453#define zig_noreturn [[noreturn]]
453#elif __STDC_VERSION__ >= 201112L454#elif __STDC_VERSION__ >= 201112L
454#define zig_noreturn _Noreturn455#define zig_noreturn _Noreturn
455#elif zig_has_attribute(noreturn) || defined(zig_gnuc) || defined(zig_tinyc)456#elif zig_has_attribute(noreturn) || defined(zig_gcc) || defined(zig_tinyc)
456#define zig_noreturn __attribute__((noreturn))457#define zig_noreturn __attribute__((noreturn))
457#elif defined(zig_msvc)458#elif defined(zig_msvc)
458#define zig_noreturn __declspec(noreturn)459#define zig_noreturn __declspec(noreturn)
...@@ -770,7 +771,7 @@ zig_int_helpers(64, uint64_t)...@@ -770,7 +771,7 @@ zig_int_helpers(64, uint64_t)
770#endif771#endif
771772
772static inline bool zig_addo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8_t bits) {773static inline bool zig_addo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8_t bits) {
773#if zig_has_builtin(add_overflow) || defined(zig_gnuc)774#if zig_has_builtin(add_overflow) || defined(zig_gcc)
774 uint32_t full_res;775 uint32_t full_res;
775 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);776 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
776 *res = zig_wrap_u32(full_res, bits);777 *res = zig_wrap_u32(full_res, bits);
...@@ -783,7 +784,7 @@ static inline bool zig_addo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8...@@ -783,7 +784,7 @@ static inline bool zig_addo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8
783784
784zig_extern int32_t __addosi4(int32_t lhs, int32_t rhs, int *overflow);785zig_extern int32_t __addosi4(int32_t lhs, int32_t rhs, int *overflow);
785static inline bool zig_addo_i32(int32_t *res, int32_t lhs, int32_t rhs, uint8_t bits) {786static inline bool zig_addo_i32(int32_t *res, int32_t lhs, int32_t rhs, uint8_t bits) {
786#if zig_has_builtin(add_overflow) || defined(zig_gnuc)787#if zig_has_builtin(add_overflow) || defined(zig_gcc)
787 int32_t full_res;788 int32_t full_res;
788 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);789 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
789#else790#else
...@@ -796,7 +797,7 @@ static inline bool zig_addo_i32(int32_t *res, int32_t lhs, int32_t rhs, uint8_t...@@ -796,7 +797,7 @@ static inline bool zig_addo_i32(int32_t *res, int32_t lhs, int32_t rhs, uint8_t
796}797}
797798
798static inline bool zig_addo_u64(uint64_t *res, uint64_t lhs, uint64_t rhs, uint8_t bits) {799static inline bool zig_addo_u64(uint64_t *res, uint64_t lhs, uint64_t rhs, uint8_t bits) {
799#if zig_has_builtin(add_overflow) || defined(zig_gnuc)800#if zig_has_builtin(add_overflow) || defined(zig_gcc)
800 uint64_t full_res;801 uint64_t full_res;
801 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);802 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
802 *res = zig_wrap_u64(full_res, bits);803 *res = zig_wrap_u64(full_res, bits);
...@@ -809,7 +810,7 @@ static inline bool zig_addo_u64(uint64_t *res, uint64_t lhs, uint64_t rhs, uint8...@@ -809,7 +810,7 @@ static inline bool zig_addo_u64(uint64_t *res, uint64_t lhs, uint64_t rhs, uint8
809810
810zig_extern int64_t __addodi4(int64_t lhs, int64_t rhs, int *overflow);811zig_extern int64_t __addodi4(int64_t lhs, int64_t rhs, int *overflow);
811static inline bool zig_addo_i64(int64_t *res, int64_t lhs, int64_t rhs, uint8_t bits) {812static inline bool zig_addo_i64(int64_t *res, int64_t lhs, int64_t rhs, uint8_t bits) {
812#if zig_has_builtin(add_overflow) || defined(zig_gnuc)813#if zig_has_builtin(add_overflow) || defined(zig_gcc)
813 int64_t full_res;814 int64_t full_res;
814 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);815 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
815#else816#else
...@@ -822,7 +823,7 @@ static inline bool zig_addo_i64(int64_t *res, int64_t lhs, int64_t rhs, uint8_t...@@ -822,7 +823,7 @@ static inline bool zig_addo_i64(int64_t *res, int64_t lhs, int64_t rhs, uint8_t
822}823}
823824
824static inline bool zig_addo_u8(uint8_t *res, uint8_t lhs, uint8_t rhs, uint8_t bits) {825static inline bool zig_addo_u8(uint8_t *res, uint8_t lhs, uint8_t rhs, uint8_t bits) {
825#if zig_has_builtin(add_overflow) || defined(zig_gnuc)826#if zig_has_builtin(add_overflow) || defined(zig_gcc)
826 uint8_t full_res;827 uint8_t full_res;
827 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);828 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
828 *res = zig_wrap_u8(full_res, bits);829 *res = zig_wrap_u8(full_res, bits);
...@@ -836,7 +837,7 @@ static inline bool zig_addo_u8(uint8_t *res, uint8_t lhs, uint8_t rhs, uint8_t b...@@ -836,7 +837,7 @@ static inline bool zig_addo_u8(uint8_t *res, uint8_t lhs, uint8_t rhs, uint8_t b
836}837}
837838
838static inline bool zig_addo_i8(int8_t *res, int8_t lhs, int8_t rhs, uint8_t bits) {839static inline bool zig_addo_i8(int8_t *res, int8_t lhs, int8_t rhs, uint8_t bits) {
839#if zig_has_builtin(add_overflow) || defined(zig_gnuc)840#if zig_has_builtin(add_overflow) || defined(zig_gcc)
840 int8_t full_res;841 int8_t full_res;
841 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);842 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
842 *res = zig_wrap_i8(full_res, bits);843 *res = zig_wrap_i8(full_res, bits);
...@@ -850,7 +851,7 @@ static inline bool zig_addo_i8(int8_t *res, int8_t lhs, int8_t rhs, uint8_t bits...@@ -850,7 +851,7 @@ static inline bool zig_addo_i8(int8_t *res, int8_t lhs, int8_t rhs, uint8_t bits
850}851}
851852
852static inline bool zig_addo_u16(uint16_t *res, uint16_t lhs, uint16_t rhs, uint8_t bits) {853static inline bool zig_addo_u16(uint16_t *res, uint16_t lhs, uint16_t rhs, uint8_t bits) {
853#if zig_has_builtin(add_overflow) || defined(zig_gnuc)854#if zig_has_builtin(add_overflow) || defined(zig_gcc)
854 uint16_t full_res;855 uint16_t full_res;
855 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);856 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
856 *res = zig_wrap_u16(full_res, bits);857 *res = zig_wrap_u16(full_res, bits);
...@@ -864,7 +865,7 @@ static inline bool zig_addo_u16(uint16_t *res, uint16_t lhs, uint16_t rhs, uint8...@@ -864,7 +865,7 @@ static inline bool zig_addo_u16(uint16_t *res, uint16_t lhs, uint16_t rhs, uint8
864}865}
865866
866static inline bool zig_addo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t bits) {867static inline bool zig_addo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t bits) {
867#if zig_has_builtin(add_overflow) || defined(zig_gnuc)868#if zig_has_builtin(add_overflow) || defined(zig_gcc)
868 int16_t full_res;869 int16_t full_res;
869 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);870 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
870 *res = zig_wrap_i16(full_res, bits);871 *res = zig_wrap_i16(full_res, bits);
...@@ -878,7 +879,7 @@ static inline bool zig_addo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t...@@ -878,7 +879,7 @@ static inline bool zig_addo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t
878}879}
879880
880static inline bool zig_subo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8_t bits) {881static inline bool zig_subo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8_t bits) {
881#if zig_has_builtin(sub_overflow) || defined(zig_gnuc)882#if zig_has_builtin(sub_overflow) || defined(zig_gcc)
882 uint32_t full_res;883 uint32_t full_res;
883 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);884 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
884 *res = zig_wrap_u32(full_res, bits);885 *res = zig_wrap_u32(full_res, bits);
...@@ -891,7 +892,7 @@ static inline bool zig_subo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8...@@ -891,7 +892,7 @@ static inline bool zig_subo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8
891892
892zig_extern int32_t __subosi4(int32_t lhs, int32_t rhs, int *overflow);893zig_extern int32_t __subosi4(int32_t lhs, int32_t rhs, int *overflow);
893static inline bool zig_subo_i32(int32_t *res, int32_t lhs, int32_t rhs, uint8_t bits) {894static inline bool zig_subo_i32(int32_t *res, int32_t lhs, int32_t rhs, uint8_t bits) {
894#if zig_has_builtin(sub_overflow) || defined(zig_gnuc)895#if zig_has_builtin(sub_overflow) || defined(zig_gcc)
895 int32_t full_res;896 int32_t full_res;
896 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);897 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
897#else898#else
...@@ -904,7 +905,7 @@ static inline bool zig_subo_i32(int32_t *res, int32_t lhs, int32_t rhs, uint8_t...@@ -904,7 +905,7 @@ static inline bool zig_subo_i32(int32_t *res, int32_t lhs, int32_t rhs, uint8_t
904}905}
905906
906static inline bool zig_subo_u64(uint64_t *res, uint64_t lhs, uint64_t rhs, uint8_t bits) {907static inline bool zig_subo_u64(uint64_t *res, uint64_t lhs, uint64_t rhs, uint8_t bits) {
907#if zig_has_builtin(sub_overflow) || defined(zig_gnuc)908#if zig_has_builtin(sub_overflow) || defined(zig_gcc)
908 uint64_t full_res;909 uint64_t full_res;
909 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);910 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
910 *res = zig_wrap_u64(full_res, bits);911 *res = zig_wrap_u64(full_res, bits);
...@@ -917,7 +918,7 @@ static inline bool zig_subo_u64(uint64_t *res, uint64_t lhs, uint64_t rhs, uint8...@@ -917,7 +918,7 @@ static inline bool zig_subo_u64(uint64_t *res, uint64_t lhs, uint64_t rhs, uint8
917918
918zig_extern int64_t __subodi4(int64_t lhs, int64_t rhs, int *overflow);919zig_extern int64_t __subodi4(int64_t lhs, int64_t rhs, int *overflow);
919static inline bool zig_subo_i64(int64_t *res, int64_t lhs, int64_t rhs, uint8_t bits) {920static inline bool zig_subo_i64(int64_t *res, int64_t lhs, int64_t rhs, uint8_t bits) {
920#if zig_has_builtin(sub_overflow) || defined(zig_gnuc)921#if zig_has_builtin(sub_overflow) || defined(zig_gcc)
921 int64_t full_res;922 int64_t full_res;
922 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);923 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
923#else924#else
...@@ -930,7 +931,7 @@ static inline bool zig_subo_i64(int64_t *res, int64_t lhs, int64_t rhs, uint8_t...@@ -930,7 +931,7 @@ static inline bool zig_subo_i64(int64_t *res, int64_t lhs, int64_t rhs, uint8_t
930}931}
931932
932static inline bool zig_subo_u8(uint8_t *res, uint8_t lhs, uint8_t rhs, uint8_t bits) {933static inline bool zig_subo_u8(uint8_t *res, uint8_t lhs, uint8_t rhs, uint8_t bits) {
933#if zig_has_builtin(sub_overflow) || defined(zig_gnuc)934#if zig_has_builtin(sub_overflow) || defined(zig_gcc)
934 uint8_t full_res;935 uint8_t full_res;
935 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);936 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
936 *res = zig_wrap_u8(full_res, bits);937 *res = zig_wrap_u8(full_res, bits);
...@@ -944,7 +945,7 @@ static inline bool zig_subo_u8(uint8_t *res, uint8_t lhs, uint8_t rhs, uint8_t b...@@ -944,7 +945,7 @@ static inline bool zig_subo_u8(uint8_t *res, uint8_t lhs, uint8_t rhs, uint8_t b
944}945}
945946
946static inline bool zig_subo_i8(int8_t *res, int8_t lhs, int8_t rhs, uint8_t bits) {947static inline bool zig_subo_i8(int8_t *res, int8_t lhs, int8_t rhs, uint8_t bits) {
947#if zig_has_builtin(sub_overflow) || defined(zig_gnuc)948#if zig_has_builtin(sub_overflow) || defined(zig_gcc)
948 int8_t full_res;949 int8_t full_res;
949 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);950 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
950 *res = zig_wrap_i8(full_res, bits);951 *res = zig_wrap_i8(full_res, bits);
...@@ -958,7 +959,7 @@ static inline bool zig_subo_i8(int8_t *res, int8_t lhs, int8_t rhs, uint8_t bits...@@ -958,7 +959,7 @@ static inline bool zig_subo_i8(int8_t *res, int8_t lhs, int8_t rhs, uint8_t bits
958}959}
959960
960static inline bool zig_subo_u16(uint16_t *res, uint16_t lhs, uint16_t rhs, uint8_t bits) {961static inline bool zig_subo_u16(uint16_t *res, uint16_t lhs, uint16_t rhs, uint8_t bits) {
961#if zig_has_builtin(sub_overflow) || defined(zig_gnuc)962#if zig_has_builtin(sub_overflow) || defined(zig_gcc)
962 uint16_t full_res;963 uint16_t full_res;
963 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);964 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
964 *res = zig_wrap_u16(full_res, bits);965 *res = zig_wrap_u16(full_res, bits);
...@@ -972,7 +973,7 @@ static inline bool zig_subo_u16(uint16_t *res, uint16_t lhs, uint16_t rhs, uint8...@@ -972,7 +973,7 @@ static inline bool zig_subo_u16(uint16_t *res, uint16_t lhs, uint16_t rhs, uint8
972}973}
973974
974static inline bool zig_subo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t bits) {975static inline bool zig_subo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t bits) {
975#if zig_has_builtin(sub_overflow) || defined(zig_gnuc)976#if zig_has_builtin(sub_overflow) || defined(zig_gcc)
976 int16_t full_res;977 int16_t full_res;
977 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);978 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
978 *res = zig_wrap_i16(full_res, bits);979 *res = zig_wrap_i16(full_res, bits);
...@@ -986,7 +987,7 @@ static inline bool zig_subo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t...@@ -986,7 +987,7 @@ static inline bool zig_subo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t
986}987}
987988
988static inline bool zig_mulo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8_t bits) {989static inline bool zig_mulo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8_t bits) {
989#if zig_has_builtin(mul_overflow) || defined(zig_gnuc)990#if zig_has_builtin(mul_overflow) || defined(zig_gcc)
990 uint32_t full_res;991 uint32_t full_res;
991 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);992 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
992 *res = zig_wrap_u32(full_res, bits);993 *res = zig_wrap_u32(full_res, bits);
...@@ -999,7 +1000,7 @@ static inline bool zig_mulo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8...@@ -999,7 +1000,7 @@ static inline bool zig_mulo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8
9991000
1000zig_extern int32_t __mulosi4(int32_t lhs, int32_t rhs, int *overflow);1001zig_extern int32_t __mulosi4(int32_t lhs, int32_t rhs, int *overflow);
1001static inline bool zig_mulo_i32(int32_t *res, int32_t lhs, int32_t rhs, uint8_t bits) {1002static inline bool zig_mulo_i32(int32_t *res, int32_t lhs, int32_t rhs, uint8_t bits) {
1002#if zig_has_builtin(mul_overflow) || defined(zig_gnuc)1003#if zig_has_builtin(mul_overflow) || defined(zig_gcc)
1003 int32_t full_res;1004 int32_t full_res;
1004 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);1005 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
1005#else1006#else
...@@ -1012,7 +1013,7 @@ static inline bool zig_mulo_i32(int32_t *res, int32_t lhs, int32_t rhs, uint8_t...@@ -1012,7 +1013,7 @@ static inline bool zig_mulo_i32(int32_t *res, int32_t lhs, int32_t rhs, uint8_t
1012}1013}
10131014
1014static inline bool zig_mulo_u64(uint64_t *res, uint64_t lhs, uint64_t rhs, uint8_t bits) {1015static inline bool zig_mulo_u64(uint64_t *res, uint64_t lhs, uint64_t rhs, uint8_t bits) {
1015#if zig_has_builtin(mul_overflow) || defined(zig_gnuc)1016#if zig_has_builtin(mul_overflow) || defined(zig_gcc)
1016 uint64_t full_res;1017 uint64_t full_res;
1017 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);1018 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
1018 *res = zig_wrap_u64(full_res, bits);1019 *res = zig_wrap_u64(full_res, bits);
...@@ -1025,7 +1026,7 @@ static inline bool zig_mulo_u64(uint64_t *res, uint64_t lhs, uint64_t rhs, uint8...@@ -1025,7 +1026,7 @@ static inline bool zig_mulo_u64(uint64_t *res, uint64_t lhs, uint64_t rhs, uint8
10251026
1026zig_extern int64_t __mulodi4(int64_t lhs, int64_t rhs, int *overflow);1027zig_extern int64_t __mulodi4(int64_t lhs, int64_t rhs, int *overflow);
1027static inline bool zig_mulo_i64(int64_t *res, int64_t lhs, int64_t rhs, uint8_t bits) {1028static inline bool zig_mulo_i64(int64_t *res, int64_t lhs, int64_t rhs, uint8_t bits) {
1028#if zig_has_builtin(mul_overflow) || defined(zig_gnuc)1029#if zig_has_builtin(mul_overflow) || defined(zig_gcc)
1029 int64_t full_res;1030 int64_t full_res;
1030 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);1031 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
1031#else1032#else
...@@ -1038,7 +1039,7 @@ static inline bool zig_mulo_i64(int64_t *res, int64_t lhs, int64_t rhs, uint8_t...@@ -1038,7 +1039,7 @@ static inline bool zig_mulo_i64(int64_t *res, int64_t lhs, int64_t rhs, uint8_t
1038}1039}
10391040
1040static inline bool zig_mulo_u8(uint8_t *res, uint8_t lhs, uint8_t rhs, uint8_t bits) {1041static inline bool zig_mulo_u8(uint8_t *res, uint8_t lhs, uint8_t rhs, uint8_t bits) {
1041#if zig_has_builtin(mul_overflow) || defined(zig_gnuc)1042#if zig_has_builtin(mul_overflow) || defined(zig_gcc)
1042 uint8_t full_res;1043 uint8_t full_res;
1043 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);1044 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
1044 *res = zig_wrap_u8(full_res, bits);1045 *res = zig_wrap_u8(full_res, bits);
...@@ -1052,7 +1053,7 @@ static inline bool zig_mulo_u8(uint8_t *res, uint8_t lhs, uint8_t rhs, uint8_t b...@@ -1052,7 +1053,7 @@ static inline bool zig_mulo_u8(uint8_t *res, uint8_t lhs, uint8_t rhs, uint8_t b
1052}1053}
10531054
1054static inline bool zig_mulo_i8(int8_t *res, int8_t lhs, int8_t rhs, uint8_t bits) {1055static inline bool zig_mulo_i8(int8_t *res, int8_t lhs, int8_t rhs, uint8_t bits) {
1055#if zig_has_builtin(mul_overflow) || defined(zig_gnuc)1056#if zig_has_builtin(mul_overflow) || defined(zig_gcc)
1056 int8_t full_res;1057 int8_t full_res;
1057 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);1058 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
1058 *res = zig_wrap_i8(full_res, bits);1059 *res = zig_wrap_i8(full_res, bits);
...@@ -1066,7 +1067,7 @@ static inline bool zig_mulo_i8(int8_t *res, int8_t lhs, int8_t rhs, uint8_t bits...@@ -1066,7 +1067,7 @@ static inline bool zig_mulo_i8(int8_t *res, int8_t lhs, int8_t rhs, uint8_t bits
1066}1067}
10671068
1068static inline bool zig_mulo_u16(uint16_t *res, uint16_t lhs, uint16_t rhs, uint8_t bits) {1069static inline bool zig_mulo_u16(uint16_t *res, uint16_t lhs, uint16_t rhs, uint8_t bits) {
1069#if zig_has_builtin(mul_overflow) || defined(zig_gnuc)1070#if zig_has_builtin(mul_overflow) || defined(zig_gcc)
1070 uint16_t full_res;1071 uint16_t full_res;
1071 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);1072 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
1072 *res = zig_wrap_u16(full_res, bits);1073 *res = zig_wrap_u16(full_res, bits);
...@@ -1080,7 +1081,7 @@ static inline bool zig_mulo_u16(uint16_t *res, uint16_t lhs, uint16_t rhs, uint8...@@ -1080,7 +1081,7 @@ static inline bool zig_mulo_u16(uint16_t *res, uint16_t lhs, uint16_t rhs, uint8
1080}1081}
10811082
1082static inline bool zig_mulo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t bits) {1083static inline bool zig_mulo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t bits) {
1083#if zig_has_builtin(mul_overflow) || defined(zig_gnuc)1084#if zig_has_builtin(mul_overflow) || defined(zig_gcc)
1084 int16_t full_res;1085 int16_t full_res;
1085 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);1086 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
1086 *res = zig_wrap_i16(full_res, bits);1087 *res = zig_wrap_i16(full_res, bits);
...@@ -1189,7 +1190,7 @@ static inline int8_t zig_byte_swap_i8(int8_t val, uint8_t bits) {...@@ -1189,7 +1190,7 @@ static inline int8_t zig_byte_swap_i8(int8_t val, uint8_t bits) {
11891190
1190static inline uint16_t zig_byte_swap_u16(uint16_t val, uint8_t bits) {1191static inline uint16_t zig_byte_swap_u16(uint16_t val, uint8_t bits) {
1191 uint16_t full_res;1192 uint16_t full_res;
1192#if zig_has_builtin(bswap16) || defined(zig_gnuc)1193#if zig_has_builtin(bswap16) || defined(zig_gcc)
1193 full_res = __builtin_bswap16(val);1194 full_res = __builtin_bswap16(val);
1194#else1195#else
1195 full_res = (uint16_t)zig_byte_swap_u8((uint8_t)(val >> 0), 8) << 8 |1196 full_res = (uint16_t)zig_byte_swap_u8((uint8_t)(val >> 0), 8) << 8 |
...@@ -1204,7 +1205,7 @@ static inline int16_t zig_byte_swap_i16(int16_t val, uint8_t bits) {...@@ -1204,7 +1205,7 @@ static inline int16_t zig_byte_swap_i16(int16_t val, uint8_t bits) {
12041205
1205static inline uint32_t zig_byte_swap_u32(uint32_t val, uint8_t bits) {1206static inline uint32_t zig_byte_swap_u32(uint32_t val, uint8_t bits) {
1206 uint32_t full_res;1207 uint32_t full_res;
1207#if zig_has_builtin(bswap32) || defined(zig_gnuc)1208#if zig_has_builtin(bswap32) || defined(zig_gcc)
1208 full_res = __builtin_bswap32(val);1209 full_res = __builtin_bswap32(val);
1209#else1210#else
1210 full_res = (uint32_t)zig_byte_swap_u16((uint16_t)(val >> 0), 16) << 16 |1211 full_res = (uint32_t)zig_byte_swap_u16((uint16_t)(val >> 0), 16) << 16 |
...@@ -1219,7 +1220,7 @@ static inline int32_t zig_byte_swap_i32(int32_t val, uint8_t bits) {...@@ -1219,7 +1220,7 @@ static inline int32_t zig_byte_swap_i32(int32_t val, uint8_t bits) {
12191220
1220static inline uint64_t zig_byte_swap_u64(uint64_t val, uint8_t bits) {1221static inline uint64_t zig_byte_swap_u64(uint64_t val, uint8_t bits) {
1221 uint64_t full_res;1222 uint64_t full_res;
1222#if zig_has_builtin(bswap64) || defined(zig_gnuc)1223#if zig_has_builtin(bswap64) || defined(zig_gcc)
1223 full_res = __builtin_bswap64(val);1224 full_res = __builtin_bswap64(val);
1224#else1225#else
1225 full_res = (uint64_t)zig_byte_swap_u32((uint32_t)(val >> 0), 32) << 32 |1226 full_res = (uint64_t)zig_byte_swap_u32((uint32_t)(val >> 0), 32) << 32 |
...@@ -1299,7 +1300,7 @@ static inline int64_t zig_bit_reverse_i64(int64_t val, uint8_t bits) {...@@ -1299,7 +1300,7 @@ static inline int64_t zig_bit_reverse_i64(int64_t val, uint8_t bits) {
1299 static inline uint8_t zig_popcount_i##w(int##w##_t val, uint8_t bits) { \1300 static inline uint8_t zig_popcount_i##w(int##w##_t val, uint8_t bits) { \
1300 return zig_popcount_u##w((uint##w##_t)val, bits); \1301 return zig_popcount_u##w((uint##w##_t)val, bits); \
1301 }1302 }
1302#if zig_has_builtin(popcount) || defined(zig_gnuc) || defined(zig_tinyc)1303#if zig_has_builtin(popcount) || defined(zig_gcc) || defined(zig_tinyc)
1303#define zig_builtin_popcount(w) \1304#define zig_builtin_popcount(w) \
1304 static inline uint8_t zig_popcount_u##w(uint##w##_t val, uint8_t bits) { \1305 static inline uint8_t zig_popcount_u##w(uint##w##_t val, uint8_t bits) { \
1305 (void)bits; \1306 (void)bits; \
...@@ -1328,7 +1329,7 @@ zig_builtin_popcount(64)...@@ -1328,7 +1329,7 @@ zig_builtin_popcount(64)
1328 static inline uint8_t zig_ctz_i##w(int##w##_t val, uint8_t bits) { \1329 static inline uint8_t zig_ctz_i##w(int##w##_t val, uint8_t bits) { \
1329 return zig_ctz_u##w((uint##w##_t)val, bits); \1330 return zig_ctz_u##w((uint##w##_t)val, bits); \
1330 }1331 }
1331#if zig_has_builtin(ctz) || defined(zig_gnuc) || defined(zig_tinyc)1332#if zig_has_builtin(ctz) || defined(zig_gcc) || defined(zig_tinyc)
1332#define zig_builtin_ctz(w) \1333#define zig_builtin_ctz(w) \
1333 static inline uint8_t zig_ctz_u##w(uint##w##_t val, uint8_t bits) { \1334 static inline uint8_t zig_ctz_u##w(uint##w##_t val, uint8_t bits) { \
1334 if (val == 0) return bits; \1335 if (val == 0) return bits; \
...@@ -1353,7 +1354,7 @@ zig_builtin_ctz(64)...@@ -1353,7 +1354,7 @@ zig_builtin_ctz(64)
1353 static inline uint8_t zig_clz_i##w(int##w##_t val, uint8_t bits) { \1354 static inline uint8_t zig_clz_i##w(int##w##_t val, uint8_t bits) { \
1354 return zig_clz_u##w((uint##w##_t)val, bits); \1355 return zig_clz_u##w((uint##w##_t)val, bits); \
1355 }1356 }
1356#if zig_has_builtin(clz) || defined(zig_gnuc) || defined(zig_tinyc)1357#if zig_has_builtin(clz) || defined(zig_gcc) || defined(zig_tinyc)
1357#define zig_builtin_clz(w) \1358#define zig_builtin_clz(w) \
1358 static inline uint8_t zig_clz_u##w(uint##w##_t val, uint8_t bits) { \1359 static inline uint8_t zig_clz_u##w(uint##w##_t val, uint8_t bits) { \
1359 if (val == 0) return bits; \1360 if (val == 0) return bits; \
...@@ -3208,7 +3209,7 @@ long double __cdecl nanl(char const* input);...@@ -3208,7 +3209,7 @@ long double __cdecl nanl(char const* input);
3208#define __builtin_infl() zig_msvc_flt_infl3209#define __builtin_infl() zig_msvc_flt_infl
3209#endif3210#endif
32103211
3211#if (zig_has_builtin(nan) && zig_has_builtin(nans) && zig_has_builtin(inf)) || defined(zig_gnuc)3212#if (zig_has_builtin(nan) && zig_has_builtin(nans) && zig_has_builtin(inf)) || defined(zig_gcc)
3212#define zig_make_special_f16(sign, name, arg, repr) sign zig_make_f16 (__builtin_##name, )(arg)3213#define zig_make_special_f16(sign, name, arg, repr) sign zig_make_f16 (__builtin_##name, )(arg)
3213#define zig_make_special_f32(sign, name, arg, repr) sign zig_make_f32 (__builtin_##name, )(arg)3214#define zig_make_special_f32(sign, name, arg, repr) sign zig_make_f32 (__builtin_##name, )(arg)
3214#define zig_make_special_f64(sign, name, arg, repr) sign zig_make_f64 (__builtin_##name, )(arg)3215#define zig_make_special_f64(sign, name, arg, repr) sign zig_make_f64 (__builtin_##name, )(arg)
...@@ -3234,7 +3235,7 @@ typedef double zig_f16;...@@ -3234,7 +3235,7 @@ typedef double zig_f16;
3234#elif LDBL_MANT_DIG == 113235#elif LDBL_MANT_DIG == 11
3235typedef long double zig_f16;3236typedef long double zig_f16;
3236#define zig_make_f16(fp, repr) fp##l3237#define zig_make_f16(fp, repr) fp##l
3237#elif FLT16_MANT_DIG == 11 && (zig_has_builtin(inff16) || defined(zig_gnuc))3238#elif FLT16_MANT_DIG == 11 && (zig_has_builtin(inff16) || defined(zig_gcc))
3238typedef _Float16 zig_f16;3239typedef _Float16 zig_f16;
3239#define zig_make_f16(fp, repr) fp##f163240#define zig_make_f16(fp, repr) fp##f16
3240#elif defined(__SIZEOF_FP16__)3241#elif defined(__SIZEOF_FP16__)
...@@ -3356,7 +3357,7 @@ typedef zig_u128 zig_f80;...@@ -3356,7 +3357,7 @@ typedef zig_u128 zig_f80;
3356#define zig_init_special_f80(sign, name, arg, repr) repr3357#define zig_init_special_f80(sign, name, arg, repr) repr
3357#endif3358#endif
33583359
3359#if !defined(zig_clang) && defined(zig_gnuc) && defined(zig_x86)3360#if defined(zig_gcc) && defined(zig_x86)
3360#define zig_f128_has_miscompilations 13361#define zig_f128_has_miscompilations 1
3361#else3362#else
3362#define zig_f128_has_miscompilations 03363#define zig_f128_has_miscompilations 0