From c4452c5fa42e132f51f1a0b4ec98ec6ae94bd8d5 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Mon, 14 Apr 2025 12:41:13 -0500 Subject: [PATCH] nak/sm50: Add zero_reg() and true_reg() helpers Part-of: --- src/nouveau/compiler/nak/sm50.rs | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/nouveau/compiler/nak/sm50.rs b/src/nouveau/compiler/nak/sm50.rs index 4d3a3b47085..39f644527d9 100644 --- a/src/nouveau/compiler/nak/sm50.rs +++ b/src/nouveau/compiler/nak/sm50.rs @@ -206,6 +206,14 @@ impl SetFieldU64 for SM50Encoder<'_> { } } +fn zero_reg() -> RegRef { + RegRef::new(RegFile::GPR, 255, 1) +} + +fn true_reg() -> RegRef { + RegRef::new(RegFile::Pred, 7, 1) +} + impl SM50Encoder<'_> { fn set_opcode(&mut self, opcode: u16) { self.set_field(48..64, opcode); @@ -224,7 +232,7 @@ impl SM50Encoder<'_> { self.set_pred_reg( 16..19, match pred.pred_ref { - PredRef::None => RegRef::zero(RegFile::Pred, 1), + PredRef::None => true_reg(), PredRef::Reg(reg) => reg, PredRef::SSA(_) => panic!("SSA values must be lowered"), }, @@ -251,7 +259,7 @@ impl SM50Encoder<'_> { fn set_reg_src_ref(&mut self, range: Range, src_ref: SrcRef) { match src_ref { - SrcRef::Zero => self.set_reg(range, RegRef::zero(RegFile::GPR, 1)), + SrcRef::Zero => self.set_reg(range, zero_reg()), SrcRef::Reg(reg) => self.set_reg(range, reg), _ => panic!("Not a register"), } @@ -297,7 +305,7 @@ impl SM50Encoder<'_> { fn set_pred_dst(&mut self, range: Range, dst: Dst) { match dst { Dst::None => { - self.set_pred_reg(range, RegRef::zero(RegFile::Pred, 1)); + self.set_pred_reg(range, true_reg()); } Dst::Reg(reg) => self.set_pred_reg(range, reg), _ => panic!("Not a register"), @@ -305,12 +313,9 @@ impl SM50Encoder<'_> { } fn set_pred_src(&mut self, range: Range, not_bit: usize, src: Src) { - // The default for predicates is true - let true_reg = RegRef::new(RegFile::Pred, 7, 1); - let (not, reg) = match src.src_ref { - SrcRef::True => (false, true_reg), - SrcRef::False => (true, true_reg), + SrcRef::True => (false, true_reg()), + SrcRef::False => (true, true_reg()), SrcRef::Reg(reg) => (false, reg), _ => panic!("Not a register"), }; @@ -320,7 +325,7 @@ impl SM50Encoder<'_> { fn set_dst(&mut self, dst: Dst) { let reg = match dst { - Dst::None => RegRef::zero(RegFile::GPR, 1), + Dst::None => zero_reg(), Dst::Reg(reg) => reg, _ => panic!("invalid dst {dst}"), };