pan/bi: Pack fadd32
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Wed, 18 Mar 2020 15:02:57 +0000 (11:02 -0400)
committerMarge Bot <eric+marge@anholt.net>
Thu, 19 Mar 2020 03:23:07 +0000 (03:23 +0000)
Choo choo.

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

src/panfrost/bifrost/bi_pack.c
src/panfrost/bifrost/bifrost.h

index beddb3f4314bcf4424d36b6c70aad84bc4ba7f9f..325bd30a83ad59c5516610fc0ddc115d207f6bca 100644 (file)
@@ -294,6 +294,28 @@ bi_pack_fma_fma(bi_instruction *ins, struct bi_registers *regs)
         RETURN_PACKED(pack);
 }
 
+static unsigned
+bi_pack_fma_add(bi_instruction *ins, struct bi_registers *regs)
+{
+        /* TODO: fadd16 packing is a bit different */
+        assert(ins->dest_type == nir_type_float32);
+
+        struct bifrost_fma_add pack = {
+                .src0 = bi_get_fma_src(ins, regs, 0),
+                .src1 = bi_get_fma_src(ins, regs, 1),
+                .src0_abs = ins->src_abs[0],
+                .src1_abs = ins->src_abs[1],
+                .src0_neg = ins->src_neg[0],
+                .src1_neg = ins->src_neg[1],
+                .unk = 0x0,
+                .outmod = ins->outmod,
+                .roundmode = ins->roundmode,
+                .op = BIFROST_FMA_OP_FADD32
+        };
+
+        RETURN_PACKED(pack);
+}
+
 static unsigned
 bi_pack_fma(bi_clause *clause, bi_bundle bundle, struct bi_registers *regs)
 {
@@ -302,6 +324,7 @@ bi_pack_fma(bi_clause *clause, bi_bundle bundle, struct bi_registers *regs)
 
         switch (bundle.fma->type) {
         case BI_ADD:
+                return bi_pack_fma_add(bundle.fma, regs);
         case BI_CMP:
         case BI_BITWISE:
         case BI_CONVERT:
index ba08633f8f973ce6b80dd430d5a3b4d11e5e0f4d..292c35db11d3a8d0b63fe4d2508bbaa1379e8d67 100644 (file)
@@ -134,6 +134,8 @@ enum bifrost_minmax_mode {
         BIFROST_SRC0_WINS   = 0x3,
 };
 
+#define BIFROST_FMA_OP_FADD32 (0x58 >> 2)
+
 struct bifrost_fma_add {
         unsigned src0 : 3;
         unsigned src1 : 3;