ir->operands[operand]->print();
printf("\n");
}
+ assert(this->result.is_valid_3src());
op[operand] = this->result;
/* Matrix expression operands should have been broken down to vector
break;
case ir_unop_neg:
op[0].negate = !op[0].negate;
- this->result = op[0];
+ emit(MOV(this->result, op[0]));
break;
case ir_unop_abs:
op[0].abs = true;
op[0].negate = false;
- this->result = op[0];
+ emit(MOV(this->result, op[0]));
break;
case ir_unop_sign:
temp = fs_reg(this, ir->type);
break;
}
+ case ir_triop_fma:
+ /* Note that the instruction's argument order is reversed from GLSL
+ * and the IR.
+ */
+ emit(MAD(this->result, op[2], op[1], op[0]));
+ break;
+
case ir_triop_lrp:
emit_lrp(this->result, op[0], op[1], op[2]);
break;