| ... | @@ -9,6 +9,7 @@ | ... | @@ -9,6 +9,7 @@ |
| 9 | #define zig_clang | 9 | #define zig_clang |
| 10 | #define zig_gnuc | 10 | #define zig_gnuc |
| 11 | #elif defined(__GNUC__) | 11 | #elif defined(__GNUC__) |
| | 12 | #define zig_gcc |
| 12 | #define zig_gnuc | 13 | #define zig_gnuc |
| 13 | #elif defined(__IBMC__) | 14 | #elif defined(__IBMC__) |
| 14 | #define zig_xlc | 15 | #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 | #endif | 173 | #endif |
| 173 | | 174 | |
| 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_linksection | 266 | #define zig_linksection_fn zig_linksection |
| 266 | #endif | 267 | #endif |
| 267 | | 268 | |
| 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) |
| 333 | | 334 | |
| 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_unavailable | 419 | #define zig_breakpoint() zig_breakpoint_unavailable |
| 419 | #endif | 420 | #endif |
| 420 | | 421 | |
| 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() 0 | 427 | #define zig_return_address() 0 |
| 427 | #endif | 428 | #endif |
| 428 | | 429 | |
| 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() 0 | 435 | #define zig_frame_address() 0 |
| 435 | #endif | 436 | #endif |
| 436 | | 437 | |
| 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 | #else | 440 | #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__ >= 201112L | 454 | #elif __STDC_VERSION__ >= 201112L |
| 454 | #define zig_noreturn _Noreturn | 455 | #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 | #endif | 771 | #endif |
| 771 | | 772 | |
| 772 | static inline bool zig_addo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8_t bits) { | 773 | static 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 |
| 783 | | 784 | |
| 784 | zig_extern int32_t __addosi4(int32_t lhs, int32_t rhs, int *overflow); | 785 | zig_extern int32_t __addosi4(int32_t lhs, int32_t rhs, int *overflow); |
| 785 | static inline bool zig_addo_i32(int32_t *res, int32_t lhs, int32_t rhs, uint8_t bits) { | 786 | static 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 | #else | 790 | #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 | } |
| 797 | | 798 | |
| 798 | static inline bool zig_addo_u64(uint64_t *res, uint64_t lhs, uint64_t rhs, uint8_t bits) { | 799 | static 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 |
| 809 | | 810 | |
| 810 | zig_extern int64_t __addodi4(int64_t lhs, int64_t rhs, int *overflow); | 811 | zig_extern int64_t __addodi4(int64_t lhs, int64_t rhs, int *overflow); |
| 811 | static inline bool zig_addo_i64(int64_t *res, int64_t lhs, int64_t rhs, uint8_t bits) { | 812 | static 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 | #else | 816 | #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 | } |
| 823 | | 824 | |
| 824 | static inline bool zig_addo_u8(uint8_t *res, uint8_t lhs, uint8_t rhs, uint8_t bits) { | 825 | static 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 | } |
| 837 | | 838 | |
| 838 | static inline bool zig_addo_i8(int8_t *res, int8_t lhs, int8_t rhs, uint8_t bits) { | 839 | static 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 | } |
| 851 | | 852 | |
| 852 | static inline bool zig_addo_u16(uint16_t *res, uint16_t lhs, uint16_t rhs, uint8_t bits) { | 853 | static 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 | } |
| 865 | | 866 | |
| 866 | static inline bool zig_addo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t bits) { | 867 | static 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 | } |
| 879 | | 880 | |
| 880 | static inline bool zig_subo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8_t bits) { | 881 | static 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 |
| 891 | | 892 | |
| 892 | zig_extern int32_t __subosi4(int32_t lhs, int32_t rhs, int *overflow); | 893 | zig_extern int32_t __subosi4(int32_t lhs, int32_t rhs, int *overflow); |
| 893 | static inline bool zig_subo_i32(int32_t *res, int32_t lhs, int32_t rhs, uint8_t bits) { | 894 | static 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 | #else | 898 | #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 | } |
| 905 | | 906 | |
| 906 | static inline bool zig_subo_u64(uint64_t *res, uint64_t lhs, uint64_t rhs, uint8_t bits) { | 907 | static 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 |
| 917 | | 918 | |
| 918 | zig_extern int64_t __subodi4(int64_t lhs, int64_t rhs, int *overflow); | 919 | zig_extern int64_t __subodi4(int64_t lhs, int64_t rhs, int *overflow); |
| 919 | static inline bool zig_subo_i64(int64_t *res, int64_t lhs, int64_t rhs, uint8_t bits) { | 920 | static 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 | #else | 924 | #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 | } |
| 931 | | 932 | |
| 932 | static inline bool zig_subo_u8(uint8_t *res, uint8_t lhs, uint8_t rhs, uint8_t bits) { | 933 | static 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 | } |
| 945 | | 946 | |
| 946 | static inline bool zig_subo_i8(int8_t *res, int8_t lhs, int8_t rhs, uint8_t bits) { | 947 | static 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 | } |
| 959 | | 960 | |
| 960 | static inline bool zig_subo_u16(uint16_t *res, uint16_t lhs, uint16_t rhs, uint8_t bits) { | 961 | static 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 | } |
| 973 | | 974 | |
| 974 | static inline bool zig_subo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t bits) { | 975 | static 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 | } |
| 987 | | 988 | |
| 988 | static inline bool zig_mulo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8_t bits) { | 989 | static 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 |
| 999 | | 1000 | |
| 1000 | zig_extern int32_t __mulosi4(int32_t lhs, int32_t rhs, int *overflow); | 1001 | zig_extern int32_t __mulosi4(int32_t lhs, int32_t rhs, int *overflow); |
| 1001 | static inline bool zig_mulo_i32(int32_t *res, int32_t lhs, int32_t rhs, uint8_t bits) { | 1002 | static 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 | #else | 1006 | #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 | } |
| 1013 | | 1014 | |
| 1014 | static inline bool zig_mulo_u64(uint64_t *res, uint64_t lhs, uint64_t rhs, uint8_t bits) { | 1015 | static 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 |
| 1025 | | 1026 | |
| 1026 | zig_extern int64_t __mulodi4(int64_t lhs, int64_t rhs, int *overflow); | 1027 | zig_extern int64_t __mulodi4(int64_t lhs, int64_t rhs, int *overflow); |
| 1027 | static inline bool zig_mulo_i64(int64_t *res, int64_t lhs, int64_t rhs, uint8_t bits) { | 1028 | static 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 | #else | 1032 | #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 | } |
| 1039 | | 1040 | |
| 1040 | static inline bool zig_mulo_u8(uint8_t *res, uint8_t lhs, uint8_t rhs, uint8_t bits) { | 1041 | static 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 | } |
| 1053 | | 1054 | |
| 1054 | static inline bool zig_mulo_i8(int8_t *res, int8_t lhs, int8_t rhs, uint8_t bits) { | 1055 | static 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 | } |
| 1067 | | 1068 | |
| 1068 | static inline bool zig_mulo_u16(uint16_t *res, uint16_t lhs, uint16_t rhs, uint8_t bits) { | 1069 | static 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 | } |
| 1081 | | 1082 | |
| 1082 | static inline bool zig_mulo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t bits) { | 1083 | static 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) { |
| 1189 | | 1190 | |
| 1190 | static inline uint16_t zig_byte_swap_u16(uint16_t val, uint8_t bits) { | 1191 | static 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 | #else | 1195 | #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) { |
| 1204 | | 1205 | |
| 1205 | static inline uint32_t zig_byte_swap_u32(uint32_t val, uint8_t bits) { | 1206 | static 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 | #else | 1210 | #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) { |
| 1219 | | 1220 | |
| 1220 | static inline uint64_t zig_byte_swap_u64(uint64_t val, uint8_t bits) { | 1221 | static 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 | #else | 1225 | #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_infl | 3209 | #define __builtin_infl() zig_msvc_flt_infl |
| 3209 | #endif | 3210 | #endif |
| 3210 | | 3211 | |
| 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 == 11 | 3235 | #elif LDBL_MANT_DIG == 11 |
| 3235 | typedef long double zig_f16; | 3236 | typedef long double zig_f16; |
| 3236 | #define zig_make_f16(fp, repr) fp##l | 3237 | #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)) |
| 3238 | typedef _Float16 zig_f16; | 3239 | typedef _Float16 zig_f16; |
| 3239 | #define zig_make_f16(fp, repr) fp##f16 | 3240 | #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) repr | 3357 | #define zig_init_special_f80(sign, name, arg, repr) repr |
| 3357 | #endif | 3358 | #endif |
| 3358 | | 3359 | |
| 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 1 | 3361 | #define zig_f128_has_miscompilations 1 |
| 3361 | #else | 3362 | #else |
| 3362 | #define zig_f128_has_miscompilations 0 | 3363 | #define zig_f128_has_miscompilations 0 |