diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp index 1384a25..9c24969 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp @@ -292,6 +292,8 @@ IndirectPropagation::visit(BasicBlock *bb) if (insn->src(0).getFile() != targ->nativeFile(FILE_ADDRESS) || !insn->src(1).getImmediate(imm)) continue; + if (i->src(s).get()->reg.data.offset + imm.reg.data.u32 >= 0x400) + continue; i->setIndirect(s, 0, insn->getSrc(0)); i->setSrc(s, cloneShallow(func, i->getSrc(s))); i->src(s).get()->reg.data.offset += imm.reg.data.u32; @@ -299,12 +301,16 @@ IndirectPropagation::visit(BasicBlock *bb) if (insn->src(0).getFile() != targ->nativeFile(FILE_ADDRESS) || !insn->src(1).getImmediate(imm)) continue; + if (i->src(s).get()->reg.data.offset - imm.reg.data.u32 >= 0x400) + continue; i->setIndirect(s, 0, insn->getSrc(0)); i->setSrc(s, cloneShallow(func, i->getSrc(s))); i->src(s).get()->reg.data.offset -= imm.reg.data.u32; } else if (insn->op == OP_MOV) { if (!insn->src(0).getImmediate(imm)) continue; + if (i->src(s).get()->reg.data.offset + imm.reg.data.u32 >= 0x400) + continue; i->setIndirect(s, 0, NULL); i->setSrc(s, cloneShallow(func, i->getSrc(s))); i->src(s).get()->reg.data.offset += imm.reg.data.u32;