From 424ef4b26015e6b5b2b325be03c1c82561402e46 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Mon, 26 May 2025 16:52:35 +0200 Subject: [PATCH] nak/sm20: Add encodings for OpLdSharedLock and OpStSCheckUnlock Part-of: --- src/nouveau/compiler/nak/sm20.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/nouveau/compiler/nak/sm20.rs b/src/nouveau/compiler/nak/sm20.rs index 3126c30b55f..2f59826af8d 100644 --- a/src/nouveau/compiler/nak/sm20.rs +++ b/src/nouveau/compiler/nak/sm20.rs @@ -2061,6 +2061,21 @@ impl SM20Op for OpLdc { } } +impl SM20Op for OpLdSharedLock { + fn legalize(&mut self, b: &mut LegalizeBuilder) { + legalize_ext_instr(self, b); + } + + fn encode(&self, e: &mut SM20Encoder<'_>) { + e.set_opcode(SM20Unit::Mem, 0x2a); + e.set_mem_type(5..8, self.mem_type); + e.set_dst(14..20, &self.dst); + e.set_reg_src(20..26, &self.addr); + e.set_field(26..50, self.offset); + e.set_pred_dst2(8..10, 58..59, &self.locked); + } +} + impl SM20Op for OpSt { fn legalize(&mut self, b: &mut LegalizeBuilder) { legalize_ext_instr(self, b); @@ -2091,6 +2106,21 @@ impl SM20Op for OpSt { } } +impl SM20Op for OpStSCheckUnlock { + fn legalize(&mut self, b: &mut LegalizeBuilder) { + legalize_ext_instr(self, b); + } + + fn encode(&self, e: &mut SM20Encoder<'_>) { + e.set_opcode(SM20Unit::Mem, 0x2e); + e.set_mem_type(5..8, self.mem_type); + e.set_reg_src(14..20, &self.data); + e.set_reg_src(20..26, &self.addr); + e.set_field(26..50, self.offset); + e.set_pred_dst2(8..10, 58..59, &self.locked); + } +} + fn atom_src_as_ssa( b: &mut LegalizeBuilder, src: &Src, @@ -2660,7 +2690,9 @@ macro_rules! as_sm20_op_match { Op::Txq(op) => op, Op::Ld(op) => op, Op::Ldc(op) => op, + Op::LdSharedLock(op) => op, Op::St(op) => op, + Op::StSCheckUnlock(op) => op, Op::Atom(op) => op, Op::ALd(op) => op, Op::ASt(op) => op,