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:
Faith Ekstrand
2024-07-27 02:37:40 -05:00
committed by Marge Bot
parent 61076b04a7
commit 1a6ca8e601
3 changed files with 30 additions and 9 deletions

View File

@@ -747,16 +747,28 @@ 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 {
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);
}
}
}
}
#[test]
fn test_op_lop3() {

View File

@@ -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],

View File

@@ -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,