authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2022-11-15 23:15:55-05:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2022-11-15 23:33:48-05:00
logb5b507a7425d2cf6b09c16db96fa10c3d13f7799
tree49df3e76f0398332099346df02466951208412d8
parent024bac7f531e75e2428a20aac1a88a883eaa7e8e

zig.h: match float comparison signatures from compiler rt


2 files changed, 25 insertions(+), 25 deletions(-)

lib/zig.h+24-24
......@@ -929,8 +929,8 @@ typedef signed __int128 zig_i128;
929929#define zig_bitcast_u128(val) ((zig_u128)(val))
930930#define zig_bitcast_i128(val) ((zig_i128)(val))
931931#define zig_cmp_int128(Type) \
932 static inline zig_i8 zig_cmp_##Type(zig_##Type lhs, zig_##Type rhs) { \
933 return (zig_i8)((lhs > rhs) - (lhs < rhs)); \
932 static inline zig_i32 zig_cmp_##Type(zig_##Type lhs, zig_##Type rhs) { \
933 return (lhs > rhs) - (lhs < rhs); \
934934 }
935935#define zig_bit_int128(Type, operation, operator) \
936936 static inline zig_##Type zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \
......@@ -956,7 +956,7 @@ typedef struct { zig_align(16) zig_i64 hi; zig_u64 lo; } zig_i128;
956956#define zig_bitcast_u128(val) zig_as_u128((zig_u64)(val).hi, (val).lo)
957957#define zig_bitcast_i128(val) zig_as_i128((zig_i64)(val).hi, (val).lo)
958958#define zig_cmp_int128(Type) \
959 static inline zig_i8 zig_cmp_##Type(zig_##Type lhs, zig_##Type rhs) { \
959 static inline zig_i32 zig_cmp_##Type(zig_##Type lhs, zig_##Type rhs) { \
960960 return (lhs.hi == rhs.hi) \
961961 ? (lhs.lo > rhs.lo) - (lhs.lo < rhs.lo) \
962962 : (lhs.hi > rhs.hi) - (lhs.hi < rhs.hi); \
......@@ -1123,23 +1123,23 @@ static inline zig_i128 zig_mod_i128(zig_i128 lhs, zig_i128 rhs) {
11231123#define zig_mod_u128 zig_rem_u128
11241124
11251125static inline zig_u128 zig_min_u128(zig_u128 lhs, zig_u128 rhs) {
1126 return zig_cmp_u128(lhs, rhs) < 0 ? lhs : rhs;
1126 return zig_cmp_u128(lhs, rhs) < zig_as_i32(0) ? lhs : rhs;
11271127}
11281128
11291129static inline zig_i128 zig_min_i128(zig_i128 lhs, zig_i128 rhs) {
1130 return zig_cmp_i128(lhs, rhs) < 0 ? lhs : rhs;
1130 return zig_cmp_i128(lhs, rhs) < zig_as_i32(0) ? lhs : rhs;
11311131}
11321132
11331133static inline zig_u128 zig_max_u128(zig_u128 lhs, zig_u128 rhs) {
1134 return zig_cmp_u128(lhs, rhs) > 0 ? lhs : rhs;
1134 return zig_cmp_u128(lhs, rhs) > zig_as_i32(0) ? lhs : rhs;
11351135}
11361136
11371137static inline zig_i128 zig_max_i128(zig_i128 lhs, zig_i128 rhs) {
1138 return zig_cmp_i128(lhs, rhs) > 0 ? lhs : rhs;
1138 return zig_cmp_i128(lhs, rhs) > zig_as_i32(0) ? lhs : rhs;
11391139}
11401140
11411141static inline zig_i128 zig_shr_i128(zig_i128 lhs, zig_u8 rhs) {
1142 zig_i128 sign_mask = zig_cmp_i128(lhs, zig_as_i128(0, 0)) < zig_as_i8(0) ? -zig_as_i128(0, 1) : zig_as_i128(0, 0);
1142 zig_i128 sign_mask = zig_cmp_i128(lhs, zig_as_i128(0, 0)) < zig_as_i32(0) ? -zig_as_i128(0, 1) : zig_as_i128(0, 0);
11431143 return zig_xor_i128(zig_bitcast_i128(zig_shr_u128(zig_bitcast_u128(zig_xor_i128(lhs, sign_mask)), rhs)), sign_mask);
11441144}
11451145
......@@ -1193,8 +1193,8 @@ static inline zig_bool zig_shlo_u128(zig_u128 *res, zig_u128 lhs, zig_u8 rhs, zi
11931193static inline zig_bool zig_shlo_i128(zig_i128 *res, zig_i128 lhs, zig_u8 rhs, zig_u8 bits) {
11941194 *res = zig_shlw_i128(lhs, rhs, bits);
11951195 zig_i128 mask = zig_bitcast_i128(zig_shl_u128(zig_maxInt_u128, bits - rhs - zig_as_u8(1)));
1196 return zig_cmp_i128(zig_and_i128(lhs, mask), zig_as_i128(0, 0)) != zig_as_i8(0) &&
1197 zig_cmp_i128(zig_and_i128(lhs, mask), mask) != zig_as_i8(0);
1196 return zig_cmp_i128(zig_and_i128(lhs, mask), zig_as_i128(0, 0)) != zig_as_i32(0) &&
1197 zig_cmp_i128(zig_and_i128(lhs, mask), mask) != zig_as_i32(0);
11981198}
11991199
12001200static inline zig_bool zig_addo_u128(zig_u128 *res, zig_u128 lhs, zig_u128 rhs, zig_u8 bits) {
......@@ -1291,15 +1291,15 @@ static inline zig_bool zig_subo_u128(zig_u128 *res, zig_u128 lhs, zig_u128 rhs)
12911291
12921292static inline zig_u128 zig_shls_u128(zig_u128 lhs, zig_u128 rhs, zig_u8 bits) {
12931293 zig_u128 res;
1294 if (zig_cmp_u128(rhs, zig_as_u128(0, bits)) >= zig_as_i8(0))
1295 return zig_cmp_u128(lhs, zig_as_u128(0, 0)) != zig_as_i8(0) ? zig_maxInt(u128, bits) : lhs;
1294 if (zig_cmp_u128(rhs, zig_as_u128(0, bits)) >= zig_as_i32(0))
1295 return zig_cmp_u128(lhs, zig_as_u128(0, 0)) != zig_as_i32(0) ? zig_maxInt(u128, bits) : lhs;
12961296 return zig_shlo_u128(&res, lhs, (zig_u8)rhs, bits) ? zig_maxInt(u128, bits) : res;
12971297}
12981298
12991299static inline zig_i128 zig_shls_i128(zig_i128 lhs, zig_i128 rhs, zig_u8 bits) {
13001300 zig_i128 res;
1301 if (zig_cmp_u128(zig_bitcast_u128(rhs), zig_as_u128(0, bits)) < zig_as_i8(0) && !zig_shlo_i128(&res, lhs, rhs, bits)) return res;
1302 return zig_cmp_i128(lhs, zig_as_i128(0, 0)) < zig_as_i8(0) ? zig_minInt(i128, bits) : zig_maxInt(i128, bits);
1301 if (zig_cmp_u128(zig_bitcast_u128(rhs), zig_as_u128(0, bits)) < zig_as_i32(0) && !zig_shlo_i128(&res, lhs, rhs, bits)) return res;
1302 return zig_cmp_i128(lhs, zig_as_i128(0, 0)) < zig_as_i32(0) ? zig_minInt(i128, bits) : zig_maxInt(i128, bits);
13031303}
13041304
13051305static inline zig_u128 zig_adds_u128(zig_u128 lhs, zig_u128 rhs, zig_u8 bits) {
......@@ -1310,7 +1310,7 @@ static inline zig_u128 zig_adds_u128(zig_u128 lhs, zig_u128 rhs, zig_u8 bits) {
13101310static inline zig_i128 zig_adds_i128(zig_i128 lhs, zig_i128 rhs, zig_u8 bits) {
13111311 zig_i128 res;
13121312 if (!zig_addo_i128(&res, lhs, rhs, bits)) return res;
1313 return zig_cmp_i128(res, zig_as_i128(0, 0)) >= zig_as_i8(0) ? zig_minInt(i128, bits) : zig_maxInt(i128, bits);
1313 return zig_cmp_i128(res, zig_as_i128(0, 0)) >= zig_as_i32(0) ? zig_minInt(i128, bits) : zig_maxInt(i128, bits);
13141314}
13151315
13161316static inline zig_u128 zig_subs_u128(zig_u128 lhs, zig_u128 rhs, zig_u8 bits) {
......@@ -1321,7 +1321,7 @@ static inline zig_u128 zig_subs_u128(zig_u128 lhs, zig_u128 rhs, zig_u8 bits) {
13211321static inline zig_i128 zig_subs_i128(zig_i128 lhs, zig_i128 rhs, zig_u8 bits) {
13221322 zig_i128 res;
13231323 if (!zig_subo_i128(&res, lhs, rhs, bits)) return res;
1324 return zig_cmp_i128(res, zig_as_i128(0, 0)) >= zig_as_i8(0) ? zig_minInt(i128, bits) : zig_maxInt(i128, bits);
1324 return zig_cmp_i128(res, zig_as_i128(0, 0)) >= zig_as_i32(0) ? zig_minInt(i128, bits) : zig_maxInt(i128, bits);
13251325}
13261326
13271327static inline zig_u128 zig_muls_u128(zig_u128 lhs, zig_u128 rhs, zig_u8 bits) {
......@@ -1332,7 +1332,7 @@ static inline zig_u128 zig_muls_u128(zig_u128 lhs, zig_u128 rhs, zig_u8 bits) {
13321332static inline zig_i128 zig_muls_i128(zig_i128 lhs, zig_i128 rhs, zig_u8 bits) {
13331333 zig_i128 res;
13341334 if (!zig_mulo_i128(&res, lhs, rhs, bits)) return res;
1335 return zig_cmp_i128(zig_xor_i128(lhs, rhs), zig_as_i128(0, 0)) < zig_as_i8(0) ? zig_minInt(i128, bits) : zig_maxInt(i128, bits);
1335 return zig_cmp_i128(zig_xor_i128(lhs, rhs), zig_as_i128(0, 0)) < zig_as_i32(0) ? zig_minInt(i128, bits) : zig_maxInt(i128, bits);
13361336}
13371337
13381338static inline zig_u8 zig_clz_u128(zig_u128 val, zig_u8 bits) {
......@@ -1584,21 +1584,21 @@ zig_convert_builtin(f128, extend, f80, 2)
15841584 }
15851585
15861586#define zig_float_less_builtin_0(Type, operation) \
1587 zig_extern zig_i8 zig_expand_concat(zig_expand_concat(__##operation, \
1587 zig_extern zig_i32 zig_expand_concat(zig_expand_concat(__##operation, \
15881588 zig_compiler_rt_abbrev_##Type), 2)(zig_##Type, zig_##Type); \
1589 static inline zig_i8 zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \
1590 return (zig_i8)zig_expand_concat(zig_expand_concat(__##operation, zig_compiler_rt_abbrev_##Type), 2)(lhs, rhs); \
1589 static inline zig_i32 zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \
1590 return zig_expand_concat(zig_expand_concat(__##operation, zig_compiler_rt_abbrev_##Type), 2)(lhs, rhs); \
15911591 }
15921592#define zig_float_less_builtin_1(Type, operation) \
1593 static inline zig_i8 zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \
1594 return (zig_i8)(!(lhs <= rhs) - (lhs < rhs)); \
1593 static inline zig_i32 zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \
1594 return (!(lhs <= rhs) - (lhs < rhs)); \
15951595 }
15961596
15971597#define zig_float_greater_builtin_0(Type, operation) \
15981598 zig_float_less_builtin_0(Type, operation)
15991599#define zig_float_greater_builtin_1(Type, operation) \
1600 static inline zig_i8 zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \
1601 return (zig_i8)((lhs > rhs) - !(lhs >= rhs)); \
1600 static inline zig_i32 zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \
1601 return ((lhs > rhs) - !(lhs >= rhs)); \
16021602 }
16031603
16041604#define zig_float_binary_builtin_0(Type, operation, operator) \
src/codegen/c.zig+1-1
......@@ -4825,7 +4825,7 @@ fn airCmpBuiltinCall(
48254825 try f.writeCValue(writer, try f.resolveInst(bin_op.lhs), .FunctionArgument);
48264826 try writer.writeAll(", ");
48274827 try f.writeCValue(writer, try f.resolveInst(bin_op.rhs), .FunctionArgument);
4828 try writer.print(") {s} {};\n", .{ operator, try f.fmtIntLiteral(Type.initTag(.i8), Value.zero) });
4828 try writer.print(") {s} {};\n", .{ operator, try f.fmtIntLiteral(Type.initTag(.i32), Value.zero) });
48294829 return local;
48304830}
48314831