From c675a8e35c1c9296fe98e98c19acfa22dd1d9a23 Mon Sep 17 00:00:00 2001 From: kcbanner Date: Sat, 10 Dec 2022 02:38:07 -0500 Subject: [PATCH] cbe: handle msvc not supporting long double --- lib/zig.h | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/lib/zig.h b/lib/zig.h index f7bf1ec118..c935e36b8c 100644 --- a/lib/zig.h +++ b/lib/zig.h @@ -1786,25 +1786,37 @@ typedef zig_i128 zig_f128; #define zig_as_special_f128(sign, name, arg, repr) repr #endif +#define zig_has_c_longdouble 1 +#define zig_libc_name_c_longdouble(name) name##l +#define zig_as_special_c_longdouble(sign, name, arg, repr) sign __builtin_##name##l(arg) +#if !_MSC_VER // TODO: Is there a better way to detect this is just double? +typedef long double zig_c_longdouble; +#define zig_as_c_longdouble(fp, repr) fp##l +#else +#undef zig_has_c_longdouble +#define zig_has_c_longdouble 0 +#define zig_repr_c_longdouble i128 +#define zig_bitSizeOf_c_longdouble 128 +typedef zig_i128 zig_c_longdouble; +#define zig_as_c_longdouble(fp, repr) repr +#undef zig_as_special_c_longdouble +#define zig_as_special_c_longdouble(sign, name, arg, repr) repr +#endif + #define zig_cast_f16 (zig_f16) #define zig_cast_f32 (zig_f32) #define zig_cast_f64 (zig_f64) -#define zig_cast_c_longdouble (zig_c_longdouble) #if _MSC_VER && !zig_has_f128 #define zig_cast_f80 +#define zig_cast_c_longdouble #define zig_cast_f128 #else #define zig_cast_f80 (zig_f80) +#define zig_cast_c_longdouble (zig_c_longdouble) #define zig_cast_f128 (zig_f128) #endif -#define zig_has_c_longdouble 1 -typedef long double zig_c_longdouble; -#define zig_as_c_longdouble(fp, repr) fp##l -#define zig_libc_name_c_longdouble(name) name##l -#define zig_as_special_c_longdouble(sign, name, arg, repr) sign __builtin_##name##l(arg) - #define zig_convert_builtin(ResType, operation, ArgType, version) \ zig_extern zig_##ResType zig_expand_concat(zig_expand_concat(zig_expand_concat(__##operation, \ zig_compiler_rt_abbrev_##ArgType), zig_compiler_rt_abbrev_##ResType), version)(zig_##ArgType);