Skip to content

Commit 9ed4a93

Browse files
authored
Merge pull request #14189 from kcbanner/cbe_fix_float_from_repr
2 parents 83fd45d + ee9a793 commit 9ed4a93

1 file changed

Lines changed: 15 additions & 11 deletions

File tree

lib/zig.h

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)