commit 32ad218f5aa389d5827af6367d180efe2f5bba38 (tree)
parent 45f65c84457f3b52209fd4f4595130d6528ebecd
Author: Jakub Konka <kubkon@jakubkonka.com>
Date: Tue, 8 Nov 2022 13:50:30 +0100
aarch64: revert changes to .call
Diffstat:
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/arch/aarch64/CodeGen.zig b/src/arch/aarch64/CodeGen.zig
@@ -4215,16 +4215,18 @@ fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallOptions.
const result: MCValue = result: {
switch (info.return_value) {
- .register => {
- // Save function return value in a callee saved register
- break :result try self.copyToNewRegister(inst, info.return_value);
+ .register => |reg| {
+ if (RegisterManager.indexOfReg(&callee_preserved_regs, reg) == null) {
+ // Save function return value in a callee saved register
+ break :result try self.copyToNewRegister(inst, info.return_value);
+ }
},
else => {},
}
break :result info.return_value;
};
- if (args.len <= Liveness.bpi - 2) {
+ if (args.len + 1 <= Liveness.bpi - 1) {
var buf = [1]Air.Inst.Ref{.none} ** (Liveness.bpi - 1);
buf[0] = callee;
std.mem.copy(Air.Inst.Ref, buf[1..], args);