[Mesa-dev] [PATCH v3 5/6] gm107/ir: add LIMM form of mad
Ilia Mirkin
imirkin at alum.mit.edu
Sun Oct 30 21:29:30 UTC 2016
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 <karolherbst at gmail.com> wrote:
> v2: renamed commit
> reordered modifiers
> add assert(dst == src2)
> v3: reordered modifiers again
>
> Signed-off-by: Karol Herbst <karolherbst at 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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list