mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-23 12:40:29 +01:00
nak: Rework the SM50 encoding of isetp
Drop the ALU stuff and hand-encode it. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26114>
This commit is contained in:
parent
e404877a02
commit
bbd2de34c5
1 changed files with 24 additions and 27 deletions
|
|
@ -1067,29 +1067,32 @@ impl SM50Instr {
|
|||
}
|
||||
|
||||
fn encode_isetp(&mut self, op: &OpISetP) {
|
||||
let src_modifier = Some(ALUSrcsModifier {
|
||||
src0_opt: None,
|
||||
src1_opt: None,
|
||||
src2_opt: None,
|
||||
});
|
||||
let encoding_info = ALUEncodingInfo {
|
||||
opcode: 0x60,
|
||||
encoding_type: ALUEncodingType::Variant3,
|
||||
reg_modifier: src_modifier,
|
||||
imm24_modifier: src_modifier,
|
||||
cbuf_modifier: src_modifier,
|
||||
imm32_behavior_opt: None,
|
||||
};
|
||||
assert!(op.srcs[0].src_mod.is_none());
|
||||
assert!(op.srcs[1].src_mod.is_none());
|
||||
|
||||
self.encode_alu(
|
||||
encoding_info,
|
||||
None,
|
||||
ALUSrc::from_src(&op.srcs[0].into()),
|
||||
ALUSrc::from_src(&op.srcs[1].into()),
|
||||
ALUSrc::None,
|
||||
);
|
||||
match &op.srcs[1].src_ref {
|
||||
SrcRef::Zero | SrcRef::Reg(_) => {
|
||||
self.set_opcode(0x5b60);
|
||||
self.set_reg_src(20..28, op.srcs[1]);
|
||||
}
|
||||
SrcRef::Imm32(i) => {
|
||||
self.set_opcode(0x3660);
|
||||
self.set_src_imm_i20(20..39, 56, *i);
|
||||
}
|
||||
SrcRef::CBuf(cb) => {
|
||||
self.set_opcode(0x4b60);
|
||||
self.set_src_cb(20..39, cb);
|
||||
}
|
||||
_ => panic!("Unsupported src type"),
|
||||
}
|
||||
|
||||
self.set_pred_src(16..19, 19, SrcRef::True.into());
|
||||
self.set_pred_dst(0..3, Dst::None); /* dst1 */
|
||||
self.set_pred_dst(3..6, op.dst);
|
||||
self.set_reg_src(8..16, op.srcs[0]);
|
||||
self.set_pred_src(39..42, 42, op.accum);
|
||||
|
||||
self.set_bit(43, false); /* .X */
|
||||
self.set_pred_set_op(45..47, op.set_op);
|
||||
|
||||
self.set_field(
|
||||
48..49,
|
||||
|
|
@ -1098,13 +1101,7 @@ impl SM50Instr {
|
|||
IntCmpType::I32 => 1_u32,
|
||||
},
|
||||
);
|
||||
self.set_pred_set_op(45..47, op.set_op);
|
||||
self.set_int_cmp_op(49..52, op.cmp_op);
|
||||
|
||||
self.set_pred_dst(3..6, op.dst);
|
||||
self.set_pred_dst(0..3, Dst::None); /* dst1 */
|
||||
|
||||
self.set_pred_src(39..42, 42, op.accum);
|
||||
}
|
||||
|
||||
fn encode_sust(&mut self, op: &OpSuSt) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue