aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2025-02-04 19:09:46 -0500
committerJacob Young <jacobly0@users.noreply.github.com>2025-02-06 16:14:53 -0500
commit288d3062d0ff4bb2c93a4557fd973bef6c92aa40 (patch)
tree3b75bd40e58d787f5278abd3e3cf51bfb3b17bd9 /src
parent96ed1a2b46cd13adda1ceba3a03c55a4cae528cd (diff)
downloadzig-288d3062d0ff4bb2c93a4557fd973bef6c92aa40.tar.gz
zig-288d3062d0ff4bb2c93a4557fd973bef6c92aa40.zip
x86_64: avoid comparing different transcendental function impls
Diffstat (limited to 'src')
-rw-r--r--src/arch/x86_64/CodeGen.zig140
1 files changed, 13 insertions, 127 deletions
diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig
index affd5b3b4e..f6483ed391 100644
--- a/src/arch/x86_64/CodeGen.zig
+++ b/src/arch/x86_64/CodeGen.zig
@@ -28849,166 +28849,52 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, .x87, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .size = 16, .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__sqrtx" } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{.{ .reg = .st0 }},
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, .v_dqa, .mov, .tmp0x, .mem(.src0x), ._, ._ },
- .{ ._, .v_dqa, .mov, .mem(.tmp1x), .tmp0x, ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, .x87, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .size = 16, .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__sqrtx" } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{.{ .reg = .st0 }},
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._dqa, .mov, .tmp0x, .mem(.src0x), ._, ._ },
- .{ ._, ._dqa, .mov, .mem(.tmp1x), .tmp0x, ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, .x87, null, null },
+ .required_features = .{ .x87, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_x87, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__sqrtx" } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
- },
- .dst_temps = .{.{ .reg = .st0 }},
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._ps, .mova, .tmp0x, .mem(.src0x), ._, ._ },
- .{ ._, ._ps, .mova, .mem(.tmp1x), .tmp0x, ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, .x87, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .size = 16, .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__sqrtx" } } },
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{.mem},
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .x87 } }},
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .f_, .sqrt, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, .x87, null, null },
+ .required_features = .{ .x87, null, null, null },
.src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__sqrtx" } } },
- .unused,
- .unused,
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
- },
- .dst_temps = .{.mem},
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, .x87, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .size = 16, .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__sqrtx" } } },
- .unused,
.unused,
.unused,
.unused,
.unused,
},
.dst_temps = .{.mem},
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._ps, .mova, .mem(.tmp2x), .tmp1x, ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ .@"0:", .f_, .ld, .memia(.src0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .f_, .sqrt, ._, ._, ._, ._ },
.{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },