From: Christoph Bumiller Date: Fri, 6 Jan 2012 23:21:57 +0000 (+0100) Subject: nvc0/ir/emit: fix modifiers of f32 add with long immediate X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7c6ca0367bb6e9141e00fa19faabc8441dc05816;p=mesa.git nvc0/ir/emit: fix modifiers of f32 add with long immediate --- diff --git a/src/gallium/drivers/nvc0/codegen/nv50_ir_emit_nvc0.cpp b/src/gallium/drivers/nvc0/codegen/nv50_ir_emit_nvc0.cpp index ecff42106da..da2c885eb87 100644 --- a/src/gallium/drivers/nvc0/codegen/nv50_ir_emit_nvc0.cpp +++ b/src/gallium/drivers/nvc0/codegen/nv50_ir_emit_nvc0.cpp @@ -511,20 +511,26 @@ CodeEmitterNVC0::emitFADD(const Instruction *i) { if (i->encSize == 8) { if (isLIMM(i->src[1], TYPE_F32)) { + assert(!i->saturate); emitForm_A(i, HEX64(28000000, 00000002)); - assert(!i->src[1].mod.neg() && !i->src[1].mod.abs() && !i->saturate); + code[0] |= i->src[0].mod.abs() << 7; + code[0] |= i->src[0].mod.neg() << 9; + + if (i->src[1].mod.abs()) + code[1] &= 0xfdffffff; + if ((i->op == OP_SUB) != static_cast(i->src[1].mod.neg())) + code[1] ^= 0x02000000; } else { emitForm_A(i, HEX64(50000000, 00000000)); roundMode_A(i); if (i->saturate) code[1] |= 1 << 17; - } - emitNegAbs12(i); - - if (i->op == OP_SUB) code[0] ^= 1 << 8; + emitNegAbs12(i); + if (i->op == OP_SUB) code[0] ^= 1 << 8; + } if (i->ftz) code[0] |= 1 << 5; } else {