<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Oct 26, 2017 at 3:18 AM, Iago Toral <span dir="ltr"><<a href="mailto:itoral@igalia.com" target="_blank">itoral@igalia.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I am not sure I get the purpose of this, there is nothing wrong with<br>
the change, but the subject suggests that was so that we modified that<br>
offset only inside brw_broadcast()... but that was already happening<br>
and in fact this patch only changes code inside that function so I<br>
wonder if there is something else missing or maybe the subject should<br>
be changed.<br></blockquote><div><br></div><div>Patch 10 will add 2 more places where we use the offset so I didn't want to have offset % limit copied 3 times.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="HOEnZb"><font color="#888888"><br>
Iago<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On Wed, 2017-10-25 at 16:25 -0700, Jason Ekstrand wrote:<br>
> This means we have to drop const from a variable but it also means<br>
> that<br>
> 100% of the code which deals with the offset limit is in one place.<br>
> ---<br>
>  src/intel/compiler/brw_eu_<wbr>emit.c | 9 +++++----<br>
>  1 file changed, 5 insertions(+), 4 deletions(-)<br>
><br>
> diff --git a/src/intel/compiler/brw_eu_<wbr>emit.c<br>
> b/src/intel/compiler/brw_eu_<wbr>emit.c<br>
> index e10b143..a18cfa4 100644<br>
> --- a/src/intel/compiler/brw_eu_<wbr>emit.c<br>
> +++ b/src/intel/compiler/brw_eu_<wbr>emit.c<br>
> @@ -3404,7 +3404,7 @@ brw_broadcast(struct brw_codegen *p,<br>
>        if (align1) {<br>
>           const struct brw_reg addr =<br>
>              retype(brw_<wbr>address_reg(0), BRW_REGISTER_TYPE_UD);<br>
> -         const unsigned offset = <a href="http://src.nr" rel="noreferrer" target="_blank">src.nr</a> * REG_SIZE + src.subnr;<br>
> +         unsigned offset = <a href="http://src.nr" rel="noreferrer" target="_blank">src.nr</a> * REG_SIZE + src.subnr;<br>
>           /* Limit in bytes of the signed indirect addressing<br>
> immediate. */<br>
>           const unsigned limit = 512;<br>
>  <br>
> @@ -3422,15 +3422,16 @@ brw_broadcast(struct brw_codegen *p,<br>
>            * addressing immediate, account for the difference if the<br>
> source<br>
>            * register is above this limit.<br>
>            */<br>
> -         if (offset >= limit)<br>
> +         if (offset >= limit) {<br>
>              brw_ADD(p, addr, addr, brw_imm_ud(offset - offset %<br>
> limit));<br>
> +            offset = offset % limit;<br>
> +         }<br>
>  <br>
>           brw_pop_insn_state(<wbr>p);<br>
>  <br>
>           /* Use indirect addressing to fetch the specified<br>
> component. */<br>
>           brw_MOV(p, dst,<br>
> -                 retype(brw_<wbr>vec1_indirect(addr.subnr, offset %<br>
> limit),<br>
> -                        src.<wbr>type));<br>
> +                 retype(brw_<wbr>vec1_indirect(addr.subnr, offset),<br>
> src.type));<br>
>        } else {<br>
>           /* In SIMD4x2 mode the index can be either zero or one,<br>
> replicate it<br>
>            * to all bits of a flag register,<br>
</div></div></blockquote></div><br></div></div>