summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <alyssa@collabora.com>2022-05-31 09:18:46 -0400
committerAlyssa Rosenzweig <alyssa@collabora.com>2022-06-01 14:24:10 -0400
commite596a0423b7a4fef6b3412fd51783a251e5420e6 (patch)
treebe455e25ea209b59acda52fd1c844a0d8721a895
parenta099834b97e5561dca493b7c6b2368637c0ca9d7 (diff)
downloadmesa-e596a0423b7a4fef6b3412fd51783a251e5420e6.tar.gz
pan/mdg: Print outmods when printing IR
In particular, this lets us distinguish mul_high from regular mul. Signed-off-by: Alyssa Rosenzweig <alyssa@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16798>
-rw-r--r--src/panfrost/midgard/disassemble.c25
-rw-r--r--src/panfrost/midgard/helpers.h3
-rw-r--r--src/panfrost/midgard/midgard_print.c5
-rw-r--r--src/panfrost/midgard/midgard_print_constant.c19
4 files changed, 29 insertions, 23 deletions
diff --git a/src/panfrost/midgard/disassemble.c b/src/panfrost/midgard/disassemble.c
index 817b951d568..84bad33743c 100644
--- a/src/panfrost/midgard/disassemble.c
+++ b/src/panfrost/midgard/disassemble.c
@@ -284,20 +284,6 @@ print_tex_reg(FILE *fp, unsigned reg, bool is_write)
}
-static char *outmod_names_float[4] = {
- "",
- ".clamp_0_inf",
- ".clamp_m1_1",
- ".clamp_0_1"
-};
-
-static char *outmod_names_int[4] = {
- ".ssat",
- ".usat",
- ".keeplo",
- ".keephi"
-};
-
static char *srcmod_names_int[4] = {
".sext",
".zext",
@@ -319,13 +305,6 @@ static char *index_format_names[4] = {
};
static void
-print_outmod(FILE *fp, unsigned outmod, bool is_int)
-{
- fprintf(fp, "%s", is_int ? outmod_names_int[outmod] :
- outmod_names_float[outmod]);
-}
-
-static void
print_alu_outmod(FILE *fp, unsigned outmod, bool is_int, bool half)
{
if (is_int && !half) {
@@ -336,7 +315,7 @@ print_alu_outmod(FILE *fp, unsigned outmod, bool is_int, bool half)
if (!is_int && half)
fprintf(fp, ".shrink");
- print_outmod(fp, outmod, is_int);
+ mir_print_outmod(fp, outmod, is_int);
}
/* arg == 0 (dest), arg == 1 (src1), arg == 2 (src2) */
@@ -1771,7 +1750,7 @@ print_texture_word(disassemble_context *ctx, FILE *fp, uint32_t *word,
/* Output modifiers are only valid for float texture operations */
if (texture->sampler_type == MALI_SAMPLER_FLOAT)
- print_outmod(fp, texture->outmod, false);
+ mir_print_outmod(fp, texture->outmod, false);
fprintf(fp, ", ");
diff --git a/src/panfrost/midgard/helpers.h b/src/panfrost/midgard/helpers.h
index 2109aa2d21c..a4d993ab3e4 100644
--- a/src/panfrost/midgard/helpers.h
+++ b/src/panfrost/midgard/helpers.h
@@ -435,4 +435,7 @@ mir_print_constant_component(FILE *fp, const midgard_constants *consts,
unsigned c, midgard_reg_mode reg_mode, bool half,
unsigned mod, midgard_alu_op op);
+void
+mir_print_outmod(FILE *fp, unsigned outmod, bool is_int);
+
#endif
diff --git a/src/panfrost/midgard/midgard_print.c b/src/panfrost/midgard/midgard_print.c
index 15a9fd62a54..ed0d80b2c7e 100644
--- a/src/panfrost/midgard/midgard_print.c
+++ b/src/panfrost/midgard/midgard_print.c
@@ -220,6 +220,11 @@ mir_print_instruction(midgard_instruction *ins)
printf("%s.", mir_get_unit(ins->unit));
printf("%s", name ? name : "??");
+
+ if (!(midgard_is_integer_out_op(ins->op) && ins->outmod == midgard_outmod_keeplo)) {
+ mir_print_outmod(stdout, ins->outmod, midgard_is_integer_out_op(ins->op));
+ }
+
break;
}
diff --git a/src/panfrost/midgard/midgard_print_constant.c b/src/panfrost/midgard/midgard_print_constant.c
index c254574774e..d588bc24bec 100644
--- a/src/panfrost/midgard/midgard_print_constant.c
+++ b/src/panfrost/midgard/midgard_print_constant.c
@@ -155,4 +155,23 @@ mir_print_constant_component(FILE *fp, const midgard_constants *consts, unsigned
}
}
+static char *outmod_names_float[4] = {
+ "",
+ ".clamp_0_inf",
+ ".clamp_m1_1",
+ ".clamp_0_1"
+};
+
+static char *outmod_names_int[4] = {
+ ".ssat",
+ ".usat",
+ ".keeplo",
+ ".keephi"
+};
+void
+mir_print_outmod(FILE *fp, unsigned outmod, bool is_int)
+{
+ fprintf(fp, "%s", is_int ? outmod_names_int[outmod] :
+ outmod_names_float[outmod]);
+}