Module: Mesa
Branch: main
Commit: 45686ec0bac554697a4389774fb7b9f35b640801
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=45686ec0bac554697a4389774fb7b9f35b640801

Author: Faith Ekstrand <[email protected]>
Date:   Mon Dec  4 09:02:31 2023 -0600

nak: Replace OpBMov with OpBClear

This is all we're using it for right now and an op that simply clears
has far more obvious semantics than something which reads from and then
clears its source.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26463>

---

 src/nouveau/compiler/nak_encode_sm70.rs | 29 +++-----------
 src/nouveau/compiler/nak_from_nir.rs    | 12 ++----
 src/nouveau/compiler/nak_ir.rs          | 67 ++++-----------------------------
 src/nouveau/compiler/nak_legalize.rs    |  2 +-
 4 files changed, 18 insertions(+), 92 deletions(-)

diff --git a/src/nouveau/compiler/nak_encode_sm70.rs 
b/src/nouveau/compiler/nak_encode_sm70.rs
index 843760aefae..f625a27bfb3 100644
--- a/src/nouveau/compiler/nak_encode_sm70.rs
+++ b/src/nouveau/compiler/nak_encode_sm70.rs
@@ -1664,32 +1664,13 @@ impl SM70Instr {
         self.set_field(range, rel_offset);
     }
 
