From: Samuel Pitoiset Date: Fri, 21 Oct 2016 15:43:00 +0000 (+0200) Subject: nvc0/ir: fix emission of SHLADD with NEG modifiers X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1ec7227d44dceae8de7b93f846bbd33d66007909;p=mesa.git 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" --- 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 7af31d07abc..ff8d777bb59 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 94a0ed07ebd..e8ee5f730d0 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);