i965: Update JIP/UIP compaction code to operate on bytes.
authorMatt Turner <mattst88@gmail.com>
Tue, 17 Jun 2014 19:14:44 +0000 (12:14 -0700)
committerMatt Turner <mattst88@gmail.com>
Tue, 19 Aug 2014 01:18:50 +0000 (18:18 -0700)
JIP/UIP were previously in units of compacted instructions. On Gen8
they're in units of bytes.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_eu_compact.c

index 25a96e7641c5e9a8a99c5d5c8c10f16773456d58..ecd97978bce6067f94ed8cd9e083b628b3970d5b 100644 (file)
@@ -653,16 +653,20 @@ 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);
-   jip -= compacted_between(this_old_ip, this_old_ip + jip, compacted_counts);
+   int scale = brw->gen >= 8 ? sizeof(brw_compact_inst) : 1;
+
+   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);
 
    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);
-   uip -= compacted_between(this_old_ip, this_old_ip + uip, compacted_counts);
+   int32_t uip = brw_inst_uip(brw, insn);
+   uip -= scale *
+      compacted_between(this_old_ip, this_old_ip + uip, compacted_counts);
    brw_inst_set_uip(brw, insn, uip);
 }