aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2022-01-04 01:57:29 +0100
committerJakub Konka <kubkon@jakubkonka.com>2022-01-04 02:06:18 +0100
commita8ff51b0920fdc7edcaca332dd2c9fab6f497ca9 (patch)
treedbb57b6b0d00a7f0bdf20065125bf8c56e1788e2 /src
parentaad20ce92c5379b0379964ea3b22d81628a640ad (diff)
downloadzig-a8ff51b0920fdc7edcaca332dd2c9fab6f497ca9.tar.gz
zig-a8ff51b0920fdc7edcaca332dd2c9fab6f497ca9.zip
stage2: turn several panics into codegen errors
Add x86_64 backend to behavior.zig test suite.
Diffstat (limited to 'src')
-rw-r--r--src/arch/x86_64/CodeGen.zig11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig
index e2c3bf6fc8..b8d832c5cf 100644
--- a/src/arch/x86_64/CodeGen.zig
+++ b/src/arch/x86_64/CodeGen.zig
@@ -2384,6 +2384,9 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void {
const parent_registers = self.register_manager.registers;
try self.branch_stack.append(.{});
+ errdefer {
+ _ = self.branch_stack.pop();
+ }
try self.ensureProcessDeathCapacity(liveness_condbr.then_deaths.len);
for (liveness_condbr.then_deaths) |operand| {
@@ -3792,8 +3795,12 @@ fn resolveCallingConventionValues(self: *Self, fn_ty: Type) !CallMCValues {
.Naked => unreachable,
.Unspecified, .C => {
const ret_ty_size = @intCast(u32, ret_ty.abiSize(self.target.*));
- const aliased_reg = registerAlias(c_abi_int_return_regs[0], ret_ty_size);
- result.return_value = .{ .register = aliased_reg };
+ if (ret_ty_size <= 8) {
+ const aliased_reg = registerAlias(c_abi_int_return_regs[0], ret_ty_size);
+ result.return_value = .{ .register = aliased_reg };
+ } else {
+ return self.fail("TODO support more return types for x86_64 backend", .{});
+ }
},
else => return self.fail("TODO implement function return values for {}", .{cc}),
}