This doesn't seem to cause real issues, but it makes compiled code easier to follow when the jumps go to the right place.
Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu> --- .../drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp | 27 +++++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp index 5ed2ad4..ecd3faa 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp @@ -557,15 +557,18 @@ CodeEmitterGM107::emitCAL() } if (!insn->srcExists(0) || insn->src(0).getFile() != FILE_MEMORY_CONST) { + int32_t pos = insn->target.bb->binPos; + if (writeIssueDelays && !(pos & 0x1f)) + pos += 8; if (!insn->absolute) - emitField(0x14, 24, insn->target.bb->binPos - (codeSize + 8)); + emitField(0x14, 24, pos - (codeSize + 8)); else { if (insn->builtin) { int pcAbs = targGM107->getBuiltinOffset(insn->target.builtin); addReloc(RelocEntry::TYPE_BUILTIN, 0, pcAbs, 0xfff00000, 20); addReloc(RelocEntry::TYPE_BUILTIN, 1, pcAbs, 0x000fffff, -12); } else { - emitField(0x14, 32, insn->target.bb->binPos); + emitField(0x14, 32, pos); } } } else { @@ -582,7 +585,10 @@ CodeEmitterGM107::emitPCNT() emitInsn(0xe2b00000, 0); if (!insn->srcExists(0) || insn->src(0).getFile() != FILE_MEMORY_CONST) { - emitField(0x14, 24, insn->target.bb->binPos - (codeSize + 8)); + int32_t pos = insn->target.bb->binPos; + if (writeIssueDelays && !(pos & 0x1f)) + pos += 8; + emitField(0x14, 24, pos - (codeSize + 8)); } else { emitCBUF (0x24, -1, 20, 16, 0, insn->src(0)); emitField(0x05, 1, 1); @@ -604,7 +610,10 @@ CodeEmitterGM107::emitPBK() emitInsn(0xe2a00000, 0); if (!insn->srcExists(0) || insn->src(0).getFile() != FILE_MEMORY_CONST) { - emitField(0x14, 24, insn->target.bb->binPos - (codeSize + 8)); + int32_t pos = insn->target.bb->binPos; + if (writeIssueDelays && !(pos & 0x1f)) + pos += 8; + emitField(0x14, 24, pos - (codeSize + 8)); } else { emitCBUF (0x24, -1, 20, 16, 0, insn->src(0)); emitField(0x05, 1, 1); @@ -626,7 +635,10 @@ CodeEmitterGM107::emitPRET() emitInsn(0xe2700000, 0); if (!insn->srcExists(0) || insn->src(0).getFile() != FILE_MEMORY_CONST) { - emitField(0x14, 24, insn->target.bb->binPos - (codeSize + 8)); + int32_t pos = insn->target.bb->binPos; + if (writeIssueDelays && !(pos & 0x1f)) + pos += 8; + emitField(0x14, 24, pos - (codeSize + 8)); } else { emitCBUF (0x24, -1, 20, 16, 0, insn->src(0)); emitField(0x05, 1, 1); @@ -648,7 +660,10 @@ CodeEmitterGM107::emitSSY() emitInsn(0xe2900000, 0); if (!insn->srcExists(0) || insn->src(0).getFile() != FILE_MEMORY_CONST) { - emitField(0x14, 24, insn->target.bb->binPos - (codeSize + 8)); + int32_t pos = insn->target.bb->binPos; + if (writeIssueDelays && !(pos & 0x1f)) + pos += 8; + emitField(0x14, 24, pos - (codeSize + 8)); } else { emitCBUF (0x24, -1, 20, 16, 0, insn->src(0)); emitField(0x05, 1, 1); -- 2.7.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev