authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-11-12 14:31:23-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-11-12 17:30:24-07:00
log0dbaa8d3ae8f2892b60751d5a3c528ddb3b4fc3b
treeae8d38fd92729bbe39078db398b640c240c903d3
parentf45aac49033c1660be21301843e4aa950924899d

zig.h: workaround for gcc `f128` miscompilations


2 files changed, 24 insertions(+), 12 deletions(-)

lib/zig.h+12-6
...@@ -61,6 +61,12 @@ typedef char bool;...@@ -61,6 +61,12 @@ typedef char bool;
61#define zig_gnuc61#define zig_gnuc
62#endif62#endif
6363
64#if defined(zig_gnuc) && (defined(__i386__) || defined(__x86_64__))
65#define zig_f128_has_miscompilations 1
66#else
67#define zig_f128_has_miscompilations 0
68#endif
69
64#if _MSC_VER70#if _MSC_VER
65#define zig_const_arr71#define zig_const_arr
66#define zig_callconv(c) __##c72#define zig_callconv(c) __##c
...@@ -3155,22 +3161,22 @@ typedef zig_u128 zig_f80;...@@ -3155,22 +3161,22 @@ typedef zig_u128 zig_f80;
3155#define zig_has_f128 13161#define zig_has_f128 1
3156#define zig_libc_name_f128(name) name##q3162#define zig_libc_name_f128(name) name##q
3157#define zig_init_special_f128(sign, name, arg, repr) zig_make_special_f128(sign, name, arg, repr)3163#define zig_init_special_f128(sign, name, arg, repr) zig_make_special_f128(sign, name, arg, repr)
3158#if FLT_MANT_DIG == 1133164#if !zig_f128_has_miscompilations && FLT_MANT_DIG == 113
3159typedef float zig_f128;3165typedef float zig_f128;
3160#define zig_make_f128(fp, repr) fp##f3166#define zig_make_f128(fp, repr) fp##f
3161#elif DBL_MANT_DIG == 1133167#elif !zig_f128_has_miscompilations && DBL_MANT_DIG == 113
3162typedef double zig_f128;3168typedef double zig_f128;
3163#define zig_make_f128(fp, repr) fp3169#define zig_make_f128(fp, repr) fp
3164#elif LDBL_MANT_DIG == 1133170#elif !zig_f128_has_miscompilations && LDBL_MANT_DIG == 113
3165typedef long double zig_f128;3171typedef long double zig_f128;
3166#define zig_make_f128(fp, repr) fp##l3172#define zig_make_f128(fp, repr) fp##l
3167#elif FLT128_MANT_DIG == 1133173#elif !zig_f128_has_miscompilations && FLT128_MANT_DIG == 113
3168typedef _Float128 zig_f128;3174typedef _Float128 zig_f128;
3169#define zig_make_f128(fp, repr) fp##f1283175#define zig_make_f128(fp, repr) fp##f128
3170#elif FLT64X_MANT_DIG == 1133176#elif !zig_f128_has_miscompilations && FLT64X_MANT_DIG == 113
3171typedef _Float64x zig_f128;3177typedef _Float64x zig_f128;
3172#define zig_make_f128(fp, repr) fp##f64x3178#define zig_make_f128(fp, repr) fp##f64x
3173#elif defined(__SIZEOF_FLOAT128__)3179#elif !zig_f128_has_miscompilations && defined(__SIZEOF_FLOAT128__)
3174typedef __float128 zig_f128;3180typedef __float128 zig_f128;
3175#define zig_make_f128(fp, repr) fp##q3181#define zig_make_f128(fp, repr) fp##q
3176#undef zig_make_special_f1283182#undef zig_make_special_f128
stage1/zig.h+12-6
...@@ -61,6 +61,12 @@ typedef char bool;...@@ -61,6 +61,12 @@ typedef char bool;
61#define zig_gnuc61#define zig_gnuc
62#endif62#endif
6363
64#if defined(zig_gnuc) && (defined(__i386__) || defined(__x86_64__))
65#define zig_f128_has_miscompilations 1
66#else
67#define zig_f128_has_miscompilations 0
68#endif
69
64#if _MSC_VER70#if _MSC_VER
65#define zig_const_arr71#define zig_const_arr
66#define zig_callconv(c) __##c72#define zig_callconv(c) __##c
...@@ -3155,22 +3161,22 @@ typedef zig_u128 zig_f80;...@@ -3155,22 +3161,22 @@ typedef zig_u128 zig_f80;
3155#define zig_has_f128 13161#define zig_has_f128 1
3156#define zig_libc_name_f128(name) name##q3162#define zig_libc_name_f128(name) name##q
3157#define zig_init_special_f128(sign, name, arg, repr) zig_make_special_f128(sign, name, arg, repr)3163#define zig_init_special_f128(sign, name, arg, repr) zig_make_special_f128(sign, name, arg, repr)
3158#if FLT_MANT_DIG == 1133164#if !zig_f128_has_miscompilations && FLT_MANT_DIG == 113
3159typedef float zig_f128;3165typedef float zig_f128;
3160#define zig_make_f128(fp, repr) fp##f3166#define zig_make_f128(fp, repr) fp##f
3161#elif DBL_MANT_DIG == 1133167#elif !zig_f128_has_miscompilations && DBL_MANT_DIG == 113
3162typedef double zig_f128;3168typedef double zig_f128;
3163#define zig_make_f128(fp, repr) fp3169#define zig_make_f128(fp, repr) fp
3164#elif LDBL_MANT_DIG == 1133170#elif !zig_f128_has_miscompilations && LDBL_MANT_DIG == 113
3165typedef long double zig_f128;3171typedef long double zig_f128;
3166#define zig_make_f128(fp, repr) fp##l3172#define zig_make_f128(fp, repr) fp##l
3167#elif FLT128_MANT_DIG == 1133173#elif !zig_f128_has_miscompilations && FLT128_MANT_DIG == 113
3168typedef _Float128 zig_f128;3174typedef _Float128 zig_f128;
3169#define zig_make_f128(fp, repr) fp##f1283175#define zig_make_f128(fp, repr) fp##f128
3170#elif FLT64X_MANT_DIG == 1133176#elif !zig_f128_has_miscompilations && FLT64X_MANT_DIG == 113
3171typedef _Float64x zig_f128;3177typedef _Float64x zig_f128;
3172#define zig_make_f128(fp, repr) fp##f64x3178#define zig_make_f128(fp, repr) fp##f64x
3173#elif defined(__SIZEOF_FLOAT128__)3179#elif !zig_f128_has_miscompilations && defined(__SIZEOF_FLOAT128__)
3174typedef __float128 zig_f128;3180typedef __float128 zig_f128;
3175#define zig_make_f128(fp, repr) fp##q3181#define zig_make_f128(fp, repr) fp##q
3176#undef zig_make_special_f1283182#undef zig_make_special_f128