From 068beb41d831919cb0fb82d01daaee1c57679803 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 17 Oct 2017 14:16:31 -0700 Subject: [PATCH] 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 --- src/intel/compiler/brw_eu_emit.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/intel/compiler/brw_eu_emit.c b/src/intel/compiler/brw_eu_emit.c index e10b1432b5e..a18cfa4239f 100644 --- a/src/intel/compiler/brw_eu_emit.c +++ b/src/intel/compiler/brw_eu_emit.c @@ -3404,7 +3404,7 @@ brw_broadcast(struct brw_codegen *p, if (align1) { const struct brw_reg addr = 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. */ const unsigned limit = 512; @@ -3422,15 +3422,16 @@ brw_broadcast(struct brw_codegen *p, * addressing immediate, account for the difference if the source * register is above this limit. */ - if (offset >= limit) + if (offset >= limit) { brw_ADD(p, addr, addr, brw_imm_ud(offset - offset % limit)); + offset = offset % limit; + } brw_pop_insn_state(p); /* Use indirect addressing to fetch the specified component. */ brw_MOV(p, dst, - retype(brw_vec1_indirect(addr.subnr, offset % limit), - src.type)); + retype(brw_vec1_indirect(addr.subnr, offset), src.type)); } else { /* In SIMD4x2 mode the index can be either zero or one, replicate it * to all bits of a flag register, -- 2.30.2