Mesa (master): pan/mdg: Avoid division in printing helpers
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu May 21 22:44:32 UTC 2020
Module: Mesa
Branch: master
Commit: 2b9f6d30f8ba5d693e87bc172bf577c6dd83dcfc
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2b9f6d30f8ba5d693e87bc172bf577c6dd83dcfc
Author: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Date: Thu May 21 18:09:53 2020 -0400
pan/mdg: Avoid division in printing helpers
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5154>
---
src/panfrost/midgard/compiler.h | 1 +
src/panfrost/midgard/midgard_print.c | 6 ++----
src/panfrost/midgard/mir.c | 13 +++++++++++++
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/src/panfrost/midgard/compiler.h b/src/panfrost/midgard/compiler.h
index f9cfcb09fc8..c26f82613f8 100644
--- a/src/panfrost/midgard/compiler.h
+++ b/src/panfrost/midgard/compiler.h
@@ -498,6 +498,7 @@ uint16_t mir_bytemask(midgard_instruction *ins);
uint16_t mir_round_bytemask_up(uint16_t mask, unsigned bits);
void mir_set_bytemask(midgard_instruction *ins, uint16_t bytemask);
signed mir_upper_override(midgard_instruction *ins, unsigned inst_size);
+unsigned mir_components_for_type(nir_alu_type T);
/* MIR printing */
diff --git a/src/panfrost/midgard/midgard_print.c b/src/panfrost/midgard/midgard_print.c
index b2cc8e27aa4..a5133f09e20 100644
--- a/src/panfrost/midgard/midgard_print.c
+++ b/src/panfrost/midgard/midgard_print.c
@@ -73,8 +73,7 @@ mir_print_mask(unsigned mask)
static void
mir_print_swizzle(unsigned *swizzle, nir_alu_type T)
{
- unsigned sz = nir_alu_type_get_type_size(T);
- unsigned comps = 128 / sz;
+ unsigned comps = mir_components_for_type(T);
printf(".");
@@ -230,7 +229,6 @@ mir_print_constant_component(FILE *fp, const midgard_constants *consts, unsigned
static void
mir_print_embedded_constant(midgard_instruction *ins, unsigned src_idx)
{
- unsigned type_size = nir_alu_type_get_type_size(ins->dest_type);
midgard_vector_alu_src src;
assert(src_idx <= 1);
@@ -242,7 +240,7 @@ mir_print_embedded_constant(midgard_instruction *ins, unsigned src_idx)
unsigned *swizzle = ins->swizzle[src_idx];
unsigned comp_mask = effective_writemask(&ins->alu, ins->mask);
unsigned num_comp = util_bitcount(comp_mask);
- unsigned max_comp = 64 / type_size;
+ unsigned max_comp = mir_components_for_type(ins->dest_type) >> 1;
bool first = true;
printf("#");
diff --git a/src/panfrost/midgard/mir.c b/src/panfrost/midgard/mir.c
index b7e2917c465..ec6c099db67 100644
--- a/src/panfrost/midgard/mir.c
+++ b/src/panfrost/midgard/mir.c
@@ -145,6 +145,19 @@ mir_nontrivial_outmod(midgard_instruction *ins)
return mod != midgard_outmod_none;
}
+/* 128 / sz = exp2(log2(128 / sz))
+ * = exp2(log2(128) - log2(sz))
+ * = exp2(7 - log2(sz))
+ * = 1 << (7 - log2(sz))
+ */
+
+unsigned
+mir_components_for_type(nir_alu_type T)
+{
+ unsigned sz = nir_alu_type_get_type_size(T);
+ return 1 << (7 - util_logbase2(sz));
+}
+
uint16_t
mir_from_bytemask(uint16_t bytemask, unsigned bits)
{
More information about the mesa-commit
mailing list