Mesa (master): i965: Set JumpCount, not JIP, on ENDIF on Gen 6.
Matt Turner
mattst88 at kemper.freedesktop.org
Thu Sep 25 18:26:23 UTC 2014
Module: Mesa
Branch: master
Commit: b5466707d6632e7dd019b36ced8da2b4ec7d5297
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b5466707d6632e7dd019b36ced8da2b4ec7d5297
Author: Matt Turner <mattst88 at gmail.com>
Date: Thu Aug 28 13:34:22 2014 -0700
i965: Set JumpCount, not JIP, on ENDIF on Gen 6.
Despite what the Sandybridge PRM says, ENDIF has Jump Count in <dst>,
not JIP in <src1>. (The same mistake appears about WHILE as well).
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
---
src/mesa/drivers/dri/i965/brw_eu_emit.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c
index 39f94e9..937257b 100644
--- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
@@ -2557,12 +2557,15 @@ brw_set_uip_jip(struct brw_compile *p)
assert(brw_inst_jip(brw, insn) != 0);
break;
- case BRW_OPCODE_ENDIF:
- if (block_end_offset == 0)
- brw_inst_set_jip(brw, insn, 1 * br);
+ case BRW_OPCODE_ENDIF: {
+ int32_t jump = (block_end_offset == 0) ?
+ 1 * br : (block_end_offset - offset) / scale;
+ if (brw->gen >= 7)
+ brw_inst_set_jip(brw, insn, jump);
else
- brw_inst_set_jip(brw, insn, (block_end_offset - offset) / scale);
+ brw_inst_set_gen6_jump_count(brw, insn, jump);
break;
+ }
case BRW_OPCODE_HALT:
/* From the Sandy Bridge PRM (volume 4, part 2, section 8.3.19):
More information about the mesa-commit
mailing list