aco: fix p_insert lowering with 16bit sources
The previous lowering only wrote a single byte.
Fixes: 2f94353735
('aco: add p_extract/p_insert')
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12640>
This commit is contained in:
parent
cc62fbed6d
commit
cc4682ed47
|
@ -2153,16 +2153,11 @@ lower_to_hw_instr(Program* program)
|
|||
}
|
||||
} else {
|
||||
assert(dst.regClass() == v2b);
|
||||
aco_ptr<SDWA_instruction> sdwa{create_instruction<SDWA_instruction>(
|
||||
aco_opcode::v_mov_b32,
|
||||
(Format)((uint16_t)Format::VOP1 | (uint16_t)Format::SDWA), 1, 1)};
|
||||
sdwa->operands[0] = op;
|
||||
sdwa->definitions[0] =
|
||||
Definition(dst.physReg().advance(-dst.physReg().byte()), v1);
|
||||
sdwa->sel[0] = sdwa_uword;
|
||||
sdwa->dst_sel = sdwa_ubyte0 + dst.physReg().byte() + index;
|
||||
sdwa->dst_preserve = 1;
|
||||
bld.insert(std::move(sdwa));
|
||||
Operand sdwa_op = Operand(op.physReg().advance(-op.physReg().byte()),
|
||||
RegClass::get(op.regClass().type(), 4));
|
||||
bld.vop2_sdwa(aco_opcode::v_lshlrev_b32, dst, Operand::c32(offset), sdwa_op)
|
||||
.instr->sdwa()
|
||||
.sel[1] = sdwa_ubyte0 + op.physReg().byte();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -640,15 +640,15 @@ BEGIN_TEST(to_hw_instr.insert)
|
|||
//>> p_unit_test 2
|
||||
bld.pseudo(aco_opcode::p_unit_test, Operand::c32(2u));
|
||||
//~gfx7! v2b: %_:v[0][0:16] = v_bfe_u32 %_:v[1][0:16], 0, 8
|
||||
//~gfx[^7]! v1: %_:v[0] = v_mov_b32 %_:v[1][0:16] dst_sel:ubyte0 dst_preserve
|
||||
//~gfx[^7]! v2b: %0:v[0][0:16] = v_lshlrev_b32 0, %0:v[1][0:7] dst_preserve
|
||||
INS(0, 0)
|
||||
//~gfx[^7]! v1: %_:v[0] = v_mov_b32 %_:v[1][0:16] dst_sel:ubyte2 dst_preserve
|
||||
//~gfx[^7]! v2b: %0:v[0][16:32] = v_lshlrev_b32 0, %0:v[1][0:7] dst_preserve
|
||||
if (i != GFX7)
|
||||
INS(0, 2)
|
||||
//~gfx7! v2b: %_:v[0][0:16] = v_lshlrev_b32 8, %_:v[1][0:16]
|
||||
//~gfx[^7]! v1: %_:v[0] = v_mov_b32 %_:v[1][0:16] dst_sel:ubyte1 dst_preserve
|
||||
//~gfx[^7]! v2b: %0:v[0][0:16] = v_lshlrev_b32 8, %0:v[1][0:7] dst_preserve
|
||||
INS(1, 0)
|
||||
//~gfx[^7]! v1: %_:v[0] = v_mov_b32 %_:v[1][0:16] dst_sel:ubyte3 dst_preserve
|
||||
//~gfx[^7]! v2b: %0:v[0][16:32] = v_lshlrev_b32 8, %0:v[1][0:7] dst_preserve
|
||||
if (i != GFX7)
|
||||
INS(1, 2)
|
||||
|
||||
|
|
Loading…
Reference in New Issue