| ... | ... | @@ -1783,8 +1783,8 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 1783 | 1783 | switch (mc_arg) { |
| 1784 | 1784 | .none => continue, |
| 1785 | 1785 | .register => |reg| { |
| 1786 | try self.register_manager.getRegWithoutTracking(reg); |
| 1786 | 1787 | try self.genSetReg(arg.src, arg.ty, reg, arg_mcv); |
| 1787 | | // TODO interact with the register allocator to mark the instruction as moved. |
| 1788 | 1788 | }, |
| 1789 | 1789 | .stack_offset => { |
| 1790 | 1790 | // Here we need to emit instructions like this: |
| ... | ... | @@ -1925,8 +1925,8 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 1925 | 1925 | .compare_flags_signed => unreachable, |
| 1926 | 1926 | .compare_flags_unsigned => unreachable, |
| 1927 | 1927 | .register => |reg| { |
| 1928 | try self.register_manager.getRegWithoutTracking(reg); |
| 1928 | 1929 | try self.genSetReg(arg.src, arg.ty, reg, arg_mcv); |
| 1929 | | // TODO interact with the register allocator to mark the instruction as moved. |
| 1930 | 1930 | }, |
| 1931 | 1931 | .stack_offset => { |
| 1932 | 1932 | return self.fail(inst.base.src, "TODO implement calling with parameters in memory", .{}); |
| ... | ... | @@ -1988,8 +1988,8 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 1988 | 1988 | .compare_flags_signed => unreachable, |
| 1989 | 1989 | .compare_flags_unsigned => unreachable, |
| 1990 | 1990 | .register => |reg| { |
| 1991 | try self.register_manager.getRegWithoutTracking(reg); |
| 1991 | 1992 | try self.genSetReg(arg.src, arg.ty, reg, arg_mcv); |
| 1992 | | // TODO interact with the register allocator to mark the instruction as moved. |
| 1993 | 1993 | }, |
| 1994 | 1994 | .stack_offset => { |
| 1995 | 1995 | return self.fail(inst.base.src, "TODO implement calling with parameters in memory", .{}); |
| ... | ... | @@ -2039,8 +2039,8 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 2039 | 2039 | switch (mc_arg) { |
| 2040 | 2040 | .none => continue, |
| 2041 | 2041 | .register => |reg| { |
| 2042 | try self.register_manager.getRegWithoutTracking(reg); |
| 2042 | 2043 | try self.genSetReg(arg.src, arg.ty, reg, arg_mcv); |
| 2043 | | // TODO interact with the register allocator to mark the instruction as moved. |
| 2044 | 2044 | }, |
| 2045 | 2045 | .stack_offset => { |
| 2046 | 2046 | // Here we need to emit instructions like this: |
| ... | ... | @@ -2704,8 +2704,11 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 2704 | 2704 | const reg_name = input[1 .. input.len - 1]; |
| 2705 | 2705 | const reg = parseRegName(reg_name) orelse |
| 2706 | 2706 | return self.fail(inst.base.src, "unrecognized register: '{s}'", .{reg_name}); |
| 2707 | | const arg = try self.resolveInst(inst.args[i]); |
| 2708 | | try self.genSetReg(inst.base.src, inst.args[i].ty, reg, arg); |
| 2707 | |
| 2708 | const arg = inst.args[i]; |
| 2709 | const arg_mcv = try self.resolveInst(arg); |
| 2710 | try self.register_manager.getRegWithoutTracking(reg); |
| 2711 | try self.genSetReg(inst.base.src, arg.ty, reg, arg_mcv); |
| 2709 | 2712 | } |
| 2710 | 2713 | |
| 2711 | 2714 | if (mem.eql(u8, inst.asm_source, "svc #0")) { |
| ... | ... | @@ -2734,8 +2737,11 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 2734 | 2737 | const reg_name = input[1 .. input.len - 1]; |
| 2735 | 2738 | const reg = parseRegName(reg_name) orelse |
| 2736 | 2739 | return self.fail(inst.base.src, "unrecognized register: '{s}'", .{reg_name}); |
| 2737 | | const arg = try self.resolveInst(inst.args[i]); |
| 2738 | | try self.genSetReg(inst.base.src, inst.args[i].ty, reg, arg); |
| 2740 | |
| 2741 | const arg = inst.args[i]; |
| 2742 | const arg_mcv = try self.resolveInst(arg); |
| 2743 | try self.register_manager.getRegWithoutTracking(reg); |
| 2744 | try self.genSetReg(inst.base.src, arg.ty, reg, arg_mcv); |
| 2739 | 2745 | } |
| 2740 | 2746 | |
| 2741 | 2747 | if (mem.eql(u8, inst.asm_source, "svc #0")) { |
| ... | ... | @@ -2766,8 +2772,11 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 2766 | 2772 | const reg_name = input[1 .. input.len - 1]; |
| 2767 | 2773 | const reg = parseRegName(reg_name) orelse |
| 2768 | 2774 | return self.fail(inst.base.src, "unrecognized register: '{s}'", .{reg_name}); |
| 2769 | | const arg = try self.resolveInst(inst.args[i]); |
| 2770 | | try self.genSetReg(inst.base.src, inst.args[i].ty, reg, arg); |
| 2775 | |
| 2776 | const arg = inst.args[i]; |
| 2777 | const arg_mcv = try self.resolveInst(arg); |
| 2778 | try self.register_manager.getRegWithoutTracking(reg); |
| 2779 | try self.genSetReg(inst.base.src, arg.ty, reg, arg_mcv); |
| 2771 | 2780 | } |
| 2772 | 2781 | |
| 2773 | 2782 | if (mem.eql(u8, inst.asm_source, "ecall")) { |
| ... | ... | @@ -2796,8 +2805,11 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { |
| 2796 | 2805 | const reg_name = input[1 .. input.len - 1]; |
| 2797 | 2806 | const reg = parseRegName(reg_name) orelse |
| 2798 | 2807 | return self.fail(inst.base.src, "unrecognized register: '{s}'", .{reg_name}); |
| 2799 | | const arg = try self.resolveInst(inst.args[i]); |
| 2800 | | try self.genSetReg(inst.base.src, inst.args[i].ty, reg, arg); |
| 2808 | |
| 2809 | const arg = inst.args[i]; |
| 2810 | const arg_mcv = try self.resolveInst(arg); |
| 2811 | try self.register_manager.getRegWithoutTracking(reg); |
| 2812 | try self.genSetReg(inst.base.src, arg.ty, reg, arg_mcv); |
| 2801 | 2813 | } |
| 2802 | 2814 | |
| 2803 | 2815 | if (mem.eql(u8, inst.asm_source, "syscall")) { |