pan/bi: Pack ADD_FREXPM
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Tue, 14 Apr 2020 17:14:29 +0000 (13:14 -0400)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Fri, 17 Apr 2020 20:25:35 +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/bi_pack.c
src/panfrost/bifrost/bifrost.h

index 043c8d57b939204ce76661df0bd16f67042703cd..db753f16671dc2198d468e886c13e7c383b1ffdd 100644 (file)
@@ -747,6 +747,16 @@ bi_pack_fma_frexp(bi_instruction *ins, struct bi_registers *regs)
         return bi_pack_fma_1src(ins, regs, op);
 }
 
+static unsigned
+bi_pack_fma_reduce(bi_instruction *ins, struct bi_registers *regs)
+{
+        if (ins->op.reduce == BI_REDUCE_ADD_FREXPM) {
+                return bi_pack_fma_2src(ins, regs, BIFROST_FMA_OP_ADD_FREXPM);
+        } else {
+                unreachable("Invalid reduce op");
+        }
+}
+
 /* We have a single convert opcode in the IR but a number of opcodes that could
  * come out. In particular we have native opcodes for:
  *
@@ -887,6 +897,8 @@ bi_pack_fma(bi_clause *clause, bi_bundle bundle, struct bi_registers *regs)
         case BI_SWIZZLE:
         case BI_ROUND:
                return BIFROST_FMA_NOP;
+        case BI_REDUCE_FMA:
+                return bi_pack_fma_reduce(bundle.fma, regs);
         default:
                 unreachable("Cannot encode class as FMA");
         }
index 91755375c3ba3d0f627340e306234a5f3fd9f3c1..3b08eac6df65c020bdf1ee4301835f5ab7e407f7 100644 (file)
@@ -98,6 +98,7 @@ enum bifrost_packed_src {
 #define BIFROST_FMA_EXT (0xe0000)
 #define BIFROST_FMA_OP_MOV BIFROST_FMA_EXT | (0x32d)
 #define BIFROST_FMA_OP_FREXPE_LOG BIFROST_FMA_EXT | 0x3c5
+#define BIFROST_FMA_OP_ADD_FREXPM ((BIFROST_FMA_EXT | 0x1e80) >> 3)
 
 struct bifrost_fma_inst {
         unsigned src0 : 3;