Mesa (master): pan/bi: Pack FMA SEL8

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Apr 27 15:06:57 UTC 2020


Module: Mesa
Branch: master
Commit: d31e4879f0b0034f817e60acdd05574ed610e56b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d31e4879f0b0034f817e60acdd05574ed610e56b

Author: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Date:   Fri Apr 24 20:48:59 2020 -0400

pan/bi: Pack FMA SEL8

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

---

 src/panfrost/bifrost/bi_pack.c | 21 +++++++++++++++++++++
 src/panfrost/bifrost/bifrost.h | 11 +++++++++++
 2 files changed, 32 insertions(+)

diff --git a/src/panfrost/bifrost/bi_pack.c b/src/panfrost/bifrost/bi_pack.c
index 211c9e0fa1a..67912b6aaee 100644
--- a/src/panfrost/bifrost/bi_pack.c
+++ b/src/panfrost/bifrost/bi_pack.c
@@ -930,6 +930,27 @@ bi_pack_fma_select(bi_instruction *ins, struct bi_registers *regs)
                 unsigned swiz = (ins->swizzle[0][0] | (ins->swizzle[1][0] << 1));
                 unsigned op = BIFROST_FMA_SEL_16(swiz);
                 return bi_pack_fma_2src(ins, regs, op);
+        } else if (size == 8) {
+                unsigned swiz = 0;
+
+                for (unsigned c = 0; c < 4; ++c) {
+                        if (ins->swizzle[c][0]) {
+                                /* Ensure lowering restriction is met */
+                                assert(ins->swizzle[c][0] == 2);
+                                swiz |= (1 << c);
+                        }
+                }
+
+                struct bifrost_fma_sel8 pack = {
+                        .src0 = bi_get_src(ins, regs, 0, true),
+                        .src1 = bi_get_src(ins, regs, 1, true),
+                        .src2 = bi_get_src(ins, regs, 2, true),
+                        .src3 = bi_get_src(ins, regs, 3, true),
+                        .swizzle = swiz,
+                        .op = BIFROST_FMA_OP_SEL8
+                };
+
+                RETURN_PACKED(pack);
         } else {
                 unreachable("Unimplemented");
         }
diff --git a/src/panfrost/bifrost/bifrost.h b/src/panfrost/bifrost/bifrost.h
index a7789a5a7fa..4262e0e90d4 100644
--- a/src/panfrost/bifrost/bifrost.h
+++ b/src/panfrost/bifrost/bifrost.h
@@ -112,6 +112,17 @@ struct bifrost_fma_2src {
         unsigned op   : 17;
 } __attribute__((packed));
 
+#define BIFROST_FMA_OP_SEL8 (0x71)
+
+struct bifrost_fma_sel8 {
+        unsigned src0 : 3;
+        unsigned src1 : 3;
+        unsigned src2 : 3;
+        unsigned src3 : 3;
+        unsigned swizzle : 4;
+        unsigned op   : 7;
+} __attribute__((packed));
+
 #define BIFROST_FMA_OP_MSCALE (0x50 >> 3)
 
 struct bifrost_fma_mscale {



More information about the mesa-commit mailing list