[Mesa-dev] [PATCH 1/2] gm107/ir: adjust jump offsets to avoid sched info
Ilia Mirkin
imirkin at alum.mit.edu
Wed Nov 2 04:38:02 UTC 2016
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 <imirkin at 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
More information about the mesa-dev
mailing list