diff --git a/src/nouveau/compiler/nak/ir.rs b/src/nouveau/compiler/nak/ir.rs index 3719bfca79d..861cb033673 100644 --- a/src/nouveau/compiler/nak/ir.rs +++ b/src/nouveau/compiler/nak/ir.rs @@ -3314,7 +3314,7 @@ pub struct OpShf { #[src_type(ALU)] pub high: Src, - #[src_type(GPR)] + #[src_type(ALU)] pub shift: Src, pub right: bool, diff --git a/src/nouveau/compiler/nak/legalize.rs b/src/nouveau/compiler/nak/legalize.rs index ca829197e3a..a9e0e37b702 100644 --- a/src/nouveau/compiler/nak/legalize.rs +++ b/src/nouveau/compiler/nak/legalize.rs @@ -691,7 +691,12 @@ fn legalize_sm70_instr( Op::PopC(_) => (), Op::Shf(op) => { copy_alu_src_if_not_reg(b, &mut op.low, SrcType::ALU); - copy_alu_src_if_not_reg(b, &mut op.high, SrcType::ALU); + copy_alu_src_if_both_not_reg( + b, + &op.shift, + &mut op.high, + SrcType::ALU, + ); } Op::F2F(_) | Op::F2I(_) | Op::I2F(_) | Op::Mov(_) | Op::FRnd(_) => (), Op::Prmt(op) => {