| ... | ... | @@ -1696,17 +1696,8 @@ fn airIntCast(self: *Self, inst: Air.Inst.Index) !void { |
| 1696 | 1696 | const dst_ty = self.typeOfIndex(inst); |
| 1697 | 1697 | |
| 1698 | 1698 | const result: MCValue = result: { |
| 1699 | | const dst_abi_size: u32 = @intCast(dst_ty.abiSize(zcu)); |
| 1700 | | |
| 1701 | 1699 | const src_int_info = src_ty.intInfo(zcu); |
| 1702 | 1700 | const dst_int_info = dst_ty.intInfo(zcu); |
| 1703 | | const extend = switch (src_int_info.signedness) { |
| 1704 | | .signed => dst_int_info, |
| 1705 | | .unsigned => src_int_info, |
| 1706 | | }.signedness; |
| 1707 | | |
| 1708 | | _ = dst_abi_size; |
| 1709 | | _ = extend; |
| 1710 | 1701 | |
| 1711 | 1702 | const min_ty = if (dst_int_info.bits < src_int_info.bits) dst_ty else src_ty; |
| 1712 | 1703 | |
| ... | ... | @@ -1727,13 +1718,11 @@ fn airIntCast(self: *Self, inst: Air.Inst.Index) !void { |
| 1727 | 1718 | break :dst dst_mcv; |
| 1728 | 1719 | }; |
| 1729 | 1720 | |
| 1730 | | if (dst_int_info.bits <= src_int_info.bits) { |
| 1721 | if (dst_int_info.bits <= src_int_info.bits) |
| 1731 | 1722 | break :result dst_mcv; |
| 1732 | | } |
| 1733 | 1723 | |
| 1734 | | if (dst_int_info.bits > 64 or src_int_info.bits > 64) { |
| 1724 | if (dst_int_info.bits > 64 or src_int_info.bits > 64) |
| 1735 | 1725 | break :result null; // TODO |
| 1736 | | } |
| 1737 | 1726 | |
| 1738 | 1727 | break :result dst_mcv; |
| 1739 | 1728 | } orelse return self.fail("TODO implement airIntCast from {} to {}", .{ |
| ... | ... | @@ -3435,6 +3424,7 @@ fn genArgDbgInfo(self: Self, inst: Air.Inst.Index, mcv: MCValue) !void { |
| 3435 | 3424 | } |
| 3436 | 3425 | |
| 3437 | 3426 | fn airArg(self: *Self, inst: Air.Inst.Index) !void { |
| 3427 | const zcu = self.bin_file.comp.module.?; |
| 3438 | 3428 | var arg_index = self.arg_index; |
| 3439 | 3429 | |
| 3440 | 3430 | // we skip over args that have no bits |
| ... | ... | @@ -3445,10 +3435,18 @@ fn airArg(self: *Self, inst: Air.Inst.Index) !void { |
| 3445 | 3435 | const src_mcv = self.args[arg_index]; |
| 3446 | 3436 | |
| 3447 | 3437 | const dst_mcv = switch (src_mcv) { |
| 3448 | | .register, .register_pair, .load_frame => dst: { |
| 3449 | | for (src_mcv.getRegs()) |reg| self.register_manager.getRegAssumeFree(reg, inst); |
| 3450 | | break :dst src_mcv; |
| 3438 | .register => dst: { |
| 3439 | const frame = try self.allocFrameIndex(FrameAlloc.init(.{ |
| 3440 | .size = Type.usize.abiSize(zcu), |
| 3441 | .alignment = Type.usize.abiAlignment(zcu), |
| 3442 | })); |
| 3443 | const dst_mcv: MCValue = .{ .load_frame = .{ .index = frame } }; |
| 3444 | |
| 3445 | try self.genCopy(Type.usize, dst_mcv, src_mcv); |
| 3446 | |
| 3447 | break :dst dst_mcv; |
| 3451 | 3448 | }, |
| 3449 | .load_frame => src_mcv, |
| 3452 | 3450 | else => return self.fail("TODO: airArg {s}", .{@tagName(src_mcv)}), |
| 3453 | 3451 | }; |
| 3454 | 3452 | |