From b5466707d6632e7dd019b36ced8da2b4ec7d5297 Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Thu, 28 Aug 2014 13:34:22 -0700 Subject: [PATCH] i965: Set JumpCount, not JIP, on ENDIF on Gen 6. Despite what the Sandybridge PRM says, ENDIF has Jump Count in , not JIP in . (The same mistake appears about WHILE as well). Reviewed-by: Kenneth Graunke Reviewed-by: Ian Romanick --- 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 39f94e96059..937257b20a5 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): -- 2.30.2