aco: fix subdword copies on GFX6-GFX7
SDWA is only GFX8+. Use v_mov_b32 since the upper 16 bits don't matter. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5227>
This commit is contained in:
@@ -382,13 +382,17 @@ public:
|
||||
} else if (op.bytes() > 2) {
|
||||
return pseudo(aco_opcode::p_create_vector, dst, op);
|
||||
} else if (dst.regClass().is_subdword()) {
|
||||
aco_ptr<SDWA_instruction> sdwa{create_instruction<SDWA_instruction>(aco_opcode::v_mov_b32, asSDWA(Format::VOP1), 1, 1)};
|
||||
sdwa->operands[0] = op;
|
||||
sdwa->definitions[0] = dst;
|
||||
sdwa->sel[0] = op.bytes() == 1 ? sdwa_ubyte : sdwa_uword;
|
||||
sdwa->dst_sel = dst.bytes() == 1 ? sdwa_ubyte : sdwa_uword;
|
||||
sdwa->dst_preserve = true;
|
||||
return insert(std::move(sdwa));
|
||||
if (program->chip_class >= GFX8) {
|
||||
aco_ptr<SDWA_instruction> sdwa{create_instruction<SDWA_instruction>(aco_opcode::v_mov_b32, asSDWA(Format::VOP1), 1, 1)};
|
||||
sdwa->operands[0] = op;
|
||||
sdwa->definitions[0] = dst;
|
||||
sdwa->sel[0] = op.bytes() == 1 ? sdwa_ubyte : sdwa_uword;
|
||||
sdwa->dst_sel = dst.bytes() == 1 ? sdwa_ubyte : sdwa_uword;
|
||||
sdwa->dst_preserve = true;
|
||||
return insert(std::move(sdwa));
|
||||
} else {
|
||||
return vop1(aco_opcode::v_mov_b32, dst, op);
|
||||
}
|
||||
} else {
|
||||
unreachable("Unhandled case in bld.copy()");
|
||||
}
|
||||
|
Reference in New Issue
Block a user