| ... | ... | @@ -66,9 +66,9 @@ |
| 66 | 66 | #endif |
| 67 | 67 | |
| 68 | 68 | #if defined(__cplusplus) |
| 69 | | #define zig_extern_c extern "C" |
| 69 | #define zig_extern extern "C" |
| 70 | 70 | #else |
| 71 | | #define zig_extern_c |
| 71 | #define zig_extern extern |
| 72 | 72 | #endif |
| 73 | 73 | |
| 74 | 74 | #if zig_has_builtin(debugtrap) |
| ... | ... | @@ -265,8 +265,8 @@ typedef int64_t zig_i64; |
| 265 | 265 | #define zig_compiler_rt_abbrev_f80 xf |
| 266 | 266 | #define zig_compiler_rt_abbrev_f128 tf |
| 267 | 267 | |
| 268 | | zig_extern_c void *memcpy (void *zig_restrict, void const *zig_restrict, zig_usize); |
| 269 | | zig_extern_c void *memset (void *, int, zig_usize); |
| 268 | zig_extern void *memcpy (void *zig_restrict, void const *zig_restrict, zig_usize); |
| 269 | zig_extern void *memset (void *, int, zig_usize); |
| 270 | 270 | |
| 271 | 271 | /* ==================== 8/16/32/64-bit Integer Routines ===================== */ |
| 272 | 272 | |
| ... | ... | @@ -279,24 +279,21 @@ zig_extern_c void *memset (void *, int, zig_usize); |
| 279 | 279 | static inline zig_##Type zig_##operation##_##Type(zig_##Type lhs, zig_##RhsType rhs) { \ |
| 280 | 280 | return lhs operator rhs; \ |
| 281 | 281 | } |
| 282 | | #define zig_int_operators(w) \ |
| 283 | | zig_int_operator(u##w, u##w, and, &) \ |
| 284 | | zig_int_operator(i##w, i##w, and, &) \ |
| 285 | | zig_int_operator(u##w, u##w, or, |) \ |
| 286 | | zig_int_operator(i##w, i##w, or, |) \ |
| 287 | | zig_int_operator(u##w, u##w, xor, ^) \ |
| 288 | | zig_int_operator(i##w, i##w, xor, ^) \ |
| 289 | | zig_int_operator(u##w, u8, shl, <<) \ |
| 290 | | zig_int_operator(i##w, u8, shl, <<) \ |
| 291 | | zig_int_operator(u##w, u8, shr, >>) \ |
| 292 | | zig_int_operator(u##w, u##w, div_floor, /) \ |
| 293 | | zig_int_operator(u##w, u##w, mod, %) |
| 294 | | zig_int_operators(8) |
| 295 | | zig_int_operators(16) |
| 296 | | zig_int_operators(32) |
| 297 | | zig_int_operators(64) |
| 298 | | |
| 282 | #define zig_int_basic_operator(Type, operation, operator) \ |
| 283 | zig_int_operator(Type, Type, operation, operator) |
| 284 | #define zig_int_shift_operator(Type, operation, operator) \ |
| 285 | zig_int_operator(Type, u8, operation, operator) |
| 299 | 286 | #define zig_int_helpers(w) \ |
| 287 | zig_int_basic_operator(u##w, and, &) \ |
| 288 | zig_int_basic_operator(i##w, and, &) \ |
| 289 | zig_int_basic_operator(u##w, or, |) \ |
| 290 | zig_int_basic_operator(i##w, or, |) \ |
| 291 | zig_int_basic_operator(u##w, xor, ^) \ |
| 292 | zig_int_basic_operator(i##w, xor, ^) \ |
| 293 | zig_int_shift_operator(u##w, shl, <<) \ |
| 294 | zig_int_shift_operator(i##w, shl, <<) \ |
| 295 | zig_int_shift_operator(u##w, shr, >>) \ |
| 296 | \ |
| 300 | 297 | static inline zig_i##w zig_shr_i##w(zig_i##w lhs, zig_u8 rhs) { \ |
| 301 | 298 | zig_i##w sign_mask = lhs < zig_as_i##w(0) ? -zig_as_i##w(1) : zig_as_i##w(0); \ |
| 302 | 299 | return ((lhs ^ sign_mask) >> rhs) ^ sign_mask; \ |
| ... | ... | @@ -319,10 +316,14 @@ zig_int_operators(64) |
| 319 | 316 | return (val & zig_as_u##w(1) << (bits - zig_as_u8(1))) != 0 \ |
| 320 | 317 | ? val | zig_minInt(i##w, bits) : val & zig_maxInt(i##w, bits); \ |
| 321 | 318 | } \ |
| 319 | \ |
| 320 | zig_int_basic_operator(u##w, div_floor, /) \ |
| 322 | 321 | \ |
| 323 | 322 | static inline zig_i##w zig_div_floor_i##w(zig_i##w lhs, zig_i##w rhs) { \ |
| 324 | 323 | return lhs / rhs - (((lhs ^ rhs) & (lhs % rhs)) < zig_as_i##w(0)); \ |
| 325 | 324 | } \ |
| 325 | \ |
| 326 | zig_int_basic_operator(u##w, mod, %) \ |
| 326 | 327 | \ |
| 327 | 328 | static inline zig_i##w zig_mod_i##w(zig_i##w lhs, zig_i##w rhs) { \ |
| 328 | 329 | zig_i##w rem = lhs % rhs; \ |
| ... | ... | @@ -345,7 +346,7 @@ static inline zig_bool zig_addo_u32(zig_u32 *res, zig_u32 lhs, zig_u32 rhs, zig_ |
| 345 | 346 | #endif |
| 346 | 347 | } |
| 347 | 348 | |
| 348 | | zig_extern_c zig_i32 __addosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow); |
| 349 | zig_extern zig_i32 __addosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow); |
| 349 | 350 | static inline zig_bool zig_addo_i32(zig_i32 *res, zig_i32 lhs, zig_i32 rhs, zig_u8 bits) { |
| 350 | 351 | #if zig_has_builtin(add_overflow) |
| 351 | 352 | zig_i32 full_res; |
| ... | ... | @@ -371,7 +372,7 @@ static inline zig_bool zig_addo_u64(zig_u64 *res, zig_u64 lhs, zig_u64 rhs, zig_ |
| 371 | 372 | #endif |
| 372 | 373 | } |
| 373 | 374 | |
| 374 | | zig_extern_c zig_i64 __addodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow); |
| 375 | zig_extern zig_i64 __addodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow); |
| 375 | 376 | static inline zig_bool zig_addo_i64(zig_i64 *res, zig_i64 lhs, zig_i64 rhs, zig_u8 bits) { |
| 376 | 377 | #if zig_has_builtin(add_overflow) |
| 377 | 378 | zig_i64 full_res; |
| ... | ... | @@ -441,7 +442,7 @@ static inline zig_bool zig_subo_u32(zig_u32 *res, zig_u32 lhs, zig_u32 rhs, zig_ |
| 441 | 442 | #endif |
| 442 | 443 | } |
| 443 | 444 | |
| 444 | | zig_extern_c zig_i32 __subosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow); |
| 445 | zig_extern zig_i32 __subosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow); |
| 445 | 446 | static inline zig_bool zig_subo_i32(zig_i32 *res, zig_i32 lhs, zig_i32 rhs, zig_u8 bits) { |
| 446 | 447 | #if zig_has_builtin(sub_overflow) |
| 447 | 448 | zig_i32 full_res; |
| ... | ... | @@ -467,7 +468,7 @@ static inline zig_bool zig_subo_u64(zig_u64 *res, zig_u64 lhs, zig_u64 rhs, zig_ |
| 467 | 468 | #endif |
| 468 | 469 | } |
| 469 | 470 | |
| 470 | | zig_extern_c zig_i64 __subodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow); |
| 471 | zig_extern zig_i64 __subodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow); |
| 471 | 472 | static inline zig_bool zig_subo_i64(zig_i64 *res, zig_i64 lhs, zig_i64 rhs, zig_u8 bits) { |
| 472 | 473 | #if zig_has_builtin(sub_overflow) |
| 473 | 474 | zig_i64 full_res; |
| ... | ... | @@ -537,7 +538,7 @@ static inline zig_bool zig_mulo_u32(zig_u32 *res, zig_u32 lhs, zig_u32 rhs, zig_ |
| 537 | 538 | #endif |
| 538 | 539 | } |
| 539 | 540 | |
| 540 | | zig_extern_c zig_i32 __mulosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow); |
| 541 | zig_extern zig_i32 __mulosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow); |
| 541 | 542 | static inline zig_bool zig_mulo_i32(zig_i32 *res, zig_i32 lhs, zig_i32 rhs, zig_u8 bits) { |
| 542 | 543 | #if zig_has_builtin(mul_overflow) |
| 543 | 544 | zig_i32 full_res; |
| ... | ... | @@ -563,7 +564,7 @@ static inline zig_bool zig_mulo_u64(zig_u64 *res, zig_u64 lhs, zig_u64 rhs, zig_ |
| 563 | 564 | #endif |
| 564 | 565 | } |
| 565 | 566 | |
| 566 | | zig_extern_c zig_i64 __mulodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow); |
| 567 | zig_extern zig_i64 __mulodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow); |
| 567 | 568 | static inline zig_bool zig_mulo_i64(zig_i64 *res, zig_i64 lhs, zig_i64 rhs, zig_u8 bits) { |
| 568 | 569 | #if zig_has_builtin(mul_overflow) |
| 569 | 570 | zig_i64 full_res; |
| ... | ... | @@ -1210,7 +1211,7 @@ static inline zig_bool zig_addo_u128(zig_u128 *res, zig_u128 lhs, zig_u128 rhs, |
| 1210 | 1211 | #endif |
| 1211 | 1212 | } |
| 1212 | 1213 | |
| 1213 | | zig_extern_c zig_i128 __addoti4(zig_i128 lhs, zig_i128 rhs, zig_c_int *overflow); |
| 1214 | zig_extern zig_i128 __addoti4(zig_i128 lhs, zig_i128 rhs, zig_c_int *overflow); |
| 1214 | 1215 | static inline zig_bool zig_addo_i128(zig_i128 *res, zig_i128 lhs, zig_i128 rhs, zig_u8 bits) { |
| 1215 | 1216 | #if zig_has_builtin(add_overflow) |
| 1216 | 1217 | zig_i128 full_res; |
| ... | ... | @@ -1236,7 +1237,7 @@ static inline zig_bool zig_subo_u128(zig_u128 *res, zig_u128 lhs, zig_u128 rhs, |
| 1236 | 1237 | #endif |
| 1237 | 1238 | } |
| 1238 | 1239 | |
| 1239 | | zig_extern_c zig_i128 __suboti4(zig_i128 lhs, zig_i128 rhs, zig_c_int *overflow); |
| 1240 | zig_extern zig_i128 __suboti4(zig_i128 lhs, zig_i128 rhs, zig_c_int *overflow); |
| 1240 | 1241 | static inline zig_bool zig_subo_i128(zig_i128 *res, zig_i128 lhs, zig_i128 rhs, zig_u8 bits) { |
| 1241 | 1242 | #if zig_has_builtin(sub_overflow) |
| 1242 | 1243 | zig_i128 full_res; |
| ... | ... | @@ -1262,7 +1263,7 @@ static inline zig_bool zig_mulo_u128(zig_u128 *res, zig_u128 lhs, zig_u128 rhs, |
| 1262 | 1263 | #endif |
| 1263 | 1264 | } |
| 1264 | 1265 | |
| 1265 | | zig_extern_c zig_i128 __muloti4(zig_i128 lhs, zig_i128 rhs, zig_c_int *overflow); |
| 1266 | zig_extern zig_i128 __muloti4(zig_i128 lhs, zig_i128 rhs, zig_c_int *overflow); |
| 1266 | 1267 | static inline zig_bool zig_mulo_i128(zig_i128 *res, zig_i128 lhs, zig_i128 rhs, zig_u8 bits) { |
| 1267 | 1268 | #if zig_has_builtin(mul_overflow) |
| 1268 | 1269 | zig_i128 full_res; |
| ... | ... | @@ -1552,7 +1553,7 @@ typedef long double zig_c_longdouble; |
| 1552 | 1553 | #define zig_as_special_c_longdouble(sign, name, arg, repr) sign __builtin_##name##l(arg) |
| 1553 | 1554 | |
| 1554 | 1555 | #define zig_convert_builtin(ResType, operation, ArgType, version) \ |
| 1555 | | zig_extern_c zig_##ResType zig_expand_concat(zig_expand_concat(zig_expand_concat(__##operation, \ |
| 1556 | zig_extern zig_##ResType zig_expand_concat(zig_expand_concat(zig_expand_concat(__##operation, \ |
| 1556 | 1557 | zig_compiler_rt_abbrev_##ArgType), zig_compiler_rt_abbrev_##ResType), version)(zig_##ArgType); |
| 1557 | 1558 | zig_convert_builtin(f16, trunc, f32, 2) |
| 1558 | 1559 | zig_convert_builtin(f16, trunc, f64, 2) |
| ... | ... | @@ -1585,7 +1586,7 @@ zig_convert_builtin(f128, extend, f80, 2) |
| 1585 | 1586 | } |
| 1586 | 1587 | |
| 1587 | 1588 | #define zig_float_less_builtin_0(Type, operation) \ |
| 1588 | | zig_extern_c zig_i8 zig_expand_concat(zig_expand_concat(__##operation, \ |
| 1589 | zig_extern zig_i8 zig_expand_concat(zig_expand_concat(__##operation, \ |
| 1589 | 1590 | zig_compiler_rt_abbrev_##Type), 2)(zig_##Type, zig_##Type); \ |
| 1590 | 1591 | static inline zig_i8 zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \ |
| 1591 | 1592 | return (zig_i8)zig_expand_concat(zig_expand_concat(__##operation, zig_compiler_rt_abbrev_##Type), 2)(lhs, rhs); \ |
| ... | ... | @@ -1603,7 +1604,7 @@ zig_convert_builtin(f128, extend, f80, 2) |
| 1603 | 1604 | } |
| 1604 | 1605 | |
| 1605 | 1606 | #define zig_float_binary_builtin_0(Type, operation, operator) \ |
| 1606 | | zig_extern_c zig_##Type zig_expand_concat(zig_expand_concat(__##operation, \ |
| 1607 | zig_extern zig_##Type zig_expand_concat(zig_expand_concat(__##operation, \ |
| 1607 | 1608 | zig_compiler_rt_abbrev_##Type), 3)(zig_##Type, zig_##Type); \ |
| 1608 | 1609 | static inline zig_##Type zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \ |
| 1609 | 1610 | return zig_expand_concat(zig_expand_concat(__##operation, zig_compiler_rt_abbrev_##Type), 3)(lhs, rhs); \ |
| ... | ... | @@ -1638,24 +1639,24 @@ zig_convert_builtin(f128, extend, f80, 2) |
| 1638 | 1639 | zig_expand_concat(zig_float_binary_builtin_, zig_has_##Type)(Type, sub, -) \ |
| 1639 | 1640 | zig_expand_concat(zig_float_binary_builtin_, zig_has_##Type)(Type, mul, *) \ |
| 1640 | 1641 | zig_expand_concat(zig_float_binary_builtin_, zig_has_##Type)(Type, div, /) \ |
| 1641 | | zig_extern_c zig_##Type zig_libc_name_##Type(sqrt)(zig_##Type); \ |
| 1642 | | zig_extern_c zig_##Type zig_libc_name_##Type(sin)(zig_##Type); \ |
| 1643 | | zig_extern_c zig_##Type zig_libc_name_##Type(cos)(zig_##Type); \ |
| 1644 | | zig_extern_c zig_##Type zig_libc_name_##Type(tan)(zig_##Type); \ |
| 1645 | | zig_extern_c zig_##Type zig_libc_name_##Type(exp)(zig_##Type); \ |
| 1646 | | zig_extern_c zig_##Type zig_libc_name_##Type(exp2)(zig_##Type); \ |
| 1647 | | zig_extern_c zig_##Type zig_libc_name_##Type(log)(zig_##Type); \ |
| 1648 | | zig_extern_c zig_##Type zig_libc_name_##Type(log2)(zig_##Type); \ |
| 1649 | | zig_extern_c zig_##Type zig_libc_name_##Type(log10)(zig_##Type); \ |
| 1650 | | zig_extern_c zig_##Type zig_libc_name_##Type(fabs)(zig_##Type); \ |
| 1651 | | zig_extern_c zig_##Type zig_libc_name_##Type(floor)(zig_##Type); \ |
| 1652 | | zig_extern_c zig_##Type zig_libc_name_##Type(ceil)(zig_##Type); \ |
| 1653 | | zig_extern_c zig_##Type zig_libc_name_##Type(round)(zig_##Type); \ |
| 1654 | | zig_extern_c zig_##Type zig_libc_name_##Type(trunc)(zig_##Type); \ |
| 1655 | | zig_extern_c zig_##Type zig_libc_name_##Type(fmod)(zig_##Type, zig_##Type); \ |
| 1656 | | zig_extern_c zig_##Type zig_libc_name_##Type(fmin)(zig_##Type, zig_##Type); \ |
| 1657 | | zig_extern_c zig_##Type zig_libc_name_##Type(fmax)(zig_##Type, zig_##Type); \ |
| 1658 | | zig_extern_c zig_##Type zig_libc_name_##Type(fma)(zig_##Type, zig_##Type, zig_##Type); \ |
| 1642 | zig_extern zig_##Type zig_libc_name_##Type(sqrt)(zig_##Type); \ |
| 1643 | zig_extern zig_##Type zig_libc_name_##Type(sin)(zig_##Type); \ |
| 1644 | zig_extern zig_##Type zig_libc_name_##Type(cos)(zig_##Type); \ |
| 1645 | zig_extern zig_##Type zig_libc_name_##Type(tan)(zig_##Type); \ |
| 1646 | zig_extern zig_##Type zig_libc_name_##Type(exp)(zig_##Type); \ |
| 1647 | zig_extern zig_##Type zig_libc_name_##Type(exp2)(zig_##Type); \ |
| 1648 | zig_extern zig_##Type zig_libc_name_##Type(log)(zig_##Type); \ |
| 1649 | zig_extern zig_##Type zig_libc_name_##Type(log2)(zig_##Type); \ |
| 1650 | zig_extern zig_##Type zig_libc_name_##Type(log10)(zig_##Type); \ |
| 1651 | zig_extern zig_##Type zig_libc_name_##Type(fabs)(zig_##Type); \ |
| 1652 | zig_extern zig_##Type zig_libc_name_##Type(floor)(zig_##Type); \ |
| 1653 | zig_extern zig_##Type zig_libc_name_##Type(ceil)(zig_##Type); \ |
| 1654 | zig_extern zig_##Type zig_libc_name_##Type(round)(zig_##Type); \ |
| 1655 | zig_extern zig_##Type zig_libc_name_##Type(trunc)(zig_##Type); \ |
| 1656 | zig_extern zig_##Type zig_libc_name_##Type(fmod)(zig_##Type, zig_##Type); \ |
| 1657 | zig_extern zig_##Type zig_libc_name_##Type(fmin)(zig_##Type, zig_##Type); \ |
| 1658 | zig_extern zig_##Type zig_libc_name_##Type(fmax)(zig_##Type, zig_##Type); \ |
| 1659 | zig_extern zig_##Type zig_libc_name_##Type(fma)(zig_##Type, zig_##Type, zig_##Type); \ |
| 1659 | 1660 | \ |
| 1660 | 1661 | static inline zig_##Type zig_div_trunc_##Type(zig_##Type lhs, zig_##Type rhs) { \ |
| 1661 | 1662 | return zig_libc_name_##Type(trunc)(zig_div_##Type(lhs, rhs)); \ |