nak/sm50 add support for suld

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26957>
This commit is contained in:
Daniel Almeida
2023-12-15 08:21:07 -06:00
committed by Marge Bot
parent 458d4150df
commit 9f54d269c2
2 changed files with 36 additions and 0 deletions

View File

@@ -1917,6 +1917,37 @@ impl SM50Instr {
// TODO: subop?
}
fn encode_suld(&mut self, op: &OpSuLd) {
self.set_opcode(0xeb00);
assert!(op.mask == 0x1 || op.mask == 0x3 || op.mask == 0xf);
self.set_field(20..24, op.mask);
self.set_image_dim(33..36, op.image_dim);
// mem_eviction_policy not a thing for sm < 70
let scope = match op.mem_order {
MemOrder::Constant => MemScope::System,
MemOrder::Weak => MemScope::CTA,
MemOrder::Strong(s) => s,
};
self.set_field(
24..26,
match scope {
MemScope::CTA => 0_u8,
/* SM => 1_u8, */
MemScope::GPU => 2_u8,
MemScope::System => 3_u8,
},
);
self.set_dst(op.dst);
self.set_reg_src(8..16, op.coord);
self.set_reg_src(39..47, op.handle);
}
pub fn encode(
instr: &Instr,
sm: u8,
@@ -1981,6 +2012,7 @@ impl SM50Instr {
Op::Bra(op) => si.encode_bra(&op, ip, labels),
Op::Exit(op) => si.encode_exit(&op),
Op::Bar(op) => si.encode_bar(&op),
Op::SuLd(op) => si.encode_suld(&op),
_ => panic!("Unhandled instruction {}", instr.op),
}

View File

@@ -343,6 +343,10 @@ fn legalize_sm50_instr(
Op::Ldc(_) => (), // Nothing to do
Op::Copy(_) => (), // Nothing to do
Op::INeg(_) => (), /* we unconditionally lower this */
Op::SuLd(op) => {
copy_alu_src_if_not_reg(b, &mut op.handle, SrcType::GPR);
copy_alu_src_if_not_reg(b, &mut op.coord, SrcType::GPR);
}
_ => {
let src_types = instr.src_types();
for (i, src) in instr.srcs_mut().iter_mut().enumerate() {