| ... | @@ -1,33 +1,143 @@ | ... | @@ -1,33 +1,143 @@ |
| 1 | #undef linux | 1 | #undef linux |
| 2 | | 2 | |
| 3 | #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ | | |
| 4 | #define __STDC_WANT_IEC_60559_TYPES_EXT__ | | |
| 5 | #endif | | |
| 6 | #include <float.h> | | |
| 7 | #include <limits.h> | | |
| 8 | #include <stdarg.h> | 3 | #include <stdarg.h> |
| 9 | #include <stddef.h> | 4 | #include <stddef.h> |
| 10 | #include <stdint.h> | | |
| 11 | | 5 | |
| 12 | #if _MSC_VER | 6 | #if defined(_MSC_VER) |
| 13 | #include <intrin.h> | 7 | #define zig_msvc |
| 14 | #elif defined(__i386__) || defined(__x86_64__) | 8 | #elif defined(__clang__) |
| 15 | #include <cpuid.h> | 9 | #define zig_clang |
| 16 | #endif | 10 | #define zig_gnuc |
| 17 | | 11 | #elif defined(__GNUC__) |
| 18 | #if !defined(__cplusplus) && __STDC_VERSION__ <= 201710L | 12 | #define zig_gnuc |
| 19 | #if __STDC_VERSION__ >= 199901L | 13 | #elif defined(__IBMC__) |
| 20 | #include <stdbool.h> | 14 | #define zig_xlc |
| | 15 | #elif defined(__TINYC__) |
| | 16 | #define zig_tinyc |
| | 17 | #elif defined(__slimcc__) |
| | 18 | #define zig_slimcc |
| | 19 | #endif |
| | 20 | |
| | 21 | #if defined(__aarch64__) || (defined(zig_msvc) && defined(_M_ARM64)) |
| | 22 | #define zig_aarch64 |
| | 23 | #elif defined(__thumb__) || (defined(zig_msvc) && defined(_M_ARM)) |
| | 24 | #define zig_thumb |
| | 25 | #define zig_arm |
| | 26 | #elif defined(__arm__) |
| | 27 | #define zig_arm |
| | 28 | #elif defined(__hexagon__) |
| | 29 | #define zig_hexagon |
| | 30 | #elif defined(__loongarch32) |
| | 31 | #define zig_loongarch32 |
| | 32 | #define zig_loongarch |
| | 33 | #elif defined(__loongarch64) |
| | 34 | #define zig_loongarch64 |
| | 35 | #define zig_loongarch |
| | 36 | #elif defined(__mips64) |
| | 37 | #define zig_mips64 |
| | 38 | #define zig_mips |
| | 39 | #elif defined(__mips__) |
| | 40 | #define zig_mips32 |
| | 41 | #define zig_mips |
| | 42 | #elif defined(__powerpc64__) |
| | 43 | #define zig_powerpc64 |
| | 44 | #define zig_powerpc |
| | 45 | #elif defined(__powerpc__) |
| | 46 | #define zig_powerpc32 |
| | 47 | #define zig_powerpc |
| | 48 | #elif defined(__riscv) && __riscv_xlen == 32 |
| | 49 | #define zig_riscv32 |
| | 50 | #define zig_riscv |
| | 51 | #elif defined(__riscv) && __riscv_xlen == 64 |
| | 52 | #define zig_riscv64 |
| | 53 | #define zig_riscv |
| | 54 | #elif defined(__s390x__) |
| | 55 | #define zig_s390x |
| | 56 | #elif defined(__sparc__) && defined(__arch64__) |
| | 57 | #define zig_sparc64 |
| | 58 | #define zig_sparc |
| | 59 | #elif defined(__sparc__) |
| | 60 | #define zig_sparc32 |
| | 61 | #define zig_sparc |
| | 62 | #elif defined(__wasm32__) |
| | 63 | #define zig_wasm32 |
| | 64 | #define zig_wasm |
| | 65 | #elif defined(__wasm64__) |
| | 66 | #define zig_wasm64 |
| | 67 | #define zig_wasm |
| | 68 | #elif defined(__i386__) || (defined(zig_msvc) && defined(_M_IX86)) |
| | 69 | #define zig_x86_32 |
| | 70 | #define zig_x86 |
| | 71 | #elif defined (__x86_64__) || (defined(zig_msvc) && defined(_M_X64)) |
| | 72 | #define zig_x86_64 |
| | 73 | #define zig_x86 |
| | 74 | #endif |
| | 75 | |
| | 76 | #if defined(zig_msvc) || __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ |
| | 77 | #define zig_little_endian 1 |
| | 78 | #define zig_big_endian 0 |
| 21 | #else | 79 | #else |
| 22 | typedef char bool; | 80 | #define zig_little_endian 0 |
| 23 | #define false 0 | 81 | #define zig_big_endian 1 |
| 24 | #define true 1 | | |
| 25 | #endif | 82 | #endif |
| | 83 | |
| | 84 | #if defined(_AIX) |
| | 85 | #define zig_aix |
| | 86 | #elif defined(__MACH__) |
| | 87 | #define zig_darwin |
| | 88 | #elif defined(__DragonFly__) |
| | 89 | #define zig_dragonfly |
| | 90 | #define zig_bsd |
| | 91 | #elif defined(__EMSCRIPTEN__) |
| | 92 | #define zig_emscripten |
| | 93 | #elif defined(__FreeBSD__) |
| | 94 | #define zig_freebsd |
| | 95 | #define zig_bsd |
| | 96 | #elif defined(__Fuchsia__) |
| | 97 | #define zig_fuchsia |
| | 98 | #elif defined(__HAIKU__) |
| | 99 | #define zig_haiku |
| | 100 | #elif defined(__gnu_hurd__) |
| | 101 | #define zig_hurd |
| | 102 | #elif defined(__linux__) |
| | 103 | #define zig_linux |
| | 104 | #elif defined(__NetBSD__) |
| | 105 | #define zig_netbsd |
| | 106 | #define zig_bsd |
| | 107 | #elif defined(__OpenBSD__) |
| | 108 | #define zig_openbsd |
| | 109 | #define zig_bsd |
| | 110 | #elif defined(__SVR4) |
| | 111 | #define zig_solaris |
| | 112 | #elif defined(__wasi__) |
| | 113 | #define zig_wasi |
| | 114 | #elif defined(_WIN32) |
| | 115 | #define zig_windows |
| | 116 | #elif defined(__MVS__) |
| | 117 | #define zig_zos |
| | 118 | #endif |
| | 119 | |
| | 120 | #if defined(zig_windows) |
| | 121 | #define zig_coff |
| | 122 | #elif defined(__ELF__) |
| | 123 | #define zig_elf |
| | 124 | #elif defined(zig_zos) |
| | 125 | #define zig_goff |
| | 126 | #elif defined(zig_darwin) |
| | 127 | #define zig_macho |
| | 128 | #elif defined(zig_aix) |
| | 129 | #define zig_xcoff |
| 26 | #endif | 130 | #endif |
| 27 | | 131 | |
| 28 | #define zig_concat(lhs, rhs) lhs##rhs | 132 | #define zig_concat(lhs, rhs) lhs##rhs |
| 29 | #define zig_expand_concat(lhs, rhs) zig_concat(lhs, rhs) | 133 | #define zig_expand_concat(lhs, rhs) zig_concat(lhs, rhs) |
| 30 | | 134 | |
| | 135 | #if defined(__has_include) |
| | 136 | #define zig_has_include(include) __has_include(include) |
| | 137 | #else |
| | 138 | #define zig_has_include(include) 0 |
| | 139 | #endif |
| | 140 | |
| 31 | #if defined(__has_builtin) | 141 | #if defined(__has_builtin) |
| 32 | #define zig_has_builtin(builtin) __has_builtin(__builtin_##builtin) | 142 | #define zig_has_builtin(builtin) __has_builtin(__builtin_##builtin) |
| 33 | #else | 143 | #else |
| ... | @@ -41,37 +151,19 @@ typedef char bool; | ... | @@ -41,37 +151,19 @@ typedef char bool; |
| 41 | #define zig_has_attribute(attribute) 0 | 151 | #define zig_has_attribute(attribute) 0 |
| 42 | #endif | 152 | #endif |
| 43 | | 153 | |
| 44 | #if __LITTLE_ENDIAN__ || _MSC_VER | 154 | #if __STDC_VERSION__ >= 202311L |
| 45 | #define zig_little_endian 1 | 155 | #define zig_threadlocal thread_local |
| 46 | #define zig_big_endian 0 | 156 | #elif __STDC_VERSION__ >= 201112L |
| 47 | #else | | |
| 48 | #define zig_little_endian 0 | | |
| 49 | #define zig_big_endian 1 | | |
| 50 | #endif | | |
| 51 | | | |
| 52 | #if __STDC_VERSION__ >= 201112L | | |
| 53 | #define zig_threadlocal _Thread_local | 157 | #define zig_threadlocal _Thread_local |
| 54 | #elif defined(__GNUC__) | 158 | #elif defined(zig_gnuc) || defined(zig_slimcc) |
| 55 | #define zig_threadlocal __thread | 159 | #define zig_threadlocal __thread |
| 56 | #elif _MSC_VER | 160 | #elif defined(zig_msvc) |
| 57 | #define zig_threadlocal __declspec(thread) | 161 | #define zig_threadlocal __declspec(thread) |
| 58 | #else | 162 | #else |
| 59 | #define zig_threadlocal zig_threadlocal_unavailable | 163 | #define zig_threadlocal zig_threadlocal_unavailable |
| 60 | #endif | 164 | #endif |
| 61 | | 165 | |
| 62 | #if defined(__clang__) | 166 | #if defined(zig_msvc) |
| 63 | #define zig_clang | | |
| 64 | #elif defined(__GNUC__) | | |
| 65 | #define zig_gnuc | | |
| 66 | #endif | | |
| 67 | | | |
| 68 | #if defined(zig_gnuc) && (defined(__i386__) || defined(__x86_64__)) | | |
| 69 | #define zig_f128_has_miscompilations 1 | | |
| 70 | #else | | |
| 71 | #define zig_f128_has_miscompilations 0 | | |
| 72 | #endif | | |
| 73 | | | |
| 74 | #if _MSC_VER | | |
| 75 | #define zig_const_arr | 167 | #define zig_const_arr |
| 76 | #define zig_callconv(c) __##c | 168 | #define zig_callconv(c) __##c |
| 77 | #else | 169 | #else |
| ... | @@ -82,7 +174,7 @@ typedef char bool; | ... | @@ -82,7 +174,7 @@ typedef char bool; |
| 82 | #if zig_has_attribute(naked) || defined(zig_gnuc) | 174 | #if zig_has_attribute(naked) || defined(zig_gnuc) |
| 83 | #define zig_naked_decl __attribute__((naked)) | 175 | #define zig_naked_decl __attribute__((naked)) |
| 84 | #define zig_naked __attribute__((naked)) | 176 | #define zig_naked __attribute__((naked)) |
| 85 | #elif defined(_MSC_VER) | 177 | #elif defined(zig_msvc) |
| 86 | #define zig_naked_decl | 178 | #define zig_naked_decl |
| 87 | #define zig_naked __declspec(naked) | 179 | #define zig_naked __declspec(naked) |
| 88 | #else | 180 | #else |
| ... | @@ -104,7 +196,7 @@ typedef char bool; | ... | @@ -104,7 +196,7 @@ typedef char bool; |
| 104 | | 196 | |
| 105 | #if zig_has_attribute(noinline) | 197 | #if zig_has_attribute(noinline) |
| 106 | #define zig_never_inline __attribute__((noinline)) zig_maybe_flatten | 198 | #define zig_never_inline __attribute__((noinline)) zig_maybe_flatten |
| 107 | #elif defined(_MSC_VER) | 199 | #elif defined(zig_msvc) |
| 108 | #define zig_never_inline __declspec(noinline) zig_maybe_flatten | 200 | #define zig_never_inline __declspec(noinline) zig_maybe_flatten |
| 109 | #else | 201 | #else |
| 110 | #define zig_never_inline zig_never_inline_unavailable | 202 | #define zig_never_inline zig_never_inline_unavailable |
| ... | @@ -124,46 +216,48 @@ typedef char bool; | ... | @@ -124,46 +216,48 @@ typedef char bool; |
| 124 | | 216 | |
| 125 | #if __STDC_VERSION__ >= 199901L | 217 | #if __STDC_VERSION__ >= 199901L |
| 126 | #define zig_restrict restrict | 218 | #define zig_restrict restrict |
| 127 | #elif defined(__GNUC__) | 219 | #elif defined(zig_gnuc) || defined(zig_tinyc) |
| 128 | #define zig_restrict __restrict | 220 | #define zig_restrict __restrict |
| 129 | #else | 221 | #else |
| 130 | #define zig_restrict | 222 | #define zig_restrict |
| 131 | #endif | 223 | #endif |
| 132 | | 224 | |
| 133 | #if zig_has_attribute(aligned) | 225 | #if zig_has_attribute(aligned) || defined(zig_tinyc) |
| 134 | #define zig_under_align(alignment) __attribute__((aligned(alignment))) | 226 | #define zig_under_align(alignment) __attribute__((aligned(alignment))) |
| 135 | #elif _MSC_VER | 227 | #elif defined(zig_msvc) |
| 136 | #define zig_under_align(alignment) __declspec(align(alignment)) | 228 | #define zig_under_align(alignment) __declspec(align(alignment)) |
| 137 | #else | 229 | #else |
| 138 | #define zig_under_align zig_align_unavailable | 230 | #define zig_under_align zig_align_unavailable |
| 139 | #endif | 231 | #endif |
| 140 | | 232 | |
| 141 | #if __STDC_VERSION__ >= 201112L | 233 | #if __STDC_VERSION__ >= 202311L |
| | 234 | #define zig_align(alignment) alignas(alignment) |
| | 235 | #elif __STDC_VERSION__ >= 201112L |
| 142 | #define zig_align(alignment) _Alignas(alignment) | 236 | #define zig_align(alignment) _Alignas(alignment) |
| 143 | #else | 237 | #else |
| 144 | #define zig_align(alignment) zig_under_align(alignment) | 238 | #define zig_align(alignment) zig_under_align(alignment) |
| 145 | #endif | 239 | #endif |
| 146 | | 240 | |
| 147 | #if zig_has_attribute(aligned) | 241 | #if zig_has_attribute(aligned) || defined(zig_tinyc) |
| 148 | #define zig_align_fn(alignment) __attribute__((aligned(alignment))) | 242 | #define zig_align_fn(alignment) __attribute__((aligned(alignment))) |
| 149 | #elif _MSC_VER | 243 | #elif defined(zig_msvc) |
| 150 | #define zig_align_fn(alignment) | 244 | #define zig_align_fn(alignment) |
| 151 | #else | 245 | #else |
| 152 | #define zig_align_fn zig_align_fn_unavailable | 246 | #define zig_align_fn zig_align_fn_unavailable |
| 153 | #endif | 247 | #endif |
| 154 | | 248 | |
| 155 | #if zig_has_attribute(packed) | 249 | #if zig_has_attribute(packed) || defined(zig_tinyc) |
| 156 | #define zig_packed(definition) __attribute__((packed)) definition | 250 | #define zig_packed(definition) __attribute__((packed)) definition |
| 157 | #elif _MSC_VER | 251 | #elif defined(zig_msvc) |
| 158 | #define zig_packed(definition) __pragma(pack(1)) definition __pragma(pack()) | 252 | #define zig_packed(definition) __pragma(pack(1)) definition __pragma(pack()) |
| 159 | #else | 253 | #else |
| 160 | #define zig_packed(definition) zig_packed_unavailable | 254 | #define zig_packed(definition) zig_packed_unavailable |
| 161 | #endif | 255 | #endif |
| 162 | | 256 | |
| 163 | #if zig_has_attribute(section) | 257 | #if zig_has_attribute(section) || defined(zig_tinyc) |
| 164 | #define zig_linksection(name) __attribute__((section(name))) | 258 | #define zig_linksection(name) __attribute__((section(name))) |
| 165 | #define zig_linksection_fn zig_linksection | 259 | #define zig_linksection_fn zig_linksection |
| 166 | #elif _MSC_VER | 260 | #elif defined(zig_msvc) |
| 167 | #define zig_linksection(name) __pragma(section(name, read, write)) __declspec(allocate(name)) | 261 | #define zig_linksection(name) __pragma(section(name, read, write)) __declspec(allocate(name)) |
| 168 | #define zig_linksection_fn(name) __pragma(section(name, read, execute)) __declspec(code_seg(name)) | 262 | #define zig_linksection_fn(name) __pragma(section(name, read, execute)) __declspec(code_seg(name)) |
| 169 | #else | 263 | #else |
| ... | @@ -171,8 +265,10 @@ typedef char bool; | ... | @@ -171,8 +265,10 @@ typedef char bool; |
| 171 | #define zig_linksection_fn zig_linksection | 265 | #define zig_linksection_fn zig_linksection |
| 172 | #endif | 266 | #endif |
| 173 | | 267 | |
| 174 | #if zig_has_builtin(unreachable) || defined(zig_gnuc) | 268 | #if zig_has_builtin(unreachable) || defined(zig_gnuc) || defined(zig_tinyc) |
| 175 | #define zig_unreachable() __builtin_unreachable() | 269 | #define zig_unreachable() __builtin_unreachable() |
| | 270 | #elif defined(zig_msvc) |
| | 271 | #define zig_unreachable() __assume(0) |
| 176 | #else | 272 | #else |
| 177 | #define zig_unreachable() | 273 | #define zig_unreachable() |
| 178 | #endif | 274 | #endif |
| ... | @@ -183,23 +279,23 @@ typedef char bool; | ... | @@ -183,23 +279,23 @@ typedef char bool; |
| 183 | #define zig_extern extern | 279 | #define zig_extern extern |
| 184 | #endif | 280 | #endif |
| 185 | | 281 | |
| 186 | #if _MSC_VER | 282 | #if defined(zig_msvc) |
| 187 | #if _M_X64 | 283 | #if defined(zig_x86_64) |
| 188 | #define zig_mangle_c(symbol) symbol | 284 | #define zig_mangle_c(symbol) symbol |
| 189 | #else /*_M_X64 */ | 285 | #else /* zig_x86_64 */ |
| 190 | #define zig_mangle_c(symbol) "_" symbol | 286 | #define zig_mangle_c(symbol) "_" symbol |
| 191 | #endif /*_M_X64 */ | 287 | #endif /* zig_x86_64 */ |
| 192 | #else /* _MSC_VER */ | 288 | #else /* zig_msvc */ |
| 193 | #if __APPLE__ | 289 | #if defined(zig_macho) |
| 194 | #define zig_mangle_c(symbol) "_" symbol | 290 | #define zig_mangle_c(symbol) "_" symbol |
| 195 | #else /* __APPLE__ */ | 291 | #else /* zig_macho */ |
| 196 | #define zig_mangle_c(symbol) symbol | 292 | #define zig_mangle_c(symbol) symbol |
| 197 | #endif /* __APPLE__ */ | 293 | #endif /* zig_macho */ |
| 198 | #endif /* _MSC_VER */ | 294 | #endif /* zig_msvc */ |
| 199 | | 295 | |
| 200 | #if zig_has_attribute(alias) && !__APPLE__ | 296 | #if (zig_has_attribute(alias) || defined(zig_tinyc)) && !defined(zig_macho) |
| 201 | #define zig_export(symbol, name) __attribute__((alias(symbol))) | 297 | #define zig_export(symbol, name) __attribute__((alias(symbol))) |
| 202 | #elif _MSC_VER | 298 | #elif defined(zig_msvc) |
| 203 | #define zig_export(symbol, name) ; \ | 299 | #define zig_export(symbol, name) ; \ |
| 204 | __pragma(comment(linker, "/alternatename:" zig_mangle_c(name) "=" zig_mangle_c(symbol))) | 300 | __pragma(comment(linker, "/alternatename:" zig_mangle_c(name) "=" zig_mangle_c(symbol))) |
| 205 | #else | 301 | #else |
| ... | @@ -209,24 +305,24 @@ typedef char bool; | ... | @@ -209,24 +305,24 @@ typedef char bool; |
| 209 | | 305 | |
| 210 | #define zig_mangled_tentative zig_mangled | 306 | #define zig_mangled_tentative zig_mangled |
| 211 | #define zig_mangled_final zig_mangled | 307 | #define zig_mangled_final zig_mangled |
| 212 | #if _MSC_VER | 308 | #if defined(zig_msvc) |
| 213 | #define zig_mangled(mangled, unmangled) ; \ | 309 | #define zig_mangled(mangled, unmangled) ; \ |
| 214 | zig_export(#mangled, unmangled) | 310 | zig_export(#mangled, unmangled) |
| 215 | #define zig_mangled_export(mangled, unmangled, symbol) \ | 311 | #define zig_mangled_export(mangled, unmangled, symbol) \ |
| 216 | zig_export(unmangled, #mangled) \ | 312 | zig_export(unmangled, #mangled) \ |
| 217 | zig_export(symbol, unmangled) | 313 | zig_export(symbol, unmangled) |
| 218 | #else /* _MSC_VER */ | 314 | #else /* zig_msvc */ |
| 219 | #define zig_mangled(mangled, unmangled) __asm(zig_mangle_c(unmangled)) | 315 | #define zig_mangled(mangled, unmangled) __asm(zig_mangle_c(unmangled)) |
| 220 | #define zig_mangled_export(mangled, unmangled, symbol) \ | 316 | #define zig_mangled_export(mangled, unmangled, symbol) \ |
| 221 | zig_mangled_final(mangled, unmangled) \ | 317 | zig_mangled_final(mangled, unmangled) \ |
| 222 | zig_export(symbol, unmangled) | 318 | zig_export(symbol, unmangled) |
| 223 | #endif /* _MSC_VER */ | 319 | #endif /* zig_msvc */ |
| 224 | | 320 | |
| 225 | #if _MSC_VER | 321 | #if defined(zig_msvc) |
| 226 | #define zig_import(Type, fn_name, libc_name, sig_args, call_args) zig_extern Type fn_name sig_args;\ | 322 | #define zig_import(Type, fn_name, libc_name, sig_args, call_args) zig_extern Type fn_name sig_args;\ |
| 227 | __pragma(comment(linker, "/alternatename:" zig_mangle_c(#fn_name) "=" zig_mangle_c(#libc_name))); | 323 | __pragma(comment(linker, "/alternatename:" zig_mangle_c(#fn_name) "=" zig_mangle_c(#libc_name))); |
| 228 | #define zig_import_builtin(Type, fn_name, libc_name, sig_args, call_args) zig_import(Type, fn_name, sig_args, call_args) | 324 | #define zig_import_builtin(Type, fn_name, libc_name, sig_args, call_args) zig_import(Type, fn_name, sig_args, call_args) |
| 229 | #else /* _MSC_VER */ | 325 | #else /* zig_msvc */ |
| 230 | #define zig_import(Type, fn_name, libc_name, sig_args, call_args) zig_extern Type fn_name sig_args __asm(zig_mangle_c(#libc_name)); | 326 | #define zig_import(Type, fn_name, libc_name, sig_args, call_args) zig_extern Type fn_name sig_args __asm(zig_mangle_c(#libc_name)); |
| 231 | #define zig_import_builtin(Type, fn_name, libc_name, sig_args, call_args) zig_extern Type libc_name sig_args; \ | 327 | #define zig_import_builtin(Type, fn_name, libc_name, sig_args, call_args) zig_extern Type libc_name sig_args; \ |
| 232 | static inline Type fn_name sig_args { return libc_name call_args; } | 328 | static inline Type fn_name sig_args { return libc_name call_args; } |
| ... | @@ -235,10 +331,10 @@ typedef char bool; | ... | @@ -235,10 +331,10 @@ typedef char bool; |
| 235 | #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) | 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) |
| 236 | #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) | 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) |
| 237 | | 333 | |
| 238 | #if zig_has_attribute(weak) || defined(zig_gnuc) | 334 | #if zig_has_attribute(weak) || defined(zig_gnuc) || defined(zig_tinyc) |
| 239 | #define zig_weak_linkage __attribute__((weak)) | 335 | #define zig_weak_linkage __attribute__((weak)) |
| 240 | #define zig_weak_linkage_fn __attribute__((weak)) | 336 | #define zig_weak_linkage_fn __attribute__((weak)) |
| 241 | #elif _MSC_VER | 337 | #elif defined(zig_msvc) |
| 242 | #define zig_weak_linkage __declspec(selectany) | 338 | #define zig_weak_linkage __declspec(selectany) |
| 243 | #define zig_weak_linkage_fn | 339 | #define zig_weak_linkage_fn |
| 244 | #else | 340 | #else |
| ... | @@ -246,72 +342,94 @@ typedef char bool; | ... | @@ -246,72 +342,94 @@ typedef char bool; |
| 246 | #define zig_weak_linkage_fn zig_weak_linkage_unavailable | 342 | #define zig_weak_linkage_fn zig_weak_linkage_unavailable |
| 247 | #endif | 343 | #endif |
| 248 | | 344 | |
| | 345 | #if defined(zig_gnuc) || defined(zig_tinyc) || defined(zig_slimcc) |
| | 346 | #define zig_gnuc_asm |
| | 347 | #endif |
| | 348 | |
| 249 | #if zig_has_builtin(trap) | 349 | #if zig_has_builtin(trap) |
| 250 | #define zig_trap() __builtin_trap() | 350 | #define zig_trap() __builtin_trap() |
| 251 | #elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) | 351 | #elif defined(zig_msvc) |
| | 352 | |
| | 353 | #if defined(zig_x86) |
| 252 | #define zig_trap() __ud2() | 354 | #define zig_trap() __ud2() |
| 253 | #elif defined(_MSC_VER) | 355 | #else |
| 254 | #define zig_trap() __fastfail(7) | 356 | #define zig_trap() __fastfail(7) |
| 255 | #elif defined(__thumb__) | 357 | #endif |
| | 358 | |
| | 359 | #elif defined(zig_gnuc_asm) |
| | 360 | |
| | 361 | #if defined(zig_thumb) |
| 256 | #define zig_trap() __asm__ volatile("udf #0xfe") | 362 | #define zig_trap() __asm__ volatile("udf #0xfe") |
| 257 | #elif defined(__arm__) || defined(__aarch64__) | 363 | #elif defined(zig_arm) || defined(zig_aarch64) |
| 258 | #define zig_trap() __asm__ volatile("udf #0xfdee") | 364 | #define zig_trap() __asm__ volatile("udf #0xfdee") |
| 259 | #elif defined(__hexagon__) | 365 | #elif defined(zig_hexagon) |
| 260 | #define zig_trap() __asm__ volatile("r27:26 = memd(#0xbadc0fee)") | 366 | #define zig_trap() __asm__ volatile("r27:26 = memd(#0xbadc0fee)") |
| 261 | #elif defined(__loongarch__) || defined(__powerpc__) | 367 | #elif defined(zig_loongarch) || defined(zig_powerpc) |
| 262 | #define zig_trap() __asm__ volatile(".word 0x0") | 368 | #define zig_trap() __asm__ volatile(".word 0x0") |
| 263 | #elif defined(__mips__) | 369 | #elif defined(zig_mips) |
| 264 | #define zig_trap() __asm__ volatile(".word 0x3d") | 370 | #define zig_trap() __asm__ volatile(".word 0x3d") |
| 265 | #elif defined(__riscv) | 371 | #elif defined(zig_riscv) |
| 266 | #define zig_trap() __asm__ volatile("unimp") | 372 | #define zig_trap() __asm__ volatile("unimp") |
| 267 | #elif defined(__s390__) | 373 | #elif defined(zig_s390x) |
| 268 | #define zig_trap() __asm__ volatile("j 0x2") | 374 | #define zig_trap() __asm__ volatile("j 0x2") |
| 269 | #elif defined(__sparc__) | 375 | #elif defined(zig_sparc) |
| 270 | #define zig_trap() __asm__ volatile("illtrap") | 376 | #define zig_trap() __asm__ volatile("illtrap") |
| 271 | #elif defined(__i386__) || defined(__x86_64__) | 377 | #elif defined(zig_x86) |
| 272 | #define zig_trap() __asm__ volatile("ud2") | 378 | #define zig_trap() __asm__ volatile("ud2") |
| 273 | #else | 379 | #else |
| 274 | #define zig_trap() zig_trap_unavailable | 380 | #define zig_trap() zig_trap_unavailable |
| 275 | #endif | 381 | #endif |
| 276 | | 382 | |
| | 383 | #else |
| | 384 | #define zig_trap() zig_trap_unavailable |
| | 385 | #endif |
| | 386 | |
| 277 | #if zig_has_builtin(debugtrap) | 387 | #if zig_has_builtin(debugtrap) |
| 278 | #define zig_breakpoint() __builtin_debugtrap() | 388 | #define zig_breakpoint() __builtin_debugtrap() |
| 279 | #elif defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__) | 389 | #elif defined(zig_msvc) |
| 280 | #define zig_breakpoint() __debugbreak() | 390 | #define zig_breakpoint() __debugbreak() |
| 281 | #elif defined(__arm__) | 391 | #elif defined(zig_gnuc_asm) |
| | 392 | |
| | 393 | #if defined(zig_arm) |
| 282 | #define zig_breakpoint() __asm__ volatile("bkpt #0x0") | 394 | #define zig_breakpoint() __asm__ volatile("bkpt #0x0") |
| 283 | #elif defined(__aarch64__) | 395 | #elif defined(zig_aarch64) |
| 284 | #define zig_breakpoint() __asm__ volatile("brk #0xf000") | 396 | #define zig_breakpoint() __asm__ volatile("brk #0xf000") |
| 285 | #elif defined(__hexagon__) | 397 | #elif defined(zig_hexagon) |
| 286 | #define zig_breakpoint() __asm__ volatile("brkpt") | 398 | #define zig_breakpoint() __asm__ volatile("brkpt") |
| 287 | #elif defined(__loongarch__) | 399 | #elif defined(zig_loongarch) |
| 288 | #define zig_breakpoint() __asm__ volatile("break 0x0") | 400 | #define zig_breakpoint() __asm__ volatile("break 0x0") |
| 289 | #elif defined(__mips__) | 401 | #elif defined(zig_mips) |
| 290 | #define zig_breakpoint() __asm__ volatile("break") | 402 | #define zig_breakpoint() __asm__ volatile("break") |
| 291 | #elif defined(__powerpc__) | 403 | #elif defined(zig_powerpc) |
| 292 | #define zig_breakpoint() __asm__ volatile("trap") | 404 | #define zig_breakpoint() __asm__ volatile("trap") |
| 293 | #elif defined(__riscv) | 405 | #elif defined(zig_riscv) |
| 294 | #define zig_breakpoint() __asm__ volatile("ebreak") | 406 | #define zig_breakpoint() __asm__ volatile("ebreak") |
| 295 | #elif defined(__s390__) | 407 | #elif defined(zig_s390x) |
| 296 | #define zig_breakpoint() __asm__ volatile("j 0x6") | 408 | #define zig_breakpoint() __asm__ volatile("j 0x6") |
| 297 | #elif defined(__sparc__) | 409 | #elif defined(zig_sparc) |
| 298 | #define zig_breakpoint() __asm__ volatile("ta 0x1") | 410 | #define zig_breakpoint() __asm__ volatile("ta 0x1") |
| 299 | #elif defined(__i386__) || defined(__x86_64__) | 411 | #elif defined(zig_x86) |
| 300 | #define zig_breakpoint() __asm__ volatile("int $0x3") | 412 | #define zig_breakpoint() __asm__ volatile("int $0x3") |
| 301 | #else | 413 | #else |
| 302 | #define zig_breakpoint() zig_breakpoint_unavailable | 414 | #define zig_breakpoint() zig_breakpoint_unavailable |
| 303 | #endif | 415 | #endif |
| 304 | | 416 | |
| 305 | #if zig_has_builtin(return_address) || defined(zig_gnuc) | 417 | #else |
| | 418 | #define zig_breakpoint() zig_breakpoint_unavailable |
| | 419 | #endif |
| | 420 | |
| | 421 | #if zig_has_builtin(return_address) || defined(zig_gnuc) || defined(zig_tinyc) |
| 306 | #define zig_return_address() __builtin_extract_return_addr(__builtin_return_address(0)) | 422 | #define zig_return_address() __builtin_extract_return_addr(__builtin_return_address(0)) |
| 307 | #elif defined(_MSC_VER) | 423 | #elif defined(zig_msvc) |
| 308 | #define zig_return_address() _ReturnAddress() | 424 | #define zig_return_address() _ReturnAddress() |
| 309 | #else | 425 | #else |
| 310 | #define zig_return_address() 0 | 426 | #define zig_return_address() 0 |
| 311 | #endif | 427 | #endif |
| 312 | | 428 | |
| 313 | #if zig_has_builtin(frame_address) || defined(zig_gnuc) | 429 | #if zig_has_builtin(frame_address) || defined(zig_gnuc) || defined(zig_tinyc) |
| 314 | #define zig_frame_address() __builtin_frame_address(0) | 430 | #define zig_frame_address() __builtin_frame_address(0) |
| | 431 | #elif defined(zig_msvc) |
| | 432 | #define zig_frame_address() _AddressOfReturnAddress() |
| 315 | #else | 433 | #else |
| 316 | #define zig_frame_address() 0 | 434 | #define zig_frame_address() 0 |
| 317 | #endif | 435 | #endif |
| ... | @@ -330,18 +448,18 @@ typedef char bool; | ... | @@ -330,18 +448,18 @@ typedef char bool; |
| 330 | #define zig_wasm_memory_grow(index, delta) zig_unimplemented() | 448 | #define zig_wasm_memory_grow(index, delta) zig_unimplemented() |
| 331 | #endif | 449 | #endif |
| 332 | | 450 | |
| 333 | #if __STDC_VERSION__ >= 201112L | 451 | #if __STDC_VERSION__ >= 202311L |
| | 452 | #define zig_noreturn [[noreturn]] |
| | 453 | #elif __STDC_VERSION__ >= 201112L |
| 334 | #define zig_noreturn _Noreturn | 454 | #define zig_noreturn _Noreturn |
| 335 | #elif zig_has_attribute(noreturn) || defined(zig_gnuc) | 455 | #elif zig_has_attribute(noreturn) || defined(zig_gnuc) || defined(zig_tinyc) |
| 336 | #define zig_noreturn __attribute__((noreturn)) | 456 | #define zig_noreturn __attribute__((noreturn)) |
| 337 | #elif _MSC_VER | 457 | #elif defined(zig_msvc) |
| 338 | #define zig_noreturn __declspec(noreturn) | 458 | #define zig_noreturn __declspec(noreturn) |
| 339 | #else | 459 | #else |
| 340 | #define zig_noreturn | 460 | #define zig_noreturn |
| 341 | #endif | 461 | #endif |
| 342 | | 462 | |
| 343 | #define zig_bitSizeOf(T) (CHAR_BIT * sizeof(T)) | | |
| 344 | | | |
| 345 | #define zig_compiler_rt_abbrev_uint32_t si | 463 | #define zig_compiler_rt_abbrev_uint32_t si |
| 346 | #define zig_compiler_rt_abbrev_int32_t si | 464 | #define zig_compiler_rt_abbrev_int32_t si |
| 347 | #define zig_compiler_rt_abbrev_uint64_t di | 465 | #define zig_compiler_rt_abbrev_uint64_t di |
| ... | @@ -357,12 +475,25 @@ typedef char bool; | ... | @@ -357,12 +475,25 @@ typedef char bool; |
| 357 | zig_extern void *memcpy (void *zig_restrict, void const *zig_restrict, size_t); | 475 | zig_extern void *memcpy (void *zig_restrict, void const *zig_restrict, size_t); |
| 358 | zig_extern void *memset (void *, int, size_t); | 476 | zig_extern void *memset (void *, int, size_t); |
| 359 | | 477 | |
| 360 | /* ===================== 8/16/32/64-bit Integer Support ===================== */ | 478 | /* ================ Bool and 8/16/32/64-bit Integer Support ================= */ |
| 361 | | 479 | |
| 362 | #if __STDC_VERSION__ >= 199901L || _MSC_VER | 480 | #include <limits.h> |
| 363 | #include <stdint.h> | 481 | |
| | 482 | #define zig_bitSizeOf(T) (CHAR_BIT * sizeof(T)) |
| | 483 | |
| | 484 | #if __STDC_VERSION__ >= 202311L |
| | 485 | /* bool, true, and false are provided by the language. */ |
| | 486 | #elif __STDC_VERSION__ >= 199901L || zig_has_include(<stdbool.h>) |
| | 487 | #include <stdbool.h> |
| 364 | #else | 488 | #else |
| | 489 | typedef char bool; |
| | 490 | #define false 0 |
| | 491 | #define true 1 |
| | 492 | #endif |
| 365 | | 493 | |
| | 494 | #if __STDC_VERSION__ >= 199901L || defined(zig_msvc) || zig_has_include(<stdint.h>) |
| | 495 | #include <stdint.h> |
| | 496 | #else |
| 366 | #if SCHAR_MIN == ~0x7F && SCHAR_MAX == 0x7F && UCHAR_MAX == 0xFF | 497 | #if SCHAR_MIN == ~0x7F && SCHAR_MAX == 0x7F && UCHAR_MAX == 0xFF |
| 367 | typedef unsigned char uint8_t; | 498 | typedef unsigned char uint8_t; |
| 368 | typedef signed char int8_t; | 499 | typedef signed char int8_t; |
| ... | @@ -1136,7 +1267,7 @@ static inline int64_t zig_bit_reverse_i64(int64_t val, uint8_t bits) { | ... | @@ -1136,7 +1267,7 @@ static inline int64_t zig_bit_reverse_i64(int64_t val, uint8_t bits) { |
| 1136 | static inline uint8_t zig_popcount_i##w(int##w##_t val, uint8_t bits) { \ | 1267 | static inline uint8_t zig_popcount_i##w(int##w##_t val, uint8_t bits) { \ |
| 1137 | return zig_popcount_u##w((uint##w##_t)val, bits); \ | 1268 | return zig_popcount_u##w((uint##w##_t)val, bits); \ |
| 1138 | } | 1269 | } |
| 1139 | #if zig_has_builtin(popcount) || defined(zig_gnuc) | 1270 | #if zig_has_builtin(popcount) || defined(zig_gnuc) || defined(zig_tinyc) |
| 1140 | #define zig_builtin_popcount(w) \ | 1271 | #define zig_builtin_popcount(w) \ |
| 1141 | static inline uint8_t zig_popcount_u##w(uint##w##_t val, uint8_t bits) { \ | 1272 | static inline uint8_t zig_popcount_u##w(uint##w##_t val, uint8_t bits) { \ |
| 1142 | (void)bits; \ | 1273 | (void)bits; \ |
| ... | @@ -1165,7 +1296,7 @@ zig_builtin_popcount(64) | ... | @@ -1165,7 +1296,7 @@ zig_builtin_popcount(64) |
| 1165 | static inline uint8_t zig_ctz_i##w(int##w##_t val, uint8_t bits) { \ | 1296 | static inline uint8_t zig_ctz_i##w(int##w##_t val, uint8_t bits) { \ |
| 1166 | return zig_ctz_u##w((uint##w##_t)val, bits); \ | 1297 | return zig_ctz_u##w((uint##w##_t)val, bits); \ |
| 1167 | } | 1298 | } |
| 1168 | #if zig_has_builtin(ctz) || defined(zig_gnuc) | 1299 | #if zig_has_builtin(ctz) || defined(zig_gnuc) || defined(zig_tinyc) |
| 1169 | #define zig_builtin_ctz(w) \ | 1300 | #define zig_builtin_ctz(w) \ |
| 1170 | static inline uint8_t zig_ctz_u##w(uint##w##_t val, uint8_t bits) { \ | 1301 | static inline uint8_t zig_ctz_u##w(uint##w##_t val, uint8_t bits) { \ |
| 1171 | if (val == 0) return bits; \ | 1302 | if (val == 0) return bits; \ |
| ... | @@ -1190,7 +1321,7 @@ zig_builtin_ctz(64) | ... | @@ -1190,7 +1321,7 @@ zig_builtin_ctz(64) |
| 1190 | static inline uint8_t zig_clz_i##w(int##w##_t val, uint8_t bits) { \ | 1321 | static inline uint8_t zig_clz_i##w(int##w##_t val, uint8_t bits) { \ |
| 1191 | return zig_clz_u##w((uint##w##_t)val, bits); \ | 1322 | return zig_clz_u##w((uint##w##_t)val, bits); \ |
| 1192 | } | 1323 | } |
| 1193 | #if zig_has_builtin(clz) || defined(zig_gnuc) | 1324 | #if zig_has_builtin(clz) || defined(zig_gnuc) || defined(zig_tinyc) |
| 1194 | #define zig_builtin_clz(w) \ | 1325 | #define zig_builtin_clz(w) \ |
| 1195 | static inline uint8_t zig_clz_u##w(uint##w##_t val, uint8_t bits) { \ | 1326 | static inline uint8_t zig_clz_u##w(uint##w##_t val, uint8_t bits) { \ |
| 1196 | if (val == 0) return bits; \ | 1327 | if (val == 0) return bits; \ |
| ... | @@ -1258,7 +1389,7 @@ typedef struct { zig_align(16) int64_t hi; uint64_t lo; } zig_i128; | ... | @@ -1258,7 +1389,7 @@ typedef struct { zig_align(16) int64_t hi; uint64_t lo; } zig_i128; |
| 1258 | #define zig_make_u128(hi, lo) ((zig_u128){ .h##i = (hi), .l##o = (lo) }) | 1389 | #define zig_make_u128(hi, lo) ((zig_u128){ .h##i = (hi), .l##o = (lo) }) |
| 1259 | #define zig_make_i128(hi, lo) ((zig_i128){ .h##i = (hi), .l##o = (lo) }) | 1390 | #define zig_make_i128(hi, lo) ((zig_i128){ .h##i = (hi), .l##o = (lo) }) |
| 1260 | | 1391 | |
| 1261 | #if _MSC_VER /* MSVC doesn't allow struct literals in constant expressions */ | 1392 | #if defined(zig_msvc) /* MSVC doesn't allow struct literals in constant expressions */ |
| 1262 | #define zig_init_u128(hi, lo) { .h##i = (hi), .l##o = (lo) } | 1393 | #define zig_init_u128(hi, lo) { .h##i = (hi), .l##o = (lo) } |
| 1263 | #define zig_init_i128(hi, lo) { .h##i = (hi), .l##o = (lo) } | 1394 | #define zig_init_i128(hi, lo) { .h##i = (hi), .l##o = (lo) } |
| 1264 | #else /* But non-MSVC doesn't like the unprotected commas */ | 1395 | #else /* But non-MSVC doesn't like the unprotected commas */ |
| ... | @@ -3020,7 +3151,13 @@ static inline uint16_t zig_popcount_big(const void *val, bool is_signed, uint16_ | ... | @@ -3020,7 +3151,13 @@ static inline uint16_t zig_popcount_big(const void *val, bool is_signed, uint16_ |
| 3020 | | 3151 | |
| 3021 | /* ========================= Floating Point Support ========================= */ | 3152 | /* ========================= Floating Point Support ========================= */ |
| 3022 | | 3153 | |
| 3023 | #if _MSC_VER | 3154 | #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ |
| | 3155 | #define __STDC_WANT_IEC_60559_TYPES_EXT__ |
| | 3156 | #endif |
| | 3157 | |
| | 3158 | #include <float.h> |
| | 3159 | |
| | 3160 | #if defined(zig_msvc) |
| 3024 | float __cdecl nanf(char const* input); | 3161 | float __cdecl nanf(char const* input); |
| 3025 | double __cdecl nan(char const* input); | 3162 | double __cdecl nan(char const* input); |
| 3026 | long double __cdecl nanl(char const* input); | 3163 | long double __cdecl nanl(char const* input); |
| ... | @@ -3082,7 +3219,7 @@ typedef uint16_t zig_f16; | ... | @@ -3082,7 +3219,7 @@ typedef uint16_t zig_f16; |
| 3082 | #undef zig_init_special_f16 | 3219 | #undef zig_init_special_f16 |
| 3083 | #define zig_init_special_f16(sign, name, arg, repr) repr | 3220 | #define zig_init_special_f16(sign, name, arg, repr) repr |
| 3084 | #endif | 3221 | #endif |
| 3085 | #if __APPLE__ && (defined(__i386__) || defined(__x86_64__)) | 3222 | #if defined(zig_darwin) && defined(zig_x86) |
| 3086 | typedef uint16_t zig_compiler_rt_f16; | 3223 | typedef uint16_t zig_compiler_rt_f16; |
| 3087 | #else | 3224 | #else |
| 3088 | typedef zig_f16 zig_compiler_rt_f16; | 3225 | typedef zig_f16 zig_compiler_rt_f16; |
| ... | @@ -3090,7 +3227,7 @@ typedef zig_f16 zig_compiler_rt_f16; | ... | @@ -3090,7 +3227,7 @@ typedef zig_f16 zig_compiler_rt_f16; |
| 3090 | | 3227 | |
| 3091 | #define zig_has_f32 1 | 3228 | #define zig_has_f32 1 |
| 3092 | #define zig_libc_name_f32(name) name##f | 3229 | #define zig_libc_name_f32(name) name##f |
| 3093 | #if _MSC_VER | 3230 | #if defined(zig_msvc) |
| 3094 | #define zig_init_special_f32(sign, name, arg, repr) sign zig_make_f32(zig_msvc_flt_##name, ) | 3231 | #define zig_init_special_f32(sign, name, arg, repr) sign zig_make_f32(zig_msvc_flt_##name, ) |
| 3095 | #else | 3232 | #else |
| 3096 | #define zig_init_special_f32(sign, name, arg, repr) zig_make_special_f32(sign, name, arg, repr) | 3233 | #define zig_init_special_f32(sign, name, arg, repr) zig_make_special_f32(sign, name, arg, repr) |
| ... | @@ -3122,7 +3259,7 @@ typedef uint32_t zig_f32; | ... | @@ -3122,7 +3259,7 @@ typedef uint32_t zig_f32; |
| 3122 | #define zig_has_f64 1 | 3259 | #define zig_has_f64 1 |
| 3123 | #define zig_libc_name_f64(name) name | 3260 | #define zig_libc_name_f64(name) name |
| 3124 | | 3261 | |
| 3125 | #if _MSC_VER | 3262 | #if defined(zig_msvc) |
| 3126 | #define zig_init_special_f64(sign, name, arg, repr) sign zig_make_f64(zig_msvc_flt_##name, ) | 3263 | #define zig_init_special_f64(sign, name, arg, repr) sign zig_make_f64(zig_msvc_flt_##name, ) |
| 3127 | #else | 3264 | #else |
| 3128 | #define zig_init_special_f64(sign, name, arg, repr) zig_make_special_f64(sign, name, arg, repr) | 3265 | #define zig_init_special_f64(sign, name, arg, repr) zig_make_special_f64(sign, name, arg, repr) |
| ... | @@ -3187,6 +3324,12 @@ typedef zig_u128 zig_f80; | ... | @@ -3187,6 +3324,12 @@ typedef zig_u128 zig_f80; |
| 3187 | #define zig_init_special_f80(sign, name, arg, repr) repr | 3324 | #define zig_init_special_f80(sign, name, arg, repr) repr |
| 3188 | #endif | 3325 | #endif |
| 3189 | | 3326 | |
| | 3327 | #if !defined(zig_clang) && defined(zig_gnuc) && defined(zig_x86) |
| | 3328 | #define zig_f128_has_miscompilations 1 |
| | 3329 | #else |
| | 3330 | #define zig_f128_has_miscompilations 0 |
| | 3331 | #endif |
| | 3332 | |
| 3190 | #define zig_has_f128 1 | 3333 | #define zig_has_f128 1 |
| 3191 | #define zig_libc_name_f128(name) name##q | 3334 | #define zig_libc_name_f128(name) name##q |
| 3192 | #define zig_init_special_f128(sign, name, arg, repr) zig_make_special_f128(sign, name, arg, repr) | 3335 | #define zig_init_special_f128(sign, name, arg, repr) zig_make_special_f128(sign, name, arg, repr) |
| ... | @@ -3215,7 +3358,7 @@ typedef __float128 zig_f128; | ... | @@ -3215,7 +3358,7 @@ typedef __float128 zig_f128; |
| 3215 | #define zig_has_f128 0 | 3358 | #define zig_has_f128 0 |
| 3216 | #undef zig_make_special_f128 | 3359 | #undef zig_make_special_f128 |
| 3217 | #undef zig_init_special_f128 | 3360 | #undef zig_init_special_f128 |
| 3218 | #if __APPLE__ || defined(__aarch64__) | 3361 | #if defined(zig_darwin) || defined(zig_aarch64) |
| 3219 | typedef __attribute__((__vector_size__(2 * sizeof(uint64_t)))) uint64_t zig_v2u64; | 3362 | typedef __attribute__((__vector_size__(2 * sizeof(uint64_t)))) uint64_t zig_v2u64; |
| 3220 | zig_basic_operator(zig_v2u64, xor_v2u64, ^) | 3363 | zig_basic_operator(zig_v2u64, xor_v2u64, ^) |
| 3221 | #define zig_repr_f128 v2u64 | 3364 | #define zig_repr_f128 v2u64 |
| ... | @@ -3234,10 +3377,10 @@ typedef zig_u128 zig_f128; | ... | @@ -3234,10 +3377,10 @@ typedef zig_u128 zig_f128; |
| 3234 | #endif | 3377 | #endif |
| 3235 | #endif | 3378 | #endif |
| 3236 | | 3379 | |
| 3237 | #if !_MSC_VER && defined(ZIG_TARGET_ABI_MSVC) | 3380 | #if !defined(zig_msvc) && defined(ZIG_TARGET_ABI_MSVC) |
| 3238 | /* Emulate msvc abi on a gnu compiler */ | 3381 | /* Emulate msvc abi on a gnu compiler */ |
| 3239 | typedef zig_f64 zig_c_longdouble; | 3382 | typedef zig_f64 zig_c_longdouble; |
| 3240 | #elif _MSC_VER && !defined(ZIG_TARGET_ABI_MSVC) | 3383 | #elif defined(zig_msvc) && !defined(ZIG_TARGET_ABI_MSVC) |
| 3241 | /* Emulate gnu abi on an msvc compiler */ | 3384 | /* Emulate gnu abi on an msvc compiler */ |
| 3242 | typedef zig_f128 zig_c_longdouble; | 3385 | typedef zig_f128 zig_c_longdouble; |
| 3243 | #else | 3386 | #else |
| ... | @@ -3586,7 +3729,7 @@ zig_float_builtins(64) | ... | @@ -3586,7 +3729,7 @@ zig_float_builtins(64) |
| 3586 | res = zig_atomicrmw_expected; \ | 3729 | res = zig_atomicrmw_expected; \ |
| 3587 | } while (0) | 3730 | } while (0) |
| 3588 | | 3731 | |
| 3589 | #if __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_ATOMICS__) | 3732 | #if (__STDC_VERSION__ >= 201112L || (zig_has_include(<stdatomic.h>) && !defined(zig_msvc))) && !defined(__STDC_NO_ATOMICS__) |
| 3590 | #include <stdatomic.h> | 3733 | #include <stdatomic.h> |
| 3591 | typedef enum memory_order zig_memory_order; | 3734 | typedef enum memory_order zig_memory_order; |
| 3592 | #define zig_memory_order_relaxed memory_order_relaxed | 3735 | #define zig_memory_order_relaxed memory_order_relaxed |
| ... | @@ -3614,7 +3757,7 @@ typedef enum memory_order zig_memory_order; | ... | @@ -3614,7 +3757,7 @@ typedef enum memory_order zig_memory_order; |
| 3614 | #define zig_atomicrmw_add_float zig_atomicrmw_add | 3757 | #define zig_atomicrmw_add_float zig_atomicrmw_add |
| 3615 | #undef zig_atomicrmw_sub_float | 3758 | #undef zig_atomicrmw_sub_float |
| 3616 | #define zig_atomicrmw_sub_float zig_atomicrmw_sub | 3759 | #define zig_atomicrmw_sub_float zig_atomicrmw_sub |
| 3617 | #elif defined(__GNUC__) | 3760 | #elif defined(zig_gnuc) |
| 3618 | typedef int zig_memory_order; | 3761 | typedef int zig_memory_order; |
| 3619 | #define zig_memory_order_relaxed __ATOMIC_RELAXED | 3762 | #define zig_memory_order_relaxed __ATOMIC_RELAXED |
| 3620 | #define zig_memory_order_acquire __ATOMIC_ACQUIRE | 3763 | #define zig_memory_order_acquire __ATOMIC_ACQUIRE |
| ... | @@ -3637,7 +3780,7 @@ typedef int zig_memory_order; | ... | @@ -3637,7 +3780,7 @@ typedef int zig_memory_order; |
| 3637 | #define zig_atomic_load(res, obj, order, Type, ReprType) __atomic_load (obj, &(res), order) | 3780 | #define zig_atomic_load(res, obj, order, Type, ReprType) __atomic_load (obj, &(res), order) |
| 3638 | #undef zig_atomicrmw_xchg_float | 3781 | #undef zig_atomicrmw_xchg_float |
| 3639 | #define zig_atomicrmw_xchg_float zig_atomicrmw_xchg | 3782 | #define zig_atomicrmw_xchg_float zig_atomicrmw_xchg |
| 3640 | #elif _MSC_VER && (_M_IX86 || _M_X64) | 3783 | #elif defined(zig_msvc) && defined(zig_x86) |
| 3641 | #define zig_memory_order_relaxed 0 | 3784 | #define zig_memory_order_relaxed 0 |
| 3642 | #define zig_memory_order_acquire 2 | 3785 | #define zig_memory_order_acquire 2 |
| 3643 | #define zig_memory_order_release 3 | 3786 | #define zig_memory_order_release 3 |
| ... | @@ -3657,7 +3800,7 @@ typedef int zig_memory_order; | ... | @@ -3657,7 +3800,7 @@ typedef int zig_memory_order; |
| 3657 | #define zig_atomicrmw_max(res, obj, arg, order, Type, ReprType) res = zig_msvc_atomicrmw_max_ ##Type(obj, arg) | 3800 | #define zig_atomicrmw_max(res, obj, arg, order, Type, ReprType) res = zig_msvc_atomicrmw_max_ ##Type(obj, arg) |
| 3658 | #define zig_atomic_store( obj, arg, order, Type, ReprType) zig_msvc_atomic_store_ ##Type(obj, arg) | 3801 | #define zig_atomic_store( obj, arg, order, Type, ReprType) zig_msvc_atomic_store_ ##Type(obj, arg) |
| 3659 | #define zig_atomic_load(res, obj, order, Type, ReprType) res = zig_msvc_atomic_load_ ##order##_##Type(obj) | 3802 | #define zig_atomic_load(res, obj, order, Type, ReprType) res = zig_msvc_atomic_load_ ##order##_##Type(obj) |
| 3660 | /* TODO: _MSC_VER && (_M_ARM || _M_ARM64) */ | 3803 | /* TODO: zig_msvc && (zig_thumb || zig_aarch64) */ |
| 3661 | #else | 3804 | #else |
| 3662 | #define zig_memory_order_relaxed 0 | 3805 | #define zig_memory_order_relaxed 0 |
| 3663 | #define zig_memory_order_acquire 2 | 3806 | #define zig_memory_order_acquire 2 |
| ... | @@ -3680,7 +3823,7 @@ typedef int zig_memory_order; | ... | @@ -3680,7 +3823,7 @@ typedef int zig_memory_order; |
| 3680 | #define zig_atomic_load(res, obj, order, Type, ReprType) zig_atomics_unavailable | 3823 | #define zig_atomic_load(res, obj, order, Type, ReprType) zig_atomics_unavailable |
| 3681 | #endif | 3824 | #endif |
| 3682 | | 3825 | |
| 3683 | #if _MSC_VER && (_M_IX86 || _M_X64) | 3826 | #if defined(zig_msvc) && defined(zig_x86) |
| 3684 | | 3827 | |
| 3685 | /* TODO: zig_msvc_atomic_load should load 32 bit without interlocked on x86, and load 64 bit without interlocked on x64 */ | 3828 | /* TODO: zig_msvc_atomic_load should load 32 bit without interlocked on x86, and load 64 bit without interlocked on x64 */ |
| 3686 | | 3829 | |
| ... | @@ -3777,7 +3920,7 @@ zig_msvc_atomics(i16, int16_t, short, 16, 16) | ... | @@ -3777,7 +3920,7 @@ zig_msvc_atomics(i16, int16_t, short, 16, 16) |
| 3777 | zig_msvc_atomics(u32, uint32_t, long, , 32) | 3920 | zig_msvc_atomics(u32, uint32_t, long, , 32) |
| 3778 | zig_msvc_atomics(i32, int32_t, long, , 32) | 3921 | zig_msvc_atomics(i32, int32_t, long, , 32) |
| 3779 | | 3922 | |
| 3780 | #if _M_X64 | 3923 | #if defined(zig_x86_64) |
| 3781 | zig_msvc_atomics(u64, uint64_t, __int64, 64, 64) | 3924 | zig_msvc_atomics(u64, uint64_t, __int64, 64, 64) |
| 3782 | zig_msvc_atomics(i64, int64_t, __int64, 64, 64) | 3925 | zig_msvc_atomics(i64, int64_t, __int64, 64, 64) |
| 3783 | #endif | 3926 | #endif |
| ... | @@ -3822,11 +3965,11 @@ zig_msvc_atomics(i64, int64_t, __int64, 64, 64) | ... | @@ -3822,11 +3965,11 @@ zig_msvc_atomics(i64, int64_t, __int64, 64, 64) |
| 3822 | } | 3965 | } |
| 3823 | | 3966 | |
| 3824 | zig_msvc_flt_atomics(f32, long, , 32) | 3967 | zig_msvc_flt_atomics(f32, long, , 32) |
| 3825 | #if _M_X64 | 3968 | #if defined(zig_x86_64) |
| 3826 | zig_msvc_flt_atomics(f64, int64_t, 64, 64) | 3969 | zig_msvc_flt_atomics(f64, int64_t, 64, 64) |
| 3827 | #endif | 3970 | #endif |
| 3828 | | 3971 | |
| 3829 | #if _M_IX86 | 3972 | #if defined(zig_x86_32) |
| 3830 | static inline void zig_msvc_atomic_barrier() { | 3973 | static inline void zig_msvc_atomic_barrier() { |
| 3831 | int32_t barrier; | 3974 | int32_t barrier; |
| 3832 | __asm { | 3975 | __asm { |
| ... | @@ -3863,7 +4006,7 @@ static inline bool zig_msvc_cmpxchg_p32(void volatile* obj, void* expected, void | ... | @@ -3863,7 +4006,7 @@ static inline bool zig_msvc_cmpxchg_p32(void volatile* obj, void* expected, void |
| 3863 | if (!success) *(void**)expected = initial; | 4006 | if (!success) *(void**)expected = initial; |
| 3864 | return success; | 4007 | return success; |
| 3865 | } | 4008 | } |
| 3866 | #else /* _M_IX86 */ | 4009 | #else /* zig_x86_32 */ |
| 3867 | static inline void* zig_msvc_atomicrmw_xchg_p64(void volatile* obj, void* arg) { | 4010 | static inline void* zig_msvc_atomicrmw_xchg_p64(void volatile* obj, void* arg) { |
| 3868 | return _InterlockedExchangePointer(obj, arg); | 4011 | return _InterlockedExchangePointer(obj, arg); |
| 3869 | } | 4012 | } |
| ... | @@ -3924,55 +4067,59 @@ static inline void zig_msvc_atomic_store_i128(zig_i128 volatile* obj, zig_i128 a | ... | @@ -3924,55 +4067,59 @@ static inline void zig_msvc_atomic_store_i128(zig_i128 volatile* obj, zig_i128 a |
| 3924 | while (!zig_cmpxchg_weak(obj, expected, arg, zig_memory_order_seq_cst, zig_memory_order_seq_cst, i128, zig_i128)); | 4067 | while (!zig_cmpxchg_weak(obj, expected, arg, zig_memory_order_seq_cst, zig_memory_order_seq_cst, i128, zig_i128)); |
| 3925 | } | 4068 | } |
| 3926 | | 4069 | |
| 3927 | #endif /* _M_IX86 */ | 4070 | #endif /* zig_x86_32 */ |
| 3928 | | 4071 | |
| 3929 | #endif /* _MSC_VER && (_M_IX86 || _M_X64) */ | 4072 | #endif /* zig_msvc && zig_x86 */ |
| 3930 | | 4073 | |
| 3931 | /* ======================== Special Case Intrinsics ========================= */ | 4074 | /* ======================== Special Case Intrinsics ========================= */ |
| 3932 | | 4075 | |
| 3933 | #if defined(_M_ARM) || defined(__thumb__) | 4076 | #if defined(zig_msvc) |
| | 4077 | #include <intrin.h> |
| | 4078 | #endif |
| | 4079 | |
| | 4080 | #if defined(zig_thumb) |
| 3934 | | 4081 | |
| 3935 | static inline void* zig_thumb_windows_teb(void) { | 4082 | static inline void* zig_thumb_windows_teb(void) { |
| 3936 | void* teb = 0; | 4083 | void* teb = 0; |
| 3937 | #if defined(_MSC_VER) | 4084 | #if defined(zig_msvc) |
| 3938 | teb = (void*)_MoveFromCoprocessor(15, 0, 13, 0, 2); | 4085 | teb = (void*)_MoveFromCoprocessor(15, 0, 13, 0, 2); |
| 3939 | #elif defined(__GNUC__) | 4086 | #elif defined(zig_gnuc_asm) |
| 3940 | __asm__ ("mrc p15, 0, %[ptr], c13, c0, 2" : [ptr] "=r" (teb)); | 4087 | __asm__ ("mrc p15, 0, %[ptr], c13, c0, 2" : [ptr] "=r" (teb)); |
| 3941 | #endif | 4088 | #endif |
| 3942 | return teb; | 4089 | return teb; |
| 3943 | } | 4090 | } |
| 3944 | | 4091 | |
| 3945 | #elif defined(_M_ARM64) || defined(__arch64__) | 4092 | #elif defined(zig_aarch64) |
| 3946 | | 4093 | |
| 3947 | static inline void* zig_aarch64_windows_teb(void) { | 4094 | static inline void* zig_aarch64_windows_teb(void) { |
| 3948 | void* teb = 0; | 4095 | void* teb = 0; |
| 3949 | #if defined(_MSC_VER) | 4096 | #if defined(zig_msvc) |
| 3950 | teb = (void*)__readx18qword(0x0); | 4097 | teb = (void*)__readx18qword(0x0); |
| 3951 | #elif defined(__GNUC__) | 4098 | #elif defined(zig_gnuc_asm) |
| 3952 | __asm__ ("mov %[ptr], x18" : [ptr] "=r" (teb)); | 4099 | __asm__ ("mov %[ptr], x18" : [ptr] "=r" (teb)); |
| 3953 | #endif | 4100 | #endif |
| 3954 | return teb; | 4101 | return teb; |
| 3955 | } | 4102 | } |
| 3956 | | 4103 | |
| 3957 | #elif defined(_M_IX86) || defined(__i386__) | 4104 | #elif defined(zig_x86_32) |
| 3958 | | 4105 | |
| 3959 | static inline void* zig_x86_windows_teb(void) { | 4106 | static inline void* zig_x86_windows_teb(void) { |
| 3960 | void* teb = 0; | 4107 | void* teb = 0; |
| 3961 | #if defined(_MSC_VER) | 4108 | #if defined(zig_msvc) |
| 3962 | teb = (void*)__readfsdword(0x18); | 4109 | teb = (void*)__readfsdword(0x18); |
| 3963 | #elif defined(__GNUC__) | 4110 | #elif defined(zig_gnuc_asm) |
| 3964 | __asm__ ("movl %%fs:0x18, %[ptr]" : [ptr] "=r" (teb)); | 4111 | __asm__ ("movl %%fs:0x18, %[ptr]" : [ptr] "=r" (teb)); |
| 3965 | #endif | 4112 | #endif |
| 3966 | return teb; | 4113 | return teb; |
| 3967 | } | 4114 | } |
| 3968 | | 4115 | |
| 3969 | #elif defined(_M_X64) || defined(__x86_64__) | 4116 | #elif defined(zig_x86_64) |
| 3970 | | 4117 | |
| 3971 | static inline void* zig_x86_64_windows_teb(void) { | 4118 | static inline void* zig_x86_64_windows_teb(void) { |
| 3972 | void* teb = 0; | 4119 | void* teb = 0; |
| 3973 | #if defined(_MSC_VER) | 4120 | #if defined(zig_msvc) |
| 3974 | teb = (void*)__readgsqword(0x30); | 4121 | teb = (void*)__readgsqword(0x30); |
| 3975 | #elif defined(__GNUC__) | 4122 | #elif defined(zig_gnuc_asm) |
| 3976 | __asm__ ("movq %%gs:0x30, %[ptr]" : [ptr] "=r" (teb)); | 4123 | __asm__ ("movq %%gs:0x30, %[ptr]" : [ptr] "=r" (teb)); |
| 3977 | #endif | 4124 | #endif |
| 3978 | return teb; | 4125 | return teb; |
| ... | @@ -3980,29 +4127,39 @@ static inline void* zig_x86_64_windows_teb(void) { | ... | @@ -3980,29 +4127,39 @@ static inline void* zig_x86_64_windows_teb(void) { |
| 3980 | | 4127 | |
| 3981 | #endif | 4128 | #endif |
| 3982 | | 4129 | |
| 3983 | #if (_MSC_VER && (_M_IX86 || _M_X64)) || defined(__i386__) || defined(__x86_64__) | 4130 | #if defined(zig_x86) |
| 3984 | | 4131 | |
| 3985 | static inline void zig_x86_cpuid(uint32_t leaf_id, uint32_t subid, uint32_t* eax, uint32_t* ebx, uint32_t* ecx, uint32_t* edx) { | 4132 | static inline void zig_x86_cpuid(uint32_t leaf_id, uint32_t subid, uint32_t* eax, uint32_t* ebx, uint32_t* ecx, uint32_t* edx) { |
| 3986 | #if _MSC_VER | 4133 | #if defined(zig_msvc) |
| 3987 | int cpu_info[4]; | 4134 | int cpu_info[4]; |
| 3988 | __cpuidex(cpu_info, leaf_id, subid); | 4135 | __cpuidex(cpu_info, leaf_id, subid); |
| 3989 | *eax = (uint32_t)cpu_info[0]; | 4136 | *eax = (uint32_t)cpu_info[0]; |
| 3990 | *ebx = (uint32_t)cpu_info[1]; | 4137 | *ebx = (uint32_t)cpu_info[1]; |
| 3991 | *ecx = (uint32_t)cpu_info[2]; | 4138 | *ecx = (uint32_t)cpu_info[2]; |
| 3992 | *edx = (uint32_t)cpu_info[3]; | 4139 | *edx = (uint32_t)cpu_info[3]; |
| | 4140 | #elif defined(zig_gnuc_asm) |
| | 4141 | __asm__("cpuid" : "=a"(*eax), "=b"(*ebx), "=c"(*ecx), "=d"(*edx) : "a"(leaf_id), "c"(subid)); |
| 3993 | #else | 4142 | #else |
| 3994 | __cpuid_count(leaf_id, subid, *eax, *ebx, *ecx, *edx); | 4143 | *eax = 0; |
| | 4144 | *ebx = 0; |
| | 4145 | *ecx = 0; |
| | 4146 | *edx = 0; |
| 3995 | #endif | 4147 | #endif |
| 3996 | } | 4148 | } |
| 3997 | | 4149 | |
| 3998 | static inline uint32_t zig_x86_get_xcr0(void) { | 4150 | static inline uint32_t zig_x86_get_xcr0(void) { |
| 3999 | #if _MSC_VER | 4151 | #if defined(zig_msvc) |
| 4000 | return (uint32_t)_xgetbv(0); | 4152 | return (uint32_t)_xgetbv(0); |
| 4001 | #else | 4153 | #elif defined(zig_gnuc_asm) |
| 4002 | uint32_t eax; | 4154 | uint32_t eax; |
| 4003 | uint32_t edx; | 4155 | uint32_t edx; |
| 4004 | __asm__("xgetbv" : "=a"(eax), "=d"(edx) : "c"(0)); | 4156 | __asm__("xgetbv" : "=a"(eax), "=d"(edx) : "c"(0)); |
| 4005 | return eax; | 4157 | return eax; |
| | 4158 | #else |
| | 4159 | *eax = 0; |
| | 4160 | *ebx = 0; |
| | 4161 | *ecx = 0; |
| | 4162 | *edx = 0; |
| 4006 | #endif | 4163 | #endif |
| 4007 | } | 4164 | } |
| 4008 | | 4165 | |