nak/sm50 add support for suld
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26957>
This commit is contained in:

committed by
Marge Bot

parent
458d4150df
commit
9f54d269c2
@@ -1917,6 +1917,37 @@ impl SM50Instr {
|
|||||||
// TODO: subop?
|
// 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(
|
pub fn encode(
|
||||||
instr: &Instr,
|
instr: &Instr,
|
||||||
sm: u8,
|
sm: u8,
|
||||||
@@ -1981,6 +2012,7 @@ impl SM50Instr {
|
|||||||
Op::Bra(op) => si.encode_bra(&op, ip, labels),
|
Op::Bra(op) => si.encode_bra(&op, ip, labels),
|
||||||
Op::Exit(op) => si.encode_exit(&op),
|
Op::Exit(op) => si.encode_exit(&op),
|
||||||
Op::Bar(op) => si.encode_bar(&op),
|
Op::Bar(op) => si.encode_bar(&op),
|
||||||
|
Op::SuLd(op) => si.encode_suld(&op),
|
||||||
_ => panic!("Unhandled instruction {}", instr.op),
|
_ => panic!("Unhandled instruction {}", instr.op),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -343,6 +343,10 @@ fn legalize_sm50_instr(
|
|||||||
Op::Ldc(_) => (), // Nothing to do
|
Op::Ldc(_) => (), // Nothing to do
|
||||||
Op::Copy(_) => (), // Nothing to do
|
Op::Copy(_) => (), // Nothing to do
|
||||||
Op::INeg(_) => (), /* we unconditionally lower this */
|
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();
|
let src_types = instr.src_types();
|
||||||
for (i, src) in instr.srcs_mut().iter_mut().enumerate() {
|
for (i, src) in instr.srcs_mut().iter_mut().enumerate() {
|
||||||
|
Reference in New Issue
Block a user