From 85462f74553cd835e9ba4c954330499cee832893 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Tue, 5 Dec 2023 23:28:52 -0600 Subject: [PATCH] nak: Legalize immediates with source modifiers We can just apply the source modifier to the immediate. Also, make IAdd3X have I32 sources. They do get a bit odd in the high form but Part-of: --- src/nouveau/compiler/nak_legalize.rs | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/nouveau/compiler/nak_legalize.rs b/src/nouveau/compiler/nak_legalize.rs index 2d61bf29a39..ee1d0a8c783 100644 --- a/src/nouveau/compiler/nak_legalize.rs +++ b/src/nouveau/compiler/nak_legalize.rs @@ -323,6 +323,37 @@ fn legalize_instr( } } + let src_types = instr.src_types(); + for (i, src) in instr.srcs_mut().iter_mut().enumerate() { + if let SrcRef::Imm32(u) = &mut src.src_ref { + *u = match src_types[i] { + SrcType::F32 | SrcType::F64 => match src.src_mod { + SrcMod::None => *u, + SrcMod::FAbs => *u & !(1_u32 << 31), + SrcMod::FNeg => *u ^ !(1_u32 << 31), + SrcMod::FNegAbs => *u | !(1_u32 << 31), + _ => panic!("Not a float source modifier"), + + } + SrcType::I32 => match src.src_mod { + SrcMod::None => *u, + SrcMod::INeg => -(*u as i32) as u32, + _ => panic!("Not an integer source modifier"), + } + SrcType::B32 => match src.src_mod { + SrcMod::None => *u, + SrcMod::BNot => !*u, + _ => panic!("Not a bitwise source modifier"), + } + _ => { + assert!(src.src_mod.is_none()); + *u + } + }; + src.src_mod = SrcMod::None; + } + } + let mut vec_src_map: HashMap = HashMap::new(); let mut vec_comps = HashSet::new(); for src in instr.srcs_mut() {