aco: fix encoding of certain s_setreg_imm32_b32 instructions
If the mode is too small, the operand will be an inline constant and the literal dword won't be written. Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5245>
This commit is contained in:
parent
82c265a514
commit
a02e7f6799
|
@ -1658,7 +1658,9 @@ void lower_to_hw_instr(Program* program)
|
|||
assert(block->kind & block_kind_top_level);
|
||||
uint32_t mode = block->fp_mode.val;
|
||||
/* "((size - 1) << 11) | register" (MODE is encoded as register 1) */
|
||||
bld.sopk(aco_opcode::s_setreg_imm32_b32, Operand(mode), (7 << 11) | 1);
|
||||
Instruction *instr = bld.sopk(aco_opcode::s_setreg_imm32_b32, Operand(mode), (7 << 11) | 1).instr;
|
||||
/* has to be a literal */
|
||||
instr->operands[0].setFixed(PhysReg{255});
|
||||
}
|
||||
|
||||
for (size_t j = 0; j < block->instructions.size(); j++) {
|
||||
|
|
Loading…
Reference in New Issue