authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-03-05 18:55:04+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-03-11 20:05:49+01:00
logea3b3e94aba405d4364fdb06231208467ac71f87
treee24770d0b26b5eb193d39b66fe434d674c3900e2
parentf14831ec73d7dd87a770f902fb53d1ede486e524

x86_64: clean up call semantics in codegen


2 files changed, 5 insertions(+), 5 deletions(-)

src/arch/x86_64/CodeGen.zig+3-3
...@@ -4091,11 +4091,11 @@ fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallModifier...@@ -4091,11 +4091,11 @@ fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallModifier
4091 if (self.bin_file.cast(link.File.Elf)) |elf_file| {4091 if (self.bin_file.cast(link.File.Elf)) |elf_file| {
4092 const atom_index = try elf_file.getOrCreateAtomForDecl(func.owner_decl);4092 const atom_index = try elf_file.getOrCreateAtomForDecl(func.owner_decl);
4093 const atom = elf_file.getAtom(atom_index);4093 const atom = elf_file.getAtom(atom_index);
4094 const got_addr = @intCast(u32, atom.getOffsetTableAddress(elf_file));4094 const got_addr = @intCast(i32, atom.getOffsetTableAddress(elf_file));
4095 _ = try self.addInst(.{4095 _ = try self.addInst(.{
4096 .tag = .call,4096 .tag = .call,
4097 .ops = Mir.Inst.Ops.encode(.{ .flags = 0b01 }),4097 .ops = Mir.Inst.Ops.encode(.{ .flags = 0b01 }),
4098 .data = .{ .imm = got_addr },4098 .data = .{ .disp = got_addr },
4099 });4099 });
4100 } else if (self.bin_file.cast(link.File.Coff)) |coff_file| {4100 } else if (self.bin_file.cast(link.File.Coff)) |coff_file| {
4101 const atom_index = try coff_file.getOrCreateAtomForDecl(func.owner_decl);4101 const atom_index = try coff_file.getOrCreateAtomForDecl(func.owner_decl);
...@@ -4142,7 +4142,7 @@ fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallModifier...@@ -4142,7 +4142,7 @@ fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallModifier
4142 _ = try self.addInst(.{4142 _ = try self.addInst(.{
4143 .tag = .call,4143 .tag = .call,
4144 .ops = Mir.Inst.Ops.encode(.{ .flags = 0b01 }),4144 .ops = Mir.Inst.Ops.encode(.{ .flags = 0b01 }),
4145 .data = .{ .imm = @intCast(u32, fn_got_addr) },4145 .data = .{ .disp = @intCast(i32, fn_got_addr) },
4146 });4146 });
4147 } else unreachable;4147 } else unreachable;
4148 } else if (func_value.castTag(.extern_fn)) |func_payload| {4148 } else if (func_value.castTag(.extern_fn)) |func_payload| {
src/arch/x86_64/Emit.zig+2-2
...@@ -340,9 +340,9 @@ fn mirJmpCall(emit: *Emit, mnemonic: Instruction.Mnemonic, inst: Mir.Inst.Index)...@@ -340,9 +340,9 @@ fn mirJmpCall(emit: *Emit, mnemonic: Instruction.Mnemonic, inst: Mir.Inst.Index)
340 },340 },
341 0b01 => {341 0b01 => {
342 if (ops.reg1 == .none) {342 if (ops.reg1 == .none) {
343 const imm = emit.mir.instructions.items(.data)[inst].imm;343 const disp = emit.mir.instructions.items(.data)[inst].disp;
344 return emit.encode(mnemonic, .{344 return emit.encode(mnemonic, .{
345 .op1 = .{ .imm = imm },345 .op1 = .{ .mem = Memory.sib(.qword, .{ .disp = disp }) },
346 });346 });
347 }347 }
348 return emit.encode(mnemonic, .{348 return emit.encode(mnemonic, .{