I would recommend moving the emit part of this and the previous patch up in the series, so you then just have a patch generalizing the PostRaConstFolding pass. (Ugh, what a bad name. I'll send a separate comment about that.)
On Sun, Oct 30, 2016 at 5:20 PM, Karol Herbst <karolher...@gmail.com> wrote: > v2: renamed commit > reordered modifiers > add assert(dst == src2) > v3: reordered modifiers again > > Signed-off-by: Karol Herbst <karolher...@gmail.com> > --- > .../drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp | 35 > ++++++++++++++++------ > .../drivers/nouveau/codegen/nv50_ir_peephole.cpp | 3 +- > 2 files changed, 27 insertions(+), 11 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..d778e86 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp > @@ -1306,7 +1306,7 @@ CodeEmitterGM107::emitFMUL() > void > CodeEmitterGM107::emitFFMA() > { > - /*XXX: ffma32i exists, but not using it as third src overlaps dst */ > + bool isLongIMMD = false; > switch(insn->src(2).getFile()) { > case FILE_GPR: > switch (insn->src(1).getFile()) { > @@ -1319,14 +1319,22 @@ CodeEmitterGM107::emitFFMA() > emitCBUF(0x22, -1, 0x14, 16, 2, insn->src(1)); > break; > case FILE_IMMEDIATE: > - emitInsn(0x32800000); > - emitIMMD(0x14, 19, insn->src(1)); > + if (longIMMD(insn->getSrc(1))) { > + assert(insn->getDef(0)->reg.data.id == > insn->getSrc(2)->reg.data.id); > + isLongIMMD = true; > + emitInsn(0x0c000000); > + emitIMMD(0x14, 32, insn->src(1)); > + } else { > + emitInsn(0x32800000); > + emitIMMD(0x14, 19, insn->src(1)); > + } > break; > default: > assert(!"bad src1 file"); > break; > } > - emitGPR (0x27, insn->src(2)); > + if (!isLongIMMD) > + emitGPR (0x27, insn->src(2)); > break; > case FILE_MEMORY_CONST: > emitInsn(0x51800000); > @@ -1337,11 +1345,20 @@ CodeEmitterGM107::emitFFMA() > assert(!"bad src2 file"); > break; > } > - emitRND (0x33); > - emitSAT (0x32); > - emitNEG (0x31, insn->src(2)); > - emitNEG2(0x30, insn->src(0), insn->src(1)); > - emitCC (0x2f); > + > + emitRND(0x33); > + > + if (isLongIMMD) { > + emitNEG (0x39, insn->src(2)); > + emitNEG2(0x38, insn->src(0), insn->src(1)); > + emitSAT (0x37); > + emitCC (0x34); > + } else { > + emitSAT (0x32); > + emitNEG (0x31, insn->src(2)); > + emitNEG2(0x30, insn->src(0), insn->src(1)); > + emitCC (0x2f); > + } > > emitFMZ(0x35, 2); > emitGPR(0x08, insn->src(0)); > diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp > b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp > index 2ddabf7..959f708 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp > @@ -3599,8 +3599,7 @@ bool > Program::optimizePostRA(int level) > { > RUN_PASS(2, FlatteningPass, run); > - if (getTarget()->getChipset() < NVISA_GM107_CHIPSET) > - RUN_PASS(2, PostRaConstantFolding, run); > + RUN_PASS(2, PostRaConstantFolding, run); > > return true; > } > -- > 2.10.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev