pan/mdg: Lower roundmodes
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Mon, 25 May 2020 18:11:04 +0000 (14:11 -0400)
committerMarge Bot <eric+marge@anholt.net>
Wed, 3 Jun 2020 15:36:57 +0000 (15:36 +0000)
So now we can use the IR field semantically.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5285>

src/panfrost/midgard/midgard_emit.c

index 34b06a2caf441f193417db1f13bbbd668b2077fc..f1bfda5018bddc53f2d8fd8e8e85d997d6ba13b4 100644 (file)
@@ -477,6 +477,17 @@ mir_lower_inverts(midgard_instruction *ins)
         }
 }
 
+/* Opcodes with ROUNDS are the base (rte/0) type so we can just add */
+
+static void
+mir_lower_roundmode(midgard_instruction *ins)
+{
+        if (alu_opcode_props[ins->alu.op].props & MIDGARD_ROUNDS) {
+                assert(ins->roundmode <= 0x3);
+                ins->alu.op += ins->roundmode;
+        }
+}
+
 static void
 emit_alu_bundle(compiler_context *ctx,
                 midgard_bundle *bundle,
@@ -510,8 +521,10 @@ emit_alu_bundle(compiler_context *ctx,
                 /* In case we demote to a scalar */
                 midgard_scalar_alu scalarized;
 
-                if (!ins->compact_branch)
+                if (!ins->compact_branch) {
                         mir_lower_inverts(ins);
+                        mir_lower_roundmode(ins);
+                }
 
                 if (ins->unit & UNITS_ANY_VECTOR) {
                         mir_pack_mask_alu(ins);