diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2022-01-04 01:57:29 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2022-01-04 02:06:18 +0100 |
| commit | a8ff51b0920fdc7edcaca332dd2c9fab6f497ca9 (patch) | |
| tree | dbb57b6b0d00a7f0bdf20065125bf8c56e1788e2 /src | |
| parent | aad20ce92c5379b0379964ea3b22d81628a640ad (diff) | |
| download | zig-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.zig | 11 |
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}), } |
