nak: One of the predicates in IADD3 is a destination

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
This commit is contained in:
Faith Ekstrand 2023-01-30 20:53:19 -06:00 committed by Marge Bot
parent 9541036507
commit f26228fca3
2 changed files with 18 additions and 9 deletions

View file

@ -147,7 +147,13 @@ impl SM75Instr {
}
fn set_pred_dst(&mut self, range: Range<usize>, dst: Dst) {
self.set_pred_reg(range, *dst.as_reg().unwrap());
match dst {
Dst::Zero => {
self.set_pred_reg(range, RegRef::zero(RegFile::Pred, 1));
}
Dst::Reg(reg) => self.set_pred_reg(range, reg),
_ => panic!("Not a register"),
}
}
fn set_pred_src(&mut self, range: Range<usize>, not_bit: isize, src: Src) {
@ -437,8 +443,8 @@ impl SM75Instr {
);
}
self.set_pred_src(81..84, -1, op.carry[0]);
self.set_pred_src(84..87, -1, op.carry[1]);
self.set_pred_dst(81..84, op.overflow);
self.set_pred_src(84..87, -1, op.carry);
}
fn set_int_cmp_op(&mut self, range: Range<usize>, op: IntCmpOp) {

View file

@ -885,21 +885,22 @@ impl fmt::Display for OpFSetP {
#[derive(SrcsAsSlice, DstsAsSlice)]
pub struct OpIAdd3 {
pub dst: Dst,
pub overflow: Dst,
pub srcs: [Src; 3],
pub carry: [Src; 2],
pub carry: Src,
}
impl fmt::Display for OpIAdd3 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"IADD3 {} {{ {}, {}, {}, {}, {} }}",
"IADD3 {{ {} {} }} {{ {}, {}, {}, {} }}",
self.dst,
self.overflow,
self.srcs[0],
self.srcs[1],
self.srcs[2],
self.carry[0],
self.carry[1]
self.carry,
)
}
}
@ -1471,8 +1472,9 @@ impl Instr {
pub fn new_iadd(dst: Dst, x: Src, y: Src) -> Instr {
Instr::new(Op::IAdd3(OpIAdd3 {
dst: dst,
overflow: Dst::Zero,
srcs: [Src::new_zero(), x, y],
carry: [Src::new_zero(); 2],
carry: Src::new_zero(),
}))
}
@ -1783,8 +1785,9 @@ impl Shader {
Op::IMov(mov) => {
vec![Instr::new(Op::IAdd3(OpIAdd3 {
dst: mov.dst,
overflow: Dst::Zero,
srcs: [Src::new_zero(), mov.src, Src::new_zero()],
carry: [Src::new_zero(); 2],
carry: Src::new_zero(),
}))]
}
Op::Vec(vec) => {