diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2023-10-08 00:02:19 -0400 |
|---|---|---|
| committer | Jacob Young <jacobly0@users.noreply.github.com> | 2023-10-08 04:41:55 -0400 |
| commit | f6e027da32caabdea57bae9ee806abe1d9e3ac68 (patch) | |
| tree | 5cf1dcdf53bad06da5485a6f0578305157815303 | |
| parent | b8f00ae337a9c36cb33181292c5b6ba345add9ab (diff) | |
| download | zig-f6e027da32caabdea57bae9ee806abe1d9e3ac68.tar.gz zig-f6e027da32caabdea57bae9ee806abe1d9e3ac68.zip | |
x86_64: fix conversions between floats and 128-bit integers
| -rw-r--r-- | src/arch/x86_64/CodeGen.zig | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index a637254838..b2f03a993f 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -11470,9 +11470,13 @@ fn airFloatFromInt(self: *Self, inst: Air.Inst.Index) !void { const result = result: { if (switch (dst_bits) { 16, 80, 128 => true, - 32, 64 => src_size > 8 and src_size < 16, + 32, 64 => src_size > 8, else => unreachable, }) { + if (src_bits > 128) return self.fail("TODO implement airFloatFromInt from {} to {}", .{ + src_ty.fmt(mod), dst_ty.fmt(mod), + }); + var callee: ["__floatun?i?f".len]u8 = undefined; break :result try self.genCall(.{ .lib = .{ .return_type = dst_ty.toIntern(), @@ -11488,10 +11492,6 @@ fn airFloatFromInt(self: *Self, inst: Air.Inst.Index) !void { } }, &.{src_ty}, &.{.{ .air_ref = ty_op.operand }}); } - if (src_size > 8) return self.fail("TODO implement airFloatFromInt from {} to {}", .{ - src_ty.fmt(mod), dst_ty.fmt(mod), - }); - const src_mcv = try self.resolveInst(ty_op.operand); const src_reg = if (src_mcv.isRegister()) src_mcv.getReg().? @@ -11549,9 +11549,13 @@ fn airIntFromFloat(self: *Self, inst: Air.Inst.Index) !void { const result = result: { if (switch (src_bits) { 16, 80, 128 => true, - 32, 64 => dst_size > 8 and dst_size < 16, + 32, 64 => dst_size > 8, else => unreachable, }) { + if (dst_bits > 128) return self.fail("TODO implement airIntFromFloat from {} to {}", .{ + src_ty.fmt(mod), dst_ty.fmt(mod), + }); + var callee: ["__fixuns?f?i".len]u8 = undefined; break :result try self.genCall(.{ .lib = .{ .return_type = dst_ty.toIntern(), @@ -11567,10 +11571,6 @@ fn airIntFromFloat(self: *Self, inst: Air.Inst.Index) !void { } }, &.{src_ty}, &.{.{ .air_ref = ty_op.operand }}); } - if (dst_size > 8) return self.fail("TODO implement airIntFromFloat from {} to {}", .{ - src_ty.fmt(mod), dst_ty.fmt(mod), - }); - const src_mcv = try self.resolveInst(ty_op.operand); const src_reg = if (src_mcv.isRegister()) src_mcv.getReg().? |
