pan/midgard: Introduce invert field
[mesa.git] / src / panfrost / midgard / mir.c
index 75da2fb0864908e7cdde90e13bf939149161d946..2d100728724fdf7be659951b593c4f559510d253 100644 (file)
@@ -109,13 +109,18 @@ mir_single_use(compiler_context *ctx, unsigned value)
 }
 
 bool
-mir_nontrivial_mod(midgard_vector_alu_src src, bool is_int, unsigned mask)
+mir_nontrivial_raw_mod(midgard_vector_alu_src src, bool is_int)
 {
-        /* abs or neg */
-        if (!is_int && src.mod) return true;
+        if (is_int)
+                return src.mod == midgard_int_shift;
+        else
+                return src.mod;
+}
 
-        /* Other int mods don't matter in isolation */
-        if (is_int && src.mod == midgard_int_shift) return true;
+bool
+mir_nontrivial_mod(midgard_vector_alu_src src, bool is_int, unsigned mask)
+{
+        if (mir_nontrivial_raw_mod(src, is_int)) return true;
 
         /* size-conversion */
         if (src.half) return true;
@@ -128,7 +133,6 @@ mir_nontrivial_mod(midgard_vector_alu_src src, bool is_int, unsigned mask)
 
         return false;
 }
-
 bool
 mir_nontrivial_source2_mod(midgard_instruction *ins)
 {
@@ -146,6 +150,10 @@ mir_nontrivial_outmod(midgard_instruction *ins)
         bool is_int = midgard_is_integer_op(ins->alu.op);
         unsigned mod = ins->alu.outmod;
 
+        /* Pseudo-outmod */
+        if (ins->invert)
+                return true;
+
         /* Type conversion is a sort of outmod */
         if (ins->alu.dest_override != midgard_dest_override_none)
                 return true;