From a6e1167a8398a4f3f13d86090a2f4eb87198c7ef Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Sat, 22 Apr 2023 18:23:03 -0500 Subject: [PATCH] nak: Don't allow r255 in texture or surface ops Part-of: --- src/nouveau/compiler/nak_legalize.rs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/nouveau/compiler/nak_legalize.rs b/src/nouveau/compiler/nak_legalize.rs index 39a250f1104..c9f5121d195 100644 --- a/src/nouveau/compiler/nak_legalize.rs +++ b/src/nouveau/compiler/nak_legalize.rs @@ -66,6 +66,12 @@ impl<'a> LegalizeInstr<'a> { } } + pub fn mov_src_if_not_ssa(&mut self, src: &mut Src, file: RegFile) { + if src.as_ssa().is_none() { + self.mov_src(src, file); + } + } + pub fn swap_srcs_if_not_reg(&mut self, x: &mut Src, y: &mut Src) { if !src_is_reg(x) && src_is_reg(y) { std::mem::swap(x, y); @@ -188,20 +194,21 @@ impl<'a> LegalizeInstr<'a> { Op::St(op) => { self.mov_src_if_not_reg(&mut op.data, RegFile::GPR); } - Op::ALd(_) - | Op::ASt(_) - | Op::Tex(_) + Op::ALd(_) | Op::ASt(_) | Op::Ld(_) | Op::St(_) => { + for src in instr.srcs_mut() { + self.mov_src_if_not_reg(src, RegFile::GPR); + } + } + Op::Tex(_) | Op::Tld(_) | Op::Tld4(_) | Op::Tmml(_) | Op::Txd(_) | Op::Txq(_) | Op::SuLd(_) - | Op::SuSt(_) - | Op::Ld(_) - | Op::St(_) => { + | Op::SuSt(_) => { for src in instr.srcs_mut() { - self.mov_src_if_not_reg(src, RegFile::GPR); + self.mov_src_if_not_ssa(src, RegFile::GPR); } } _ => (),