Commit 97c43afefe

Koakuma <koachan@protonmail.com>
2022-06-01 03:58:14
stage2: sparc64: Spill CCR before doing calls
1 parent 2dfe307
Changed files (1)
src
arch
sparc64
src/arch/sparc64/CodeGen.zig
@@ -1047,6 +1047,11 @@ fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallOptions.
 
     var info = try self.resolveCallingConventionValues(fn_ty, .caller);
     defer info.deinit(self);
+
+    // CCR is volatile across function calls
+    // (SCD 2.4.1, page 3P-10)
+    try self.spillCompareFlagsIfOccupied();
+
     for (info.args) |mc_arg, arg_i| {
         const arg = args[arg_i];
         const arg_ty = self.air.typeOf(arg);