authorgravatar for koachan@protonmail.comKoakuma <koachan@protonmail.com> 2022-06-13 22:34:10+07:00
committergravatar for koachan@protonmail.comKoakuma <koachan@protonmail.com> 2022-06-24 21:08:41+07:00
log40590c8bf976a44451e161b4a75d7f8bac15a7d4
tree249d5671d25df337af85ae8ccd3dd0217553aaf5
parent5c8612642b84d2d3f91e6bbe26f9cde2579997f7

stage2: sparc64: Save registers before calling another function


1 files changed, 7 insertions(+), 0 deletions(-)

src/arch/sparc64/CodeGen.zig+7
...@@ -1081,6 +1081,13 @@ fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallOptions....@@ -1081,6 +1081,13 @@ fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallOptions.
1081 // (SCD 2.4.1, page 3P-10)1081 // (SCD 2.4.1, page 3P-10)
1082 try self.spillConditionFlagsIfOccupied();1082 try self.spillConditionFlagsIfOccupied();
10831083
1084 // Save caller-saved registers, but crucially *after* we save the
1085 // compare flags as saving compare flags may require a new
1086 // caller-saved register
1087 for (abi.caller_preserved_regs) |reg| {
1088 try self.register_manager.getReg(reg, null);
1089 }
1090
1084 for (info.args) |mc_arg, arg_i| {1091 for (info.args) |mc_arg, arg_i| {
1085 const arg = args[arg_i];1092 const arg = args[arg_i];
1086 const arg_ty = self.air.typeOf(arg);1093 const arg_ty = self.air.typeOf(arg);