From 1b657e6e41bcaf362d1cc9455c17e06e57973554 Mon Sep 17 00:00:00 2001 From: joachimschmidt557 Date: Sat, 27 Mar 2021 22:23:14 +0100 Subject: stage2 codegen: Make sure function return value is in a callee preserved register --- src/codegen.zig | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/codegen.zig') diff --git a/src/codegen.zig b/src/codegen.zig index 6365d66ec6..bc3480ca01 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -2194,6 +2194,16 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { unreachable; } + switch (info.return_value) { + .register => |reg| { + if (Register.allocIndex(reg) == null) { + // Save function return value in a callee saved register + return try self.copyToNewRegister(&inst.base, info.return_value); + } + }, + else => {}, + } + return info.return_value; } -- cgit v1.2.3