On Tue, Jan 13, 2015 at 3:00 PM, Matt Turner <matts...@gmail.com> wrote: > Just use the negation source modifier on one of the multiplicand > arguments. > > total instructions in shared programs: 5889529 -> 5880016 (-0.16%) > instructions in affected programs: 600846 -> 591333 (-1.58%)
Reviewed-by: Kristian Høgsberg <k...@bitplanet.net> > --- > src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp > b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp > index bd9345e..dd4beff 100644 > --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp > +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp > @@ -426,10 +426,21 @@ fs_visitor::try_emit_mad(ir_expression *ir) > ir_rvalue *nonmul = ir->operands[1]; > ir_expression *mul = ir->operands[0]->as_expression(); > > + bool mul_negate = false; > + if (mul && mul->operation == ir_unop_neg) { > + mul = mul->operands[0]->as_expression(); > + mul_negate = true; > + } > + > if (!mul || mul->operation != ir_binop_mul) { > nonmul = ir->operands[0]; > mul = ir->operands[1]->as_expression(); > > + if (mul && mul->operation == ir_unop_neg) { > + mul = mul->operands[0]->as_expression(); > + mul_negate = true; > + } > + > if (!mul || mul->operation != ir_binop_mul) > return false; > } > @@ -444,6 +455,7 @@ fs_visitor::try_emit_mad(ir_expression *ir) > > mul->operands[0]->accept(this); > fs_reg src1 = this->result; > + src1.negate ^= mul_negate; > > mul->operands[1]->accept(this); > fs_reg src2 = this->result; > -- > 2.0.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev