Mesa (master): pan/bi: Pack FMA IADD/ISUB 32
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon May 4 19:01:44 UTC 2020
Module: Mesa
Branch: master
Commit: a463b2c2ed452f1ee1497fbc19921c910de93237
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a463b2c2ed452f1ee1497fbc19921c910de93237
Author: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Date: Mon May 4 14:28:47 2020 -0400
pan/bi: Pack FMA IADD/ISUB 32
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4890>
---
src/panfrost/bifrost/bi_pack.c | 17 +++++++++++++++--
src/panfrost/bifrost/bifrost.h | 3 +++
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/src/panfrost/bifrost/bi_pack.c b/src/panfrost/bifrost/bi_pack.c
index d877602bdb2..90d63be6ff7 100644
--- a/src/panfrost/bifrost/bi_pack.c
+++ b/src/panfrost/bifrost/bi_pack.c
@@ -1149,7 +1149,20 @@ bi_pack_fma_round(bi_instruction *ins, struct bi_registers *regs)
return bi_pack_fma_1src(ins, regs, op);
}
-
+
+static unsigned
+bi_pack_fma_imath(bi_instruction *ins, struct bi_registers *regs)
+{
+ /* Scheduler: only ADD can have 8/16-bit imath */
+ assert(ins->dest_type == nir_type_int32 || ins->dest_type == nir_type_uint32);
+
+ unsigned op = ins->op.imath == BI_IMATH_ADD
+ ? BIFROST_FMA_IADD_32
+ : BIFROST_FMA_ISUB_32;
+
+ return bi_pack_fma_2src(ins, regs, op);
+}
+
static unsigned
bi_pack_fma(bi_clause *clause, bi_bundle bundle, struct bi_registers *regs)
{
@@ -1172,7 +1185,7 @@ bi_pack_fma(bi_clause *clause, bi_bundle bundle, struct bi_registers *regs)
case BI_FREXP:
return bi_pack_fma_frexp(bundle.fma, regs);
case BI_IMATH:
- unreachable("Packing todo");
+ return bi_pack_fma_imath(bundle.fma, regs);
case BI_MINMAX:
return bi_pack_fma_addmin(bundle.fma, regs);
case BI_MOV:
diff --git a/src/panfrost/bifrost/bifrost.h b/src/panfrost/bifrost/bifrost.h
index cc26e281ea4..15e44251c1a 100644
--- a/src/panfrost/bifrost/bifrost.h
+++ b/src/panfrost/bifrost/bifrost.h
@@ -115,6 +115,9 @@ struct bifrost_fma_inst {
unsigned op : 20;
} __attribute__((packed));
+#define BIFROST_FMA_IADD_32 (0x4ff98 >> 3)
+#define BIFROST_FMA_ISUB_32 (0x4ffd8 >> 3)
+
struct bifrost_fma_2src {
unsigned src0 : 3;
unsigned src1 : 3;
More information about the mesa-commit
mailing list