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