nv50/ir/opt: improve post-multiply and check target for support
[mesa.git] / src / gallium / drivers / nvc0 / codegen / nv50_ir_target_nvc0.cpp
index bcc2c43a55fd41bfe5e912171bb127e0662c80a0..6fe95c6693f4c551ae670c9c3d7bdd2cd557ea1e 100644 (file)
@@ -516,6 +516,18 @@ TargetNVC0::isSatSupported(const Instruction *insn) const
    return insn->dType == TYPE_F32;
 }
 
+bool
+TargetNVC0::isPostMultiplySupported(operation op, float f, int& e) const
+{
+   if (op != OP_MUL)
+      return false;
+   f = fabsf(f);
+   e = static_cast<int>(log2f(f));
+   if (e < -3 || e > 3)
+      return false;
+   return f == exp2f(static_cast<float>(e));
+}
+
 // TODO: better values
 int TargetNVC0::getLatency(const Instruction *i) const
 {