mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 11:28:05 +02:00
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:
parent
9541036507
commit
f26228fca3
2 changed files with 18 additions and 9 deletions
|
|
@ -147,7 +147,13 @@ impl SM75Instr {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_pred_dst(&mut self, range: Range<usize>, dst: Dst) {
|
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) {
|
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_dst(81..84, op.overflow);
|
||||||
self.set_pred_src(84..87, -1, op.carry[1]);
|
self.set_pred_src(84..87, -1, op.carry);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_int_cmp_op(&mut self, range: Range<usize>, op: IntCmpOp) {
|
fn set_int_cmp_op(&mut self, range: Range<usize>, op: IntCmpOp) {
|
||||||
|
|
|
||||||
|
|
@ -885,21 +885,22 @@ impl fmt::Display for OpFSetP {
|
||||||
#[derive(SrcsAsSlice, DstsAsSlice)]
|
#[derive(SrcsAsSlice, DstsAsSlice)]
|
||||||
pub struct OpIAdd3 {
|
pub struct OpIAdd3 {
|
||||||
pub dst: Dst,
|
pub dst: Dst,
|
||||||
|
pub overflow: Dst,
|
||||||
pub srcs: [Src; 3],
|
pub srcs: [Src; 3],
|
||||||
pub carry: [Src; 2],
|
pub carry: Src,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Display for OpIAdd3 {
|
impl fmt::Display for OpIAdd3 {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
write!(
|
write!(
|
||||||
f,
|
f,
|
||||||
"IADD3 {} {{ {}, {}, {}, {}, {} }}",
|
"IADD3 {{ {} {} }} {{ {}, {}, {}, {} }}",
|
||||||
self.dst,
|
self.dst,
|
||||||
|
self.overflow,
|
||||||
self.srcs[0],
|
self.srcs[0],
|
||||||
self.srcs[1],
|
self.srcs[1],
|
||||||
self.srcs[2],
|
self.srcs[2],
|
||||||
self.carry[0],
|
self.carry,
|
||||||
self.carry[1]
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1471,8 +1472,9 @@ impl Instr {
|
||||||
pub fn new_iadd(dst: Dst, x: Src, y: Src) -> Instr {
|
pub fn new_iadd(dst: Dst, x: Src, y: Src) -> Instr {
|
||||||
Instr::new(Op::IAdd3(OpIAdd3 {
|
Instr::new(Op::IAdd3(OpIAdd3 {
|
||||||
dst: dst,
|
dst: dst,
|
||||||
|
overflow: Dst::Zero,
|
||||||
srcs: [Src::new_zero(), x, y],
|
srcs: [Src::new_zero(), x, y],
|
||||||
carry: [Src::new_zero(); 2],
|
carry: Src::new_zero(),
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1783,8 +1785,9 @@ impl Shader {
|
||||||
Op::IMov(mov) => {
|
Op::IMov(mov) => {
|
||||||
vec![Instr::new(Op::IAdd3(OpIAdd3 {
|
vec![Instr::new(Op::IAdd3(OpIAdd3 {
|
||||||
dst: mov.dst,
|
dst: mov.dst,
|
||||||
|
overflow: Dst::Zero,
|
||||||
srcs: [Src::new_zero(), mov.src, Src::new_zero()],
|
srcs: [Src::new_zero(), mov.src, Src::new_zero()],
|
||||||
carry: [Src::new_zero(); 2],
|
carry: Src::new_zero(),
|
||||||
}))]
|
}))]
|
||||||
}
|
}
|
||||||
Op::Vec(vec) => {
|
Op::Vec(vec) => {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue