summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2020-07-08 16:51:16 -0700
committerMarge Bot <eric+marge@anholt.net>2020-07-20 19:42:45 +0000
commitd6d8dc133e0b4ca7885ada8038a861525bba11e1 (patch)
tree68838f1970c4b6ebf284b36f71ce5cdb8ccf10c9
parent62dcf7543216883fd084ec01784857423b232fe4 (diff)
freedreno/ir3: Refactor cat6 general dst printing.
We didn't need the extra branch and temp, we can move it inside of the dst handling by just duplicating the print of the dst reg. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5815>
-rw-r--r--src/freedreno/ir3/disasm-a3xx.c35
1 files changed, 18 insertions, 17 deletions
diff --git a/src/freedreno/ir3/disasm-a3xx.c b/src/freedreno/ir3/disasm-a3xx.c
index 6cd2789fcd1..10faa424684 100644
--- a/src/freedreno/ir3/disasm-a3xx.c
+++ b/src/freedreno/ir3/disasm-a3xx.c
@@ -681,7 +681,7 @@ static void print_instr_cat6_a3xx(struct disasm_ctx *ctx, instr_t *instr)
char sd = 0, ss = 0; /* dst/src address space */
bool nodst = false;
struct reginfo dst, src1, src2, ssbo;
- int src1off = 0, dstoff = 0;
+ int src1off = 0;
memset(&dst, 0, sizeof(dst));
memset(&src1, 0, sizeof(src1));
@@ -936,12 +936,6 @@ static void print_instr_cat6_a3xx(struct disasm_ctx *ctx, instr_t *instr)
return;
}
- if (cat6->dst_off) {
- dst.reg = (reg_t)(cat6->c.dst);
- dstoff = cat6->c.off;
- } else {
- dst.reg = (reg_t)(cat6->d.dst);
- }
if (cat6->src_off) {
src1.reg = (reg_t)(cat6->a.src1);
@@ -960,16 +954,23 @@ static void print_instr_cat6_a3xx(struct disasm_ctx *ctx, instr_t *instr)
if (sd)
fprintf(ctx->out, "%c[", sd);
/* note: dst might actually be a src (ie. address to store to) */
- print_src(ctx, &dst);
- if (cat6->dst_off && cat6->g) {
- struct reginfo dstoff_reg = {
- .reg = (reg_t) cat6->c.off,
- .full = true
- };
- fprintf(ctx->out, "+");
- print_src(ctx, &dstoff_reg);
- } else if (dstoff)
- fprintf(ctx->out, "%+d", dstoff);
+ if (cat6->dst_off) {
+ dst.reg = (reg_t)(cat6->c.dst);
+ print_src(ctx, &dst);
+ if (cat6->g) {
+ struct reginfo dstoff_reg = {
+ .reg = (reg_t) cat6->c.off,
+ .full = true
+ };
+ fprintf(ctx->out, "+");
+ print_src(ctx, &dstoff_reg);
+ } else if (cat6->c.off) {
+ fprintf(ctx->out, "%+d", cat6->c.off);
+ }
+ } else {
+ dst.reg = (reg_t)(cat6->d.dst);
+ print_src(ctx, &dst);
+ }
if (sd)
fprintf(ctx->out, "]");
fprintf(ctx->out, ", ");