@@ -1764,25 +1764,15 @@ 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-
1768- #if ( zig_has_builtin ( nan ) && zig_has_builtin ( nans ) && zig_has_builtin ( inf )) || defined( __GNUC__ )
1767+ #define zig_has_float_builtins (zig_has_builtin(nan) && zig_has_builtin(nans) && zig_has_builtin(inf)) || defined(__GNUC__)
1768+ #if zig_has_float_builtins
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 )
17861776#define zig_as_special_f16 (sign , name , arg , repr ) zig_float_from_repr_f16(repr)
17871777#define zig_as_special_f32 (sign , name , arg , repr ) zig_float_from_repr_f32(repr)
17881778#define zig_as_special_f64 (sign , name , arg , repr ) zig_float_from_repr_f64(repr)
@@ -1984,6 +1974,19 @@ typedef zig_i128 zig_c_longdouble;
19841974#define zig_as_special_constant_c_longdouble (sign , name , arg , repr ) repr
19851975#endif
19861976
1977+ #if !zig_has_float_builtins
1978+ #define zig_float_from_repr (Type , ReprType ) \
1979+ static inline zig_##Type zig_float_from_repr_##Type(zig_##ReprType repr) { \
1980+ return *((zig_##Type*)&repr); \
1981+ }
1982+ zig_float_from_repr (f16 , u16 )
1983+ zig_float_from_repr (f32 , u32 )
1984+ zig_float_from_repr (f64 , u64 )
1985+ zig_float_from_repr (f80 , u128 )
1986+ zig_float_from_repr (f128 , u128 )
1987+ zig_float_from_repr (c_longdouble , u128 )
1988+ #endif
1989+
19871990#define zig_cast_f16 (zig_f16)
19881991#define zig_cast_f32 (zig_f32)
19891992#define zig_cast_f64 (zig_f64)
0 commit comments