Mesa (main): pan/mdg: Clarify some ISA unknowns

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Feb 18 15:28:39 UTC 2022


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

Author: Alyssa Rosenzweig <alyssa at collabora.com>
Date:   Fri Feb  4 17:58:30 2022 -0500

pan/mdg: Clarify some ISA unknowns

Nothing usefully new here, just trying to improve signal:noise ratio on the
disassembly.

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

---

 src/panfrost/midgard/disassemble.c  | 25 +++++++++++++++----------
 src/panfrost/midgard/midgard.h      | 17 +++++++++++------
 src/panfrost/midgard/midgard_emit.c |  3 +--
 3 files changed, 27 insertions(+), 18 deletions(-)

diff --git a/src/panfrost/midgard/disassemble.c b/src/panfrost/midgard/disassemble.c
index 643bbb86367..738b00a82f1 100644
--- a/src/panfrost/midgard/disassemble.c
+++ b/src/panfrost/midgard/disassemble.c
@@ -941,8 +941,8 @@ print_scalar_field(disassemble_context *ctx, FILE *fp, const char *name,
         bool is_int_out = midgard_is_integer_out_op(alu_field->op);
         bool full = alu_field->output_full;
 
-        if (alu_field->unknown)
-                fprintf(fp, "scalar ALU unknown bit set\n");
+        if (alu_field->reserved)
+                fprintf(fp, "scalar ALU reserved bit set\n");
 
         if (verbose)
                 fprintf(fp, "%s.", name);
@@ -1045,6 +1045,17 @@ print_branch_cond(FILE *fp, int cond)
         }
 }
 
+static const char *
+function_call_mode(enum midgard_call_mode mode)
+{
+        switch (mode) {
+        case midgard_call_mode_default: return "";
+        case midgard_call_mode_call: return ".call";
+        case midgard_call_mode_return: return ".return";
+        default: return ".reserved";
+        }
+}
+
 static bool
 print_compact_branch_writeout_field(disassemble_context *ctx, FILE *fp, uint16_t word)
 {
@@ -1055,10 +1066,7 @@ print_compact_branch_writeout_field(disassemble_context *ctx, FILE *fp, uint16_t
         case midgard_jmp_writeout_op_branch_uncond: {
                 midgard_branch_uncond br_uncond;
                 memcpy((char *) &br_uncond, (char *) &word, sizeof(br_uncond));
-                fprintf(fp, "br.uncond ");
-
-                if (br_uncond.unknown != 1)
-                        fprintf(fp, "unknown:%u, ", br_uncond.unknown);
+                fprintf(fp, "br.uncond%s ", function_call_mode(br_uncond.call_mode));
 
                 if (br_uncond.offset >= 0)
                         fprintf(fp, "+");
@@ -1105,7 +1113,7 @@ print_extended_branch_writeout_field(disassemble_context *ctx, FILE *fp, uint8_t
         midgard_branch_extended br;
         memcpy((char *) &br, (char *) words, sizeof(br));
 
-        fprintf(fp, "brx.");
+        fprintf(fp, "brx%s.", function_call_mode(br.call_mode));
 
         print_branch_op(fp, br.op);
 
@@ -1122,9 +1130,6 @@ print_extended_branch_writeout_field(disassemble_context *ctx, FILE *fp, uint8_t
         else
                 fprintf(fp, "lut%X", br.cond);
 
-        if (br.unknown)
-                fprintf(fp, ".unknown%u", br.unknown);
-
         fprintf(fp, " ");
 
         if (br.offset >= 0)
diff --git a/src/panfrost/midgard/midgard.h b/src/panfrost/midgard/midgard.h
index 82778e9df51..f6d721cc901 100644
--- a/src/panfrost/midgard/midgard.h
+++ b/src/panfrost/midgard/midgard.h
@@ -43,8 +43,7 @@ extern int midgard_debug;
 typedef enum {
         midgard_word_type_alu,
         midgard_word_type_load_store,
-        midgard_word_type_texture,
-        midgard_word_type_unknown
+        midgard_word_type_texture
 } midgard_word_type;
 
 typedef enum {
@@ -338,7 +337,7 @@ __attribute__((__packed__))
         unsigned src1             :  6;
         /* last 5 bits are used when src2 is an immediate */
         unsigned src2             : 11;
-        unsigned unknown          :  1;
+        unsigned reserved         :  1;
         unsigned outmod           :  2;
         bool output_full          :  1;
         unsigned output_component :  3;
@@ -380,7 +379,7 @@ typedef enum {
         midgard_jmp_writeout_op_tilebuffer_pending = 6,
 
         /* In a fragment shader, try to write out the value pushed to r0 to the
-         * tilebuffer, subject to unknown state in r1.z and r1.w. If this
+         * tilebuffer, subject to state in r1.z and r1.w. If this
          * succeeds, the shader terminates. If it fails, it branches to the
          * specified branch target. Generally, this should be used in a loop to
          * itself, acting as "do { write(r0); } while(!write_successful);" */
@@ -401,12 +400,18 @@ typedef enum {
         midgard_condition_always = 3,
 } midgard_condition;
 
+enum midgard_call_mode {
+        midgard_call_mode_default = 1,
+        midgard_call_mode_call = 2,
+        midgard_call_mode_return = 3
+};
+
 typedef struct
 __attribute__((__packed__))
 {
         midgard_jmp_writeout_op op : 3; /* == branch_uncond */
         unsigned dest_tag : 4; /* tag of branch destination */
-        unsigned unknown : 2;
+        enum midgard_call_mode call_mode : 2;
         int offset : 7;
 }
 midgard_branch_uncond;
@@ -426,7 +431,7 @@ __attribute__((__packed__))
 {
         midgard_jmp_writeout_op op : 3; /* == branch_cond */
         unsigned dest_tag : 4; /* tag of branch destination */
-        unsigned unknown : 2;
+        enum midgard_call_mode call_mode : 2;
         signed offset : 23;
 
         /* Extended branches permit inputting up to 4 conditions loaded into
diff --git a/src/panfrost/midgard/midgard_emit.c b/src/panfrost/midgard/midgard_emit.c
index e613aa042f5..58bcfd1a2aa 100644
--- a/src/panfrost/midgard/midgard_emit.c
+++ b/src/panfrost/midgard/midgard_emit.c
@@ -138,7 +138,6 @@ vector_to_scalar_alu(midgard_vector_alu v, midgard_instruction *ins)
                 .op = v.op,
                 .src1 = packed_src[0],
                 .src2 = packed_src[1],
-                .unknown = 0,
                 .outmod = v.outmod,
                 .output_full = is_full,
                 .output_component = comp
@@ -813,7 +812,7 @@ emit_branch(midgard_instruction *ins,
                                 .op = op,
                                 .dest_tag = dest_tag,
                                 .offset = quadword_offset,
-                                .unknown = 1
+                                .call_mode = midgard_call_mode_default
                         };
                         assert(branch.offset == quadword_offset);
                         memcpy(util_dynarray_grow_bytes(emission, size, 1), &branch, size);



More information about the mesa-commit mailing list