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