On Mon, Aug 18, 2014 at 2:47 PM, Kenneth Graunke <[email protected]> wrote:
> On Monday, August 18, 2014 11:19:48 AM Matt Turner wrote:
>> JIP/UIP were previously in units of compacted instructions. On Gen8
>> they're in units of bytes.
>> ---
>>  src/mesa/drivers/dri/i965/brw_eu_compact.c | 10 ++++++----
>>  1 file changed, 6 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/mesa/drivers/dri/i965/brw_eu_compact.c 
>> b/src/mesa/drivers/dri/i965/brw_eu_compact.c
>> index 25a96e7..f100297 100644
>> --- a/src/mesa/drivers/dri/i965/brw_eu_compact.c
>> +++ b/src/mesa/drivers/dri/i965/brw_eu_compact.c
>> @@ -653,17 +653,19 @@ static void
>>  update_uip_jip(struct brw_context *brw, brw_inst *insn,
>>                 int this_old_ip, int *compacted_counts)
>>  {
>> -   int jip = brw_inst_jip(brw, insn);
>> +   int scale = brw->gen >= 8 ? sizeof(brw_compact_inst) : 1;
>> +
>> +   int32_t jip = brw_inst_jip(brw, insn) / scale;
>>     jip -= compacted_between(this_old_ip, this_old_ip + jip, 
>> compacted_counts);
>> -   brw_inst_set_jip(brw, insn, jip);
>> +   brw_inst_set_jip(brw, insn, jip * scale);
>>
>>     if (brw_inst_opcode(brw, insn) == BRW_OPCODE_ENDIF ||
>>         brw_inst_opcode(brw, insn) == BRW_OPCODE_WHILE)
>>        return;
>>
>> -   int uip = brw_inst_uip(brw, insn);
>> +   int32_t uip = brw_inst_uip(brw, insn) / scale;
>>     uip -= compacted_between(this_old_ip, this_old_ip + uip, 
>> compacted_counts);
>> -   brw_inst_set_uip(brw, insn, uip);
>> +   brw_inst_set_uip(brw, insn, uip * scale);
>>  }
>>
>>  void
>>
>
> This originally confused me a bit, but I believe it's correct.
> Here, your local variable jip is the jump distance in units of "number of 
> compact instructions".  So, for Broadwell, you convert from bytes to that, 
> subtract some number of compact instructions, and scale back up.
>
> You could instead do:
>
>    int32_t jip = brw_inst_jip(brw, insn);
>    jip -= scale *
>       compacted_between(this_old_ip, this_old_ip + jip, compacted_counts);
>    brw_inst_set_jip(brw, insn, jip);
>
> which is a bit less frobbing around and unit conversions.

Sounds good.

> You could also do:
>
>    int scale = brw_jump_scale(brw) / 2;
>
> if you wanted.  I'll leave it up to you which style you prefer.

I'm not sure -- brw_jump_scale returns 1 for Gen4. If I want to do
compaction on G45, problems?
_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to