diff options
Diffstat (limited to 'src/cmd/5g/list.c')
-rw-r--r-- | src/cmd/5g/list.c | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/src/cmd/5g/list.c b/src/cmd/5g/list.c index 19027829c..ce74d6478 100644 --- a/src/cmd/5g/list.c +++ b/src/cmd/5g/list.c @@ -49,28 +49,28 @@ listinit(void) int Pconv(Fmt *fp) { - char str[STRINGSZ]; + char str[STRINGSZ], str1[STRINGSZ]; Prog *p; p = va_arg(fp->args, Prog*); sconsize = 8; switch(p->as) { default: + snprint(str1, sizeof(str1), "%A%C", p->as, p->scond); if(p->reg == NREG) - snprint(str, sizeof(str), "%.4ld (%L) %-7A%C %D,%D", - p->loc, p->lineno, p->as, p->scond, &p->from, &p->to); - else if (p->from.type != D_FREG) - snprint(str, sizeof(str), "%.4ld (%L) %-7A%C %D,R%d,%D", - p->loc, p->lineno, p->as, p->scond, &p->from, p->reg, &p->to); + snprint(str, sizeof(str), "%.4d (%L) %-7s %D,%D", + p->loc, p->lineno, str1, &p->from, &p->to); else - snprint(str, sizeof(str), "%.4ld (%L) %-7A%C %D,F%d,%D", + if (p->from.type != D_FREG) { + snprint(str, sizeof(str), "%.4d (%L) %-7s %D,R%d,%D", + p->loc, p->lineno, str1, &p->from, p->reg, &p->to); + } else + snprint(str, sizeof(str), "%.4d (%L) %-7A%C %D,F%d,%D", p->loc, p->lineno, p->as, p->scond, &p->from, p->reg, &p->to); break; case ADATA: - case AINIT: - case ADYNT: - snprint(str, sizeof(str), "%.4ld (%L) %-7A %D/%d,%D", + snprint(str, sizeof(str), "%.4d (%L) %-7A %D/%d,%D", p->loc, p->lineno, p->as, &p->from, p->reg, &p->to); break; } @@ -154,10 +154,16 @@ Dconv(Fmt *fp) break; case D_BRANCH: - if(a->sym != S) - sprint(str, "%s+%d(APC)", a->sym->name, a->offset); - else - sprint(str, "%d(APC)", a->offset); + if(a->branch == P || a->branch->loc == 0) { + if(a->sym != S) + sprint(str, "%s+%d(APC)", a->sym->name, a->offset); + else + sprint(str, "%d(APC)", a->offset); + } else + if(a->sym != S) + sprint(str, "%s+%d(APC)", a->sym->name, a->branch->loc); + else + sprint(str, "%d(APC)", a->branch->loc); break; case D_FCONST: |