| ... | @@ -4215,16 +4215,18 @@ fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallOptions. | ... | @@ -4215,16 +4215,18 @@ fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallOptions. |
| 4215 | | 4215 | |
| 4216 | const result: MCValue = result: { | 4216 | const result: MCValue = result: { |
| 4217 | switch (info.return_value) { | 4217 | switch (info.return_value) { |
| 4218 | .register => { | 4218 | .register => |reg| { |
| 4219 | // Save function return value in a callee saved register | 4219 | if (RegisterManager.indexOfReg(&callee_preserved_regs, reg) == null) { |
| 4220 | break :result try self.copyToNewRegister(inst, info.return_value); | 4220 | // Save function return value in a callee saved register |
| | 4221 | break :result try self.copyToNewRegister(inst, info.return_value); |
| | 4222 | } |
| 4221 | }, | 4223 | }, |
| 4222 | else => {}, | 4224 | else => {}, |
| 4223 | } | 4225 | } |
| 4224 | break :result info.return_value; | 4226 | break :result info.return_value; |
| 4225 | }; | 4227 | }; |
| 4226 | | 4228 | |
| 4227 | if (args.len <= Liveness.bpi - 2) { | 4229 | if (args.len + 1 <= Liveness.bpi - 1) { |
| 4228 | var buf = [1]Air.Inst.Ref{.none} ** (Liveness.bpi - 1); | 4230 | var buf = [1]Air.Inst.Ref{.none} ** (Liveness.bpi - 1); |
| 4229 | buf[0] = callee; | 4231 | buf[0] = callee; |
| 4230 | std.mem.copy(Air.Inst.Ref, buf[1..], args); | 4232 | std.mem.copy(Air.Inst.Ref, buf[1..], args); |