nak/sm50: Set the not bit for OpLop2::srcs[0]
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30402>
This commit is contained in:

committed by
Marge Bot

parent
61076b04a7
commit
1a6ca8e601
@@ -747,13 +747,25 @@ fn test_op_lop2() {
|
||||
let logic_ops =
|
||||
[LogicOp2::And, LogicOp2::Or, LogicOp2::Xor, LogicOp2::PassB];
|
||||
|
||||
let src_mods = [
|
||||
(SrcMod::None, SrcMod::None),
|
||||
(SrcMod::BNot, SrcMod::None),
|
||||
(SrcMod::None, SrcMod::BNot),
|
||||
(SrcMod::BNot, SrcMod::BNot),
|
||||
];
|
||||
|
||||
for logic_op in logic_ops {
|
||||
let op = OpLop2 {
|
||||
dst: Dst::None,
|
||||
srcs: [0.into(), 0.into()],
|
||||
op: logic_op,
|
||||
};
|
||||
test_foldable_op(op);
|
||||
for (x_mod, y_mod) in src_mods {
|
||||
let mut op = OpLop2 {
|
||||
dst: Dst::None,
|
||||
srcs: [0.into(), 0.into()],
|
||||
op: logic_op,
|
||||
};
|
||||
op.srcs[0].src_mod = x_mod;
|
||||
op.srcs[1].src_mod = y_mod;
|
||||
|
||||
test_foldable_op(op);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1571,6 +1571,15 @@ impl OpFoldData<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_u32_bnot_src(&self, op: &impl SrcsAsSlice, src: &Src) -> u32 {
|
||||
let x = self.get_u32_src(op, src);
|
||||
if src.src_mod.is_bnot() {
|
||||
!x
|
||||
} else {
|
||||
x
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_carry_src(&self, op: &impl SrcsAsSlice, src: &Src) -> bool {
|
||||
assert!(src.src_ref.as_ssa().is_some());
|
||||
let i = op.src_idx(src);
|
||||
@@ -3773,8 +3782,8 @@ impl DisplayOp for OpLop2 {
|
||||
impl Foldable for OpLop2 {
|
||||
fn fold(&self, _sm: &dyn ShaderModel, f: &mut OpFoldData<'_>) {
|
||||
let srcs = [
|
||||
f.get_u32_src(self, &self.srcs[0]),
|
||||
f.get_u32_src(self, &self.srcs[1]),
|
||||
f.get_u32_bnot_src(self, &self.srcs[0]),
|
||||
f.get_u32_bnot_src(self, &self.srcs[1]),
|
||||
];
|
||||
let dst = match self.op {
|
||||
LogicOp2::And => srcs[0] & srcs[1],
|
||||
|
@@ -1505,7 +1505,7 @@ impl SM50Op for OpLop2 {
|
||||
}
|
||||
|
||||
e.set_dst(self.dst);
|
||||
e.set_reg_src_ref(8..16, self.srcs[0].src_ref);
|
||||
e.set_reg_bnot_src(8..16, 39, self.srcs[0]);
|
||||
|
||||
e.set_field(
|
||||
41..43,
|
||||
|
Reference in New Issue
Block a user