authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-01-04 13:44:53-05:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2023-01-04 13:44:53-05:00
log9ed4a93ae7244a02071196e8913f43bcc9144c25
treeaf938b0abecfcc0ed0e4b1a534ba513dfc539d0b
parent83fd45d82074eb8e6f914c8bb540927440897d6f
parentee9a793d83cd0f4a340ebb6b2d54e79c73b3193f
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #14189 from kcbanner/cbe_fix_float_from_repr


1 files changed, 15 insertions(+), 11 deletions(-)

lib/zig.h+15-11
......@@ -1764,8 +1764,8 @@ 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)
......@@ -1773,16 +1773,7 @@ static inline zig_i128 zig_bit_reverse_i128(zig_i128 val, zig_u8 bits) {
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 }
1780zig_float_from_repr(f16, u16)
1781zig_float_from_repr(f32, u32)
1782zig_float_from_repr(f64, u64)
1783zig_float_from_repr(f80, u128)
1784zig_float_from_repr(f128, u128)
1785zig_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 }
1983zig_float_from_repr(f16, u16)
1984zig_float_from_repr(f32, u32)
1985zig_float_from_repr(f64, u64)
1986zig_float_from_repr(f80, u128)
1987zig_float_from_repr(f128, u128)
1988zig_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)