authorgravatar for koachan@protonmail.comKoakuma <koachan@protonmail.com> 2022-06-01 08:58:14+07:00
committergravatar for koachan@protonmail.comKoakuma <koachan@protonmail.com> 2022-06-06 20:34:53+07:00
log97c43afefe2938119b0c4d14032f9e4b41926716
tree37cb74c849e56ca8baaff2591fa8a1ade3a83831
parent2dfe307d6003f36279742621b8da29a162a7149e

stage2: sparc64: Spill CCR before doing calls


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

src/arch/sparc64/CodeGen.zig+5
...@@ -1047,6 +1047,11 @@ fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallOptions....@@ -1047,6 +1047,11 @@ fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallOptions.
10471047
1048 var info = try self.resolveCallingConventionValues(fn_ty, .caller);1048 var info = try self.resolveCallingConventionValues(fn_ty, .caller);
1049 defer info.deinit(self);1049 defer info.deinit(self);
1050
1051 // CCR is volatile across function calls
1052 // (SCD 2.4.1, page 3P-10)
1053 try self.spillCompareFlagsIfOccupied();
1054
1050 for (info.args) |mc_arg, arg_i| {1055 for (info.args) |mc_arg, arg_i| {
1051 const arg = args[arg_i];1056 const arg = args[arg_i];
1052 const arg_ty = self.air.typeOf(arg);1057 const arg_ty = self.air.typeOf(arg);