@@ -1764,25 +1764,16 @@ static inline zig_i128 zig_bit_reverse_i128(zig_i128 val, zig_u8 bits) {
17641764#define __builtin_infl () zig_msvc_flt_infl
17651765#endif
17661766
1767-
17681767#if (zig_has_builtin (nan ) && zig_has_builtin (nans ) && zig_has_builtin (inf )) || defined(__GNUC__ )
1768+ #define zig_has_float_builtins 1
17691769#define zig_as_special_f16 (sign , name , arg , repr ) sign zig_as_f16(__builtin_##name, )(arg)
17701770#define zig_as_special_f32 (sign , name , arg , repr ) sign zig_as_f32(__builtin_##name, )(arg)
17711771#define zig_as_special_f64 (sign , name , arg , repr ) sign zig_as_f64(__builtin_##name, )(arg)
17721772#define zig_as_special_f80 (sign , name , arg , repr ) sign zig_as_f80(__builtin_##name, )(arg)
17731773#define zig_as_special_f128 (sign , name , arg , repr ) sign zig_as_f128(__builtin_##name, )(arg)
17741774#define zig_as_special_c_longdouble (sign , name , arg , repr ) sign zig_as_c_longdouble(__builtin_##name, )(arg)
17751775#else
1776- #define zig_float_from_repr (Type , ReprType ) \
1777- static inline zig_##Type zig_float_from_repr_##Type(zig_##ReprType repr) { \
1778- return *((zig_##Type*)&repr); \
1779- }
1780- zig_float_from_repr (f16 , u16 )
1781- zig_float_from_repr (f32 , u32 )
1782- zig_float_from_repr (f64 , u64 )
1783- zig_float_from_repr (f80 , u128 )
1784- zig_float_from_repr (f128 , u128 )
1785- zig_float_from_repr (c_longdouble , u128 )
1776+ #define zig_has_float_builtins 0
17861777#define zig_as_special_f16 (sign , name , arg , repr ) zig_float_from_repr_f16(repr)
17871778#define zig_as_special_f32 (sign , name , arg , repr ) zig_float_from_repr_f32(repr)
17881779#define zig_as_special_f64 (sign , name , arg , repr ) zig_float_from_repr_f64(repr)
@@ -1984,6 +1975,19 @@ typedef zig_i128 zig_c_longdouble;
19841975#define zig_as_special_constant_c_longdouble (sign , name , arg , repr ) repr
19851976#endif
19861977
1978+ #if !zig_has_float_builtins
1979+ #define zig_float_from_repr (Type , ReprType ) \
1980+ static inline zig_##Type zig_float_from_repr_##Type(zig_##ReprType repr) { \
1981+ return *((zig_##Type*)&repr); \
1982+ }
1983+ zig_float_from_repr (f16 , u16 )
1984+ zig_float_from_repr (f32 , u32 )
1985+ zig_float_from_repr (f64 , u64 )
1986+ zig_float_from_repr (f80 , u128 )
1987+ zig_float_from_repr (f128 , u128 )
1988+ zig_float_from_repr (c_longdouble , u128 )
1989+ #endif
1990+
19871991#define zig_cast_f16 (zig_f16)
19881992#define zig_cast_f32 (zig_f32)
19891993#define zig_cast_f64 (zig_f64)
0 commit comments