From 1ec7227d44dceae8de7b93f846bbd33d66007909 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 21 Oct 2016 17:43:00 +0200 Subject: [PATCH] nvc0/ir: fix emission of SHLADD with NEG modifiers This affects GF100:GK110 chipsets, but not GM107+ where the logic is a bit different. The emitters tried to emit sub instead of subr when src0 has a NEG modifier. This fixes the following piglit tests glsl-fs-loop-nested and glsl-vs-loop-nested. Signed-off-by: Samuel Pitoiset Acked-by: Ilia Mirkin Cc: "13.0" --- src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp | 2 +- src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp index 7af31d0..ff8d777 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp @@ -759,7 +759,7 @@ CodeEmitterGK110::emitISAD(const Instruction *i) void CodeEmitterGK110::emitSHLADD(const Instruction *i) { - uint8_t addOp = (i->src(2).mod.neg() << 1) | i->src(0).mod.neg(); + uint8_t addOp = (i->src(0).mod.neg() << 1) | i->src(2).mod.neg(); const ImmediateValue *imm = i->src(1).get()->asImm(); assert(imm); diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp index 94a0ed0..e8ee5f7 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp @@ -761,7 +761,7 @@ CodeEmitterNVC0::emitIMAD(const Instruction *i) void CodeEmitterNVC0::emitSHLADD(const Instruction *i) { - uint8_t addOp = (i->src(2).mod.neg() << 1) | i->src(0).mod.neg(); + uint8_t addOp = (i->src(0).mod.neg() << 1) | i->src(2).mod.neg(); const ImmediateValue *imm = i->src(1).get()->asImm(); assert(imm); -- 2.7.4