i965/vec4: Remove 'mul_arg' from try_emit_mad().
authorMatt Turner <mattst88@gmail.com>
Mon, 28 Apr 2014 17:30:50 +0000 (10:30 -0700)
committerMatt Turner <mattst88@gmail.com>
Wed, 30 Apr 2014 18:41:29 +0000 (11:41 -0700)
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_vec4.h
src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp

index b3549a5c845ee96921adf0865c8c52f8602f42c5..ebe707f147d94c24bdd8663f4fb8a62023105f47 100644 (file)
@@ -591,7 +591,7 @@ public:
                                int base_offset);
 
    bool try_emit_sat(ir_expression *ir);
-   bool try_emit_mad(ir_expression *ir, int mul_arg);
+   bool try_emit_mad(ir_expression *ir);
    void resolve_ud_negate(src_reg *reg);
 
    src_reg get_timestamp();
index 8fa0aee996bbb5f6d110a1a3d4f697e365a88394..7bad81c476e76b2ae5ee72127c94a98158038a58 100644 (file)
@@ -1090,7 +1090,7 @@ vec4_visitor::try_emit_sat(ir_expression *ir)
 }
 
 bool
-vec4_visitor::try_emit_mad(ir_expression *ir, int mul_arg)
+vec4_visitor::try_emit_mad(ir_expression *ir)
 {
    /* 3-src instructions were introduced in gen6. */
    if (brw->gen < 6)
@@ -1100,11 +1100,16 @@ vec4_visitor::try_emit_mad(ir_expression *ir, int mul_arg)
    if (ir->type->base_type != GLSL_TYPE_FLOAT)
       return false;
 
-   ir_rvalue *nonmul = ir->operands[1 - mul_arg];
-   ir_expression *mul = ir->operands[mul_arg]->as_expression();
+   ir_rvalue *nonmul = ir->operands[1];
+   ir_expression *mul = ir->operands[0]->as_expression();
 
-   if (!mul || mul->operation != ir_binop_mul)
-      return false;
+   if (!mul || mul->operation != ir_binop_mul) {
+      nonmul = ir->operands[0];
+      mul = ir->operands[1]->as_expression();
+
+      if (!mul || mul->operation != ir_binop_mul)
+         return false;
+   }
 
    nonmul->accept(this);
    src_reg src0 = fix_3src_operand(this->result);
@@ -1189,7 +1194,7 @@ vec4_visitor::visit(ir_expression *ir)
       return;
 
    if (ir->operation == ir_binop_add) {
-      if (try_emit_mad(ir, 0) || try_emit_mad(ir, 1))
+      if (try_emit_mad(ir))
         return;
    }