From 5487dd13ea23ad7e547995b9a088ba37bfe17737 Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Fri, 8 Jan 2021 23:16:50 +0100 Subject: stage2: lay the groundwork in prep for extern fn This commit lays the groundwork in preparation for implementing handling of extern functions in various backends. --- src/codegen.zig | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/codegen.zig') diff --git a/src/codegen.zig b/src/codegen.zig index eba5cb7913..d83eba2219 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -1602,6 +1602,8 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { try self.code.ensureCapacity(self.code.items.len + 7); self.code.appendSliceAssumeCapacity(&[3]u8{ 0xff, 0x14, 0x25 }); mem.writeIntLittle(u32, self.code.addManyAsArrayAssumeCapacity(4), got_addr); + } else if (func_value.castTag(.extern_fn)) |_| { + return self.fail(inst.base.src, "TODO implement calling extern functions", .{}); } else { return self.fail(inst.base.src, "TODO implement calling bitcasted functions", .{}); } @@ -1628,6 +1630,8 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { try self.genSetReg(inst.base.src, .ra, .{ .memory = got_addr }); mem.writeIntLittle(u32, try self.code.addManyAsArray(4), Instruction.jalr(.ra, 0, .ra).toU32()); + } else if (func_value.castTag(.extern_fn)) |_| { + return self.fail(inst.base.src, "TODO implement calling extern functions", .{}); } else { return self.fail(inst.base.src, "TODO implement calling bitcasted functions", .{}); } @@ -1672,6 +1676,8 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { else => return self.fail(inst.base.src, "TODO implement fn call with non-void return value", .{}), } } + } else if (func_value.castTag(.extern_fn)) |_| { + return self.fail(inst.base.src, "TODO implement calling extern functions", .{}); } else { return self.fail(inst.base.src, "TODO implement calling bitcasted functions", .{}); } @@ -1733,6 +1739,8 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { writeInt(u32, try self.code.addManyAsArray(4), Instruction.mov(.al, .lr, Instruction.Operand.reg(.pc, Instruction.Operand.Shift.none)).toU32()); writeInt(u32, try self.code.addManyAsArray(4), Instruction.bx(.al, .lr).toU32()); } + } else if (func_value.castTag(.extern_fn)) |_| { + return self.fail(inst.base.src, "TODO implement calling extern functions", .{}); } else { return self.fail(inst.base.src, "TODO implement calling bitcasted functions", .{}); } @@ -1787,6 +1795,8 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { try self.genSetReg(inst.base.src, .x30, .{ .memory = got_addr }); writeInt(u32, try self.code.addManyAsArray(4), Instruction.blr(.x30).toU32()); + } else if (func_value.castTag(.extern_fn)) |_| { + return self.fail(inst.base.src, "TODO implement calling extern functions", .{}); } else { return self.fail(inst.base.src, "TODO implement calling bitcasted functions", .{}); } @@ -1849,6 +1859,8 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { }, else => unreachable, // unsupported architecture on MachO } + } else if (func_value.castTag(.extern_fn)) |_| { + return self.fail(inst.base.src, "TODO implement calling extern functions", .{}); } else { return self.fail(inst.base.src, "TODO implement calling bitcasted functions", .{}); } -- cgit v1.2.3