From 97c43afefe2938119b0c4d14032f9e4b41926716 Mon Sep 17 00:00:00 2001 From: Koakuma Date: Wed, 1 Jun 2022 08:58:14 +0700 Subject: [PATCH] stage2: sparc64: Spill CCR before doing calls --- src/arch/sparc64/CodeGen.zig | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/arch/sparc64/CodeGen.zig b/src/arch/sparc64/CodeGen.zig index 616ff45b43..5af1e856c8 100644 --- a/src/arch/sparc64/CodeGen.zig +++ b/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);