Commit 7747bf07c7

Jakub Konka <kubkon@jakubkonka.com>
2021-11-18 19:46:56
stage2: use correct register alias for mem operands
When loading/storing on the stack, use `registerAlias` to correctly workout the size of the register and thus correctly select target instruction.
1 parent 00966b7
Changed files (1)
src
arch
src/arch/x86_64/CodeGen.zig
@@ -1545,7 +1545,7 @@ fn genBinMathOpMir(
                     _ = try self.addInst(.{
                         .tag = mir_tag,
                         .ops = (Mir.Ops{
-                            .reg1 = dst_reg,
+                            .reg1 = registerAlias(dst_reg, @intCast(u32, abi_size)),
                             .reg2 = .ebp,
                             .flags = 0b01,
                         }).encode(),
@@ -1576,7 +1576,7 @@ fn genBinMathOpMir(
                     _ = try self.addInst(.{
                         .tag = mir_tag,
                         .ops = (Mir.Ops{
-                            .reg1 = src_reg,
+                            .reg1 = registerAlias(src_reg, @intCast(u32, abi_size)),
                             .reg2 = .ebp,
                             .flags = 0b10,
                         }).encode(),
@@ -2749,7 +2749,7 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro
             _ = try self.addInst(.{
                 .tag = .mov,
                 .ops = (Mir.Ops{
-                    .reg1 = reg,
+                    .reg1 = registerAlias(reg, @intCast(u32, abi_size)),
                     .reg2 = .ebp,
                     .flags = 0b10,
                 }).encode(),
@@ -2970,7 +2970,7 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void
             _ = try self.addInst(.{
                 .tag = .mov,
                 .ops = (Mir.Ops{
-                    .reg1 = reg,
+                    .reg1 = registerAlias(reg, @intCast(u32, abi_size)),
                     .reg2 = .ebp,
                     .flags = 0b01,
                 }).encode(),