pan/bit: _MSCALE interp
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Tue, 14 Apr 2020 20:21:14 +0000 (16:21 -0400)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Fri, 17 Apr 2020 20:25:36 +0000 (16:25 -0400)
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4615>

src/panfrost/bifrost/test/bi_interpret.c

index eca42292c609ddd7f4b29ecacbb929f638fd2d3e..9e88795b3241714b6b7babe164bad903d951fde9 100644 (file)
@@ -548,6 +548,17 @@ bit_step(struct bit_state *s, bi_instruction *ins, bool FMA)
                 unreachable("Unsupported op");
         }
 
+        /* Apply _MSCALE */
+        if ((ins->type == BI_FMA || ins->type == BI_ADD) && ins->op.mscale) {
+                unsigned idx = (ins->type == BI_FMA) ? 3 : 2;
+
+                assert(ins->src_types[idx] == nir_type_int32);
+                assert(ins->dest_type == nir_type_float32);
+
+                int32_t scale = srcs[idx].i32;
+                dest.f32 *= exp2f(scale);
+        }
+
         /* Apply outmod */
         if (bi_has_outmod(ins) && ins->outmod != BIFROST_NONE) {
                 if (ins->dest_type == nir_type_float16) {