authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-10-08 00:02:19-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-10-08 04:41:55-04:00
logf6e027da32caabdea57bae9ee806abe1d9e3ac68
tree5cf1dcdf53bad06da5485a6f0578305157815303
parentb8f00ae337a9c36cb33181292c5b6ba345add9ab

x86_64: fix conversions between floats and 128-bit integers


1 files changed, 10 insertions(+), 10 deletions(-)

src/arch/x86_64/CodeGen.zig+10-10
......@@ -11470,9 +11470,13 @@ fn airFloatFromInt(self: *Self, inst: Air.Inst.Index) !void {
1147011470 const result = result: {
1147111471 if (switch (dst_bits) {
1147211472 16, 80, 128 => true,
11473 32, 64 => src_size > 8 and src_size < 16,
11473 32, 64 => src_size > 8,
1147411474 else => unreachable,
1147511475 }) {
11476 if (src_bits > 128) return self.fail("TODO implement airFloatFromInt from {} to {}", .{
11477 src_ty.fmt(mod), dst_ty.fmt(mod),
11478 });
11479
1147611480 var callee: ["__floatun?i?f".len]u8 = undefined;
1147711481 break :result try self.genCall(.{ .lib = .{
1147811482 .return_type = dst_ty.toIntern(),
......@@ -11488,10 +11492,6 @@ fn airFloatFromInt(self: *Self, inst: Air.Inst.Index) !void {
1148811492 } }, &.{src_ty}, &.{.{ .air_ref = ty_op.operand }});
1148911493 }
1149011494
11491 if (src_size > 8) return self.fail("TODO implement airFloatFromInt from {} to {}", .{
11492 src_ty.fmt(mod), dst_ty.fmt(mod),
11493 });
11494
1149511495 const src_mcv = try self.resolveInst(ty_op.operand);
1149611496 const src_reg = if (src_mcv.isRegister())
1149711497 src_mcv.getReg().?
......@@ -11549,9 +11549,13 @@ fn airIntFromFloat(self: *Self, inst: Air.Inst.Index) !void {
1154911549 const result = result: {
1155011550 if (switch (src_bits) {
1155111551 16, 80, 128 => true,
11552 32, 64 => dst_size > 8 and dst_size < 16,
11552 32, 64 => dst_size > 8,
1155311553 else => unreachable,
1155411554 }) {
11555 if (dst_bits > 128) return self.fail("TODO implement airIntFromFloat from {} to {}", .{
11556 src_ty.fmt(mod), dst_ty.fmt(mod),
11557 });
11558
1155511559 var callee: ["__fixuns?f?i".len]u8 = undefined;
1155611560 break :result try self.genCall(.{ .lib = .{
1155711561 .return_type = dst_ty.toIntern(),
......@@ -11567,10 +11571,6 @@ fn airIntFromFloat(self: *Self, inst: Air.Inst.Index) !void {
1156711571 } }, &.{src_ty}, &.{.{ .air_ref = ty_op.operand }});
1156811572 }
1156911573
11570 if (dst_size > 8) return self.fail("TODO implement airIntFromFloat from {} to {}", .{
11571 src_ty.fmt(mod), dst_ty.fmt(mod),
11572 });
11573
1157411574 const src_mcv = try self.resolveInst(ty_op.operand);
1157511575 const src_reg = if (src_mcv.isRegister())
1157611576 src_mcv.getReg().?