-    fn encode_bmov(&mut self, op: &OpBMov) {
+    fn encode_bclear(&mut self, op: &OpBClear) {
         self.set_opcode(0x355);
-        self.set_dst(op.dst);
 
-        let src = match op.src {
-            BMovSrc::Barrier(bar) => bar.idx(),
-            BMovSrc::TreadStateEnum0 => 0x10,
-            BMovSrc::TreadStateEnum1 => 0x11,
-            BMovSrc::TreadStateEnum2 => 0x12,
-            BMovSrc::TreadStateEnum3 => 0x13,
-            BMovSrc::TreadStateEnum4 => 0x14,
-            BMovSrc::TrapReturnPCLo => 0x15,
-            BMovSrc::TrapReturnPCHi => 0x16,
-            BMovSrc::TrapReturnMask => 0x17,
-            BMovSrc::MExited => 0x18,
-            BMovSrc::MKill => 0x19,
-            BMovSrc::MActive => 0x1a,
-            BMovSrc::MAtExit => 0x1b,
-            BMovSrc::OptStack => 0x1c,
-            BMovSrc::APICallDepth => 0x1d,
-            BMovSrc::AtExitPCLo => 0x1e,
-            BMovSrc::AtExitPCHi => 0x1f,
-        };
-        self.set_field(24..29, src);
+        self.set_dst(Dst::None);
+        self.set_field(24..28, op.dst.idx());
 
-        self.set_bit(84, op.clear);
+        self.set_bit(84, true); // .CLEAR
     }
 
     fn encode_break(&mut self, op: &OpBreak) {
@@ -1927,7 +1908,7 @@ impl SM70Instr {
             Op::LdTram(op) => si.encode_ldtram(&op),
             Op::CCtl(op) => si.encode_cctl(&op),
             Op::MemBar(op) => si.encode_membar(&op),
-            Op::BMov(op) => si.encode_bmov(&op),
+            Op::BClear(op) => si.encode_bclear(&op),
             Op::Break(op) => si.encode_break(&op),
             Op::BSSy(op) => si.encode_bssy(&op, ip, labels),
             Op::BSync(op) => si.encode_bsync(&op),
diff --git a/src/nouveau/compiler/nak_from_nir.rs 
b/src/nouveau/compiler/nak_from_nir.rs
index d23b3f15b50..ba6bb0650d5 100644
--- a/src/nouveau/compiler/nak_from_nir.rs
+++ b/src/nouveau/compiler/nak_from_nir.rs
@@ -1627,10 +1627,8 @@ impl<'a> ShaderFromNir<'a> {
                 let label = self.label_alloc.alloc();
                 let bar = self.bar_alloc.alloc();
 
-                let bmov = b.push_op(OpBMov {
-                    dst: Dst::None,
-                    src: BMovSrc::Barrier(bar),
-                    clear: true,
+                let bmov = b.push_op(OpBClear {
+                    dst: bar,
                 });
                 bmov.deps.yld = true;
 
@@ -2542,10 +2540,8 @@ impl<'a> ShaderFromNir<'a> {
             let label = self.label_alloc.alloc();
             let bar = self.bar_alloc.alloc();
 
-            let bmov = b.push_op(OpBMov {
-                dst: Dst::None,
-                src: BMovSrc::Barrier(bar),
-                clear: true,
+            let bmov = b.push_op(OpBClear {
+                dst: bar,
             });
             bmov.deps.yld = true;
 
diff --git a/src/nouveau/compiler/nak_ir.rs b/src/nouveau/compiler/nak_ir.rs
index e20f043fc61..230d817c7da 100644
--- a/src/nouveau/compiler/nak_ir.rs
+++ b/src/nouveau/compiler/nak_ir.rs
@@ -3601,69 +3601,18 @@ impl DisplayOp for OpMemBar {
 }
 impl_display_for_op!(OpMemBar);
 
-#[allow(dead_code)]
-pub enum BMovSrc {
-    Barrier(BarRef),
-    TreadStateEnum0,
-    TreadStateEnum1,
-    TreadStateEnum2,
-    TreadStateEnum3,
-    TreadStateEnum4,
-    TrapReturnPCLo,
-    TrapReturnPCHi,
-    TrapReturnMask,
-    MExited,
-    MKill,
-    MActive,
-    MAtExit,
-    OptStack,
-    APICallDepth,
-    AtExitPCLo,
-    AtExitPCHi,
-}
-
-impl fmt::Display for BMovSrc {
-    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        match self {
-            BMovSrc::Barrier(bar) => bar.fmt(f),
-            BMovSrc::TreadStateEnum0 => write!(f, "THREAD_STATE_ENUM.0"),
-            BMovSrc::TreadStateEnum1 => write!(f, "THREAD_STATE_ENUM.1"),
-            BMovSrc::TreadStateEnum2 => write!(f, "THREAD_STATE_ENUM.2"),
-            BMovSrc::TreadStateEnum3 => write!(f, "THREAD_STATE_ENUM.3"),
-            BMovSrc::TreadStateEnum4 => write!(f, "THREAD_STATE_ENUM.4"),
-            BMovSrc::TrapReturnPCLo => write!(f, "TRAP_RETURN_PC.LO"),
-            BMovSrc::TrapReturnPCHi => write!(f, "TRAP_RETURN_PC.HI"),
-            BMovSrc::TrapReturnMask => write!(f, "TRAP_RETURN_MASK"),
-            BMovSrc::MExited => write!(f, "MEXITED"),
-            BMovSrc::MKill => write!(f, "MKILL"),
-            BMovSrc::MActive => write!(f, "MACTIVE"),
-            BMovSrc::MAtExit => write!(f, "MATEXIT"),
-            BMovSrc::OptStack => write!(f, "OPT_STACK"),
-            BMovSrc::APICallDepth => write!(f, "API_CALL_DEPTH"),
-            BMovSrc::AtExitPCLo => write!(f, "ATEXIT_PC.LO"),
-            BMovSrc::AtExitPCHi => write!(f, "ATEXIT_PC.HI"),
-        }
-    }
-}
-
 #[repr(C)]
 #[derive(SrcsAsSlice, DstsAsSlice)]
-pub struct OpBMov {
-    pub dst: Dst,
-    pub src: BMovSrc,
-    pub clear: bool,
+pub struct OpBClear {
+    pub dst: BarRef,
 }
 
-impl DisplayOp for OpBMov {
+impl DisplayOp for OpBClear {
     fn fmt_op(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        write!(f, "bmov.32")?;
-        if self.clear {
-            write!(f, ".clear")?;
-        }
-        write!(f, " {} {}", self.dst, self.src)
+        write!(f, "bclear")
     }
 }
-impl_display_for_op!(OpBMov);
+impl_display_for_op!(OpBClear);
 
 #[repr(C)]
 #[derive(SrcsAsSlice, DstsAsSlice)]
@@ -4347,7 +4296,7 @@ pub enum Op {
     LdTram(OpLdTram),
     CCtl(OpCCtl),
     MemBar(OpMemBar),
-    BMov(OpBMov),
+    BClear(OpBClear),
     Break(OpBreak),
     BSSy(OpBSSy),
     BSync(OpBSync),
@@ -4706,6 +4655,7 @@ impl Instr {
             | Op::MemBar(_)
             | Op::Kill(_)
             | Op::Nop(_)
+            | Op::BClear(_)
             | Op::Break(_)
             | Op::BSSy(_)
             | Op::BSync(_)
@@ -4716,7 +4666,6 @@ impl Instr {
             | Op::FSOut(_)
             | Op::Out(_)
             | Op::OutFinal(_) => false,
-            Op::BMov(op) => !op.clear,
             _ => true,
         }
     }
@@ -4786,7 +4735,7 @@ impl Instr {
             | Op::MemBar(_) => false,
 
             // Control-flow ops
-            Op::BMov(_) | Op::Break(_) | Op::BSSy(_) | Op::BSync(_) => false,
+            Op::BClear(_) | Op::Break(_) | Op::BSSy(_) | Op::BSync(_) => false,
             Op::Bra(_) | Op::Exit(_) => true,
             Op::WarpSync(_) => false,
 
diff --git a/src/nouveau/compiler/nak_legalize.rs 
b/src/nouveau/compiler/nak_legalize.rs
index c3a75f12edf..12cd51f5839 100644
--- a/src/nouveau/compiler/nak_legalize.rs
+++ b/src/nouveau/compiler/nak_legalize.rs
@@ -259,7 +259,7 @@ fn legalize_instr(b: &mut impl SSABuilder, instr: &mut 
Instr) {
             copy_src_if_not_reg(b, &mut op.handle, RegFile::GPR);
         }
         Op::Ldc(_) => (), // Nothing to do
-        Op::BMov(_) | Op::Break(_) | Op::BSSy(_) | Op::BSync(_) => (),
+        Op::Break(_) | Op::BSSy(_) | Op::BSync(_) => (),
         Op::Vote(_) => (), // Nothing to do
         Op::Copy(_) => (), // Nothing to do
         _ => {

Reply via email to