mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 04:30:10 +01:00
aco: fix disassembly of writelane instructions.
ACO writes an unused 3rd operand for internal usage which makes LLVM recoginize it as illegal instruction. Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
This commit is contained in:
parent
6fc9ddfef8
commit
23319add93
1 changed files with 7 additions and 1 deletions
|
|
@ -51,13 +51,19 @@ void print_asm(Program *program, std::vector<uint32_t>& binary,
|
|||
next_block++;
|
||||
}
|
||||
|
||||
/* mask out src2 on v_writelane_b32 */
|
||||
if (((program->chip_class == GFX8 || program->chip_class == GFX9) && (binary[pos] & 0xffff8000) == 0xd28a0000) ||
|
||||
(program->chip_class == GFX10 && (binary[pos] & 0xffff8000) == 0xd7610000)) {
|
||||
binary[pos+1] = binary[pos+1] & 0xF803FFFF;
|
||||
}
|
||||
|
||||
size_t l = LLVMDisasmInstruction(disasm, (uint8_t *) &binary[pos],
|
||||
(exec_size - pos) * sizeof(uint32_t), pos * 4,
|
||||
outline, sizeof(outline));
|
||||
|
||||
size_t new_pos;
|
||||
const int align_width = 60;
|
||||
if (program->chip_class == GFX9 && !l && ((binary[pos] & 0xffff8000) == 0xd1348000)) { /* not actually an invalid instruction */
|
||||
if (!l && program->chip_class == GFX9 && ((binary[pos] & 0xffff8000) == 0xd1348000)) { /* not actually an invalid instruction */
|
||||
out << std::left << std::setw(align_width) << std::setfill(' ') << "\tv_add_u32_e64 + clamp";
|
||||
new_pos = pos + 2;
|
||||
} else if (!l) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue