intel/eu: Just modify the offset in brw_broadcast
This means we have to drop const from a variable but it also means that 100% of the code which deals with the offset limit is in one place. Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
This commit is contained in:
@@ -3404,7 +3404,7 @@ brw_broadcast(struct brw_codegen *p,
|
|||||||
if (align1) {
|
if (align1) {
|
||||||
const struct brw_reg addr =
|
const struct brw_reg addr =
|
||||||
retype(brw_address_reg(0), BRW_REGISTER_TYPE_UD);
|
retype(brw_address_reg(0), BRW_REGISTER_TYPE_UD);
|
||||||
const unsigned offset = src.nr * REG_SIZE + src.subnr;
|
unsigned offset = src.nr * REG_SIZE + src.subnr;
|
||||||
/* Limit in bytes of the signed indirect addressing immediate. */
|
/* Limit in bytes of the signed indirect addressing immediate. */
|
||||||
const unsigned limit = 512;
|
const unsigned limit = 512;
|
||||||
|
|
||||||
@@ -3422,15 +3422,16 @@ brw_broadcast(struct brw_codegen *p,
|
|||||||
* addressing immediate, account for the difference if the source
|
* addressing immediate, account for the difference if the source
|
||||||
* register is above this limit.
|
* register is above this limit.
|
||||||
*/
|
*/
|
||||||
if (offset >= limit)
|
if (offset >= limit) {
|
||||||
brw_ADD(p, addr, addr, brw_imm_ud(offset - offset % limit));
|
brw_ADD(p, addr, addr, brw_imm_ud(offset - offset % limit));
|
||||||
|
offset = offset % limit;
|
||||||
|
}
|
||||||
|
|
||||||
brw_pop_insn_state(p);
|
brw_pop_insn_state(p);
|
||||||
|
|
||||||
/* Use indirect addressing to fetch the specified component. */
|
/* Use indirect addressing to fetch the specified component. */
|
||||||
brw_MOV(p, dst,
|
brw_MOV(p, dst,
|
||||||
retype(brw_vec1_indirect(addr.subnr, offset % limit),
|
retype(brw_vec1_indirect(addr.subnr, offset), src.type));
|
||||||
src.type));
|
|
||||||
} else {
|
} else {
|
||||||
/* In SIMD4x2 mode the index can be either zero or one, replicate it
|
/* In SIMD4x2 mode the index can be either zero or one, replicate it
|
||||||
* to all bits of a flag register,
|
* to all bits of a flag register,
|
||||||
|
Reference in New Issue
Block a user