From ca296bf0a94987b681230388d148d77145714557 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Mon, 21 Apr 2025 17:53:24 -0500 Subject: [PATCH] nak/sm20: Call copy_alu_src_if_fabs() first Since an FAbs or FNegAbs modifier is going to force the source out to a register no matter what, we should do this first. That way we avoid the unnecessary source swaps or other evictions when we have to evict the source anyway because it has a modifier. Part-of: --- src/nouveau/compiler/nak/sm20.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/nouveau/compiler/nak/sm20.rs b/src/nouveau/compiler/nak/sm20.rs index 5bd26a44604..204294e46e4 100644 --- a/src/nouveau/compiler/nak/sm20.rs +++ b/src/nouveau/compiler/nak/sm20.rs @@ -585,11 +585,11 @@ impl SM20Op for OpFFma { fn legalize(&mut self, b: &mut LegalizeBuilder) { use RegFile::GPR; let [src0, src1, src2] = &mut self.srcs; - swap_srcs_if_not_reg(src0, src1, GPR); - b.copy_alu_src_if_not_reg(src0, GPR, SrcType::F32); b.copy_alu_src_if_fabs(src0, GPR, SrcType::F32); b.copy_alu_src_if_fabs(src1, GPR, SrcType::F32); b.copy_alu_src_if_fabs(src2, GPR, SrcType::F32); + swap_srcs_if_not_reg(src0, src1, GPR); + b.copy_alu_src_if_not_reg(src0, GPR, SrcType::F32); if src1.as_imm_not_f20().is_some() && (self.saturate || self.rnd_mode != FRndMode::NearestEven @@ -680,10 +680,10 @@ impl SM20Op for OpFMul { fn legalize(&mut self, b: &mut LegalizeBuilder) { use RegFile::GPR; let [src0, src1] = &mut self.srcs; - swap_srcs_if_not_reg(src0, src1, GPR); - b.copy_alu_src_if_not_reg(src0, GPR, SrcType::F32); b.copy_alu_src_if_fabs(src0, GPR, SrcType::F32); b.copy_alu_src_if_fabs(src1, GPR, SrcType::F32); + swap_srcs_if_not_reg(src0, src1, GPR); + b.copy_alu_src_if_not_reg(src0, GPR, SrcType::F32); if src1.as_imm_not_f20().is_some() && self.rnd_mode != FRndMode::NearestEven {