mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 02:10:11 +01:00
nak: Implement iadd and ishl
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
This commit is contained in:
parent
241caaf5ff
commit
93eb2f884a
3 changed files with 37 additions and 0 deletions
|
|
@ -197,6 +197,22 @@ fn encode_mov(bs: &mut impl BitSetMut, instr: &Instr) {
|
|||
bs.set_field(72..76, 0xf_u32 /* TODO: Quad lanes */);
|
||||
}
|
||||
|
||||
fn encode_iadd3(bs: &mut impl BitSetMut, instr: &Instr) {
|
||||
encode_alu(bs, instr, 0x010);
|
||||
|
||||
bs.set_field(81..84, 7_u32); /* pred */
|
||||
bs.set_field(84..87, 7_u32); /* pred */
|
||||
}
|
||||
|
||||
fn encode_shl(bs: &mut impl BitSetMut, instr: &Instr) {
|
||||
encode_alu(bs, instr, 0x019);
|
||||
|
||||
bs.set_field(73..75, 3_u32 /* U32 */);
|
||||
bs.set_bit(75, true /* W? */);
|
||||
bs.set_bit(76, false /* Left */);
|
||||
bs.set_bit(80, false /* HI */);
|
||||
}
|
||||
|
||||
fn encode_ald(bs: &mut impl BitSetMut, instr: &Instr, attr: &AttrAccess) {
|
||||
encode_instr_base(bs, &instr, 0x321);
|
||||
|
||||
|
|
@ -299,6 +315,8 @@ pub fn encode_instr(instr: &Instr) -> [u32; 4] {
|
|||
match &instr.op {
|
||||
Opcode::S2R(i) => encode_s2r(&mut bs, instr, *i),
|
||||
Opcode::MOV => encode_mov(&mut bs, instr),
|
||||
Opcode::IADD3 => encode_iadd3(&mut bs, instr),
|
||||
Opcode::SHL => encode_shl(&mut bs, instr),
|
||||
Opcode::ALD(a) => encode_ald(&mut bs, instr, &a),
|
||||
Opcode::AST(a) => encode_ast(&mut bs, instr, &a),
|
||||
Opcode::LD(a) => encode_ld(&mut bs, instr, a),
|
||||
|
|
|
|||
|
|
@ -85,6 +85,12 @@ impl<'a> ShaderFromNir<'a> {
|
|||
nir_op_fadd => {
|
||||
self.instrs.push(Instr::new_fadd(dst, srcs[0], srcs[1]));
|
||||
}
|
||||
nir_op_iadd => {
|
||||
self.instrs.push(Instr::new_iadd(dst, srcs[0], srcs[1]));
|
||||
}
|
||||
nir_op_ishl => {
|
||||
self.instrs.push(Instr::new_shl(dst, srcs[0], srcs[1]));
|
||||
}
|
||||
nir_op_mov => {
|
||||
self.instrs.push(Instr::new_mov(dst, srcs[0]));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -628,6 +628,14 @@ impl Instr {
|
|||
Instr::new(Opcode::FADD, slice::from_ref(&dst), &[x, y])
|
||||
}
|
||||
|
||||
pub fn new_iadd(dst: Dst, x: Src, y: Src) -> Instr {
|
||||
Instr::new(Opcode::IADD3, slice::from_ref(&dst), &[Src::Zero, x, y])
|
||||
}
|
||||
|
||||
pub fn new_shl(dst: Dst, x: Src, shift: Src) -> Instr {
|
||||
Instr::new(Opcode::SHL, slice::from_ref(&dst), &[x, shift])
|
||||
}
|
||||
|
||||
pub fn new_s2r(dst: Dst, idx: u8) -> Instr {
|
||||
Instr::new(Opcode::S2R(idx), slice::from_ref(&dst), &[])
|
||||
}
|
||||
|
|
@ -779,6 +787,9 @@ pub enum Opcode {
|
|||
FMNMX,
|
||||
FMUL,
|
||||
|
||||
IADD3,
|
||||
SHL,
|
||||
|
||||
S2R(u8),
|
||||
MOV,
|
||||
VEC,
|
||||
|
|
@ -803,6 +814,8 @@ impl fmt::Display for Opcode {
|
|||
Opcode::FFMA => write!(f, "FFMA"),
|
||||
Opcode::FMNMX => write!(f, "FMNMX"),
|
||||
Opcode::FMUL => write!(f, "FMUL"),
|
||||
Opcode::IADD3 => write!(f, "IADD3"),
|
||||
Opcode::SHL => write!(f, "SHL"),
|
||||
Opcode::S2R(i) => write!(f, "S2R({})", i),
|
||||
Opcode::MOV => write!(f, "MOV"),
|
||||
Opcode::VEC => write!(f, "VEC"),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue