7 fmtinstall('A', Aconv);
8 fmtinstall('D', Dconv);
9 fmtinstall('P', Pconv);
10 fmtinstall('S', Sconv);
11 fmtinstall('N', Nconv);
27 p = va_arg(fp->args, Prog*);
30 if(a == ADATA || a == ADYNT || a == AINIT)
31 snprint(str, sizeof str, "(%ld) %A %D/%d,%D",
32 p->line, a, &p->from, p->reg, &p->to);
35 snprint(str, sizeof str, "(%ld)%s %A %D,%D",
36 p->line, p->mark & NOSCHED ? "*" : "",
39 if(p->from.type != D_FREG)
40 snprint(str, sizeof str, "(%ld)%s %A %D,R%d,%D",
41 p->line, p->mark & NOSCHED ? "*" : "",
42 a, &p->from, p->reg, &p->to);
44 snprint(str, sizeof str, "(%ld)%s %A %D,F%d,%D",
45 p->line, p->mark & NOSCHED ? "*" : "",
46 a, &p->from, p->reg, &p->to);
48 return fmtstrcpy(fp, str);
57 a = va_arg(fp->args, int);
59 if(a >= AXXX && a < ALAST)
61 return fmtstrcpy(fp, s);
71 a = va_arg(fp->args, Adr*);
75 snprint(str, sizeof str, "GOK-type(%d)", a->type);
80 if(a->name != D_NONE || a->reg != NREG || a->sym != S)
81 snprint(str, sizeof str, "%N(R%d)(NONE)", a, a->reg);
85 snprint(str, sizeof str, "$%N", a);
87 snprint(str, sizeof str, "%N(R%d)(CONST)", a, a->reg);
91 snprint(str, sizeof str, "$*$%N", a);
93 snprint(str, sizeof str, "%N(R%d)(CONST)", a, a->reg);
98 snprint(str, sizeof str, "%N(R%d)", a, a->reg);
100 snprint(str, sizeof str, "%N", a);
104 snprint(str, sizeof str, "R%d", a->reg);
105 if(a->name != D_NONE || a->sym != S)
106 snprint(str, sizeof str, "%N(R%d)(REG)", a, a->reg);
110 snprint(str, sizeof str, "M%d", a->reg);
111 if(a->name != D_NONE || a->sym != S)
112 snprint(str, sizeof str, "%N(R%d)(REG)", a, a->reg);
116 snprint(str, sizeof str, "F%d", a->reg);
117 if(a->name != D_NONE || a->sym != S)
118 snprint(str, sizeof str, "%N(R%d)(REG)", a, a->reg);
122 snprint(str, sizeof str, "FC%d", a->reg);
123 if(a->name != D_NONE || a->sym != S)
124 snprint(str, sizeof str, "%N(R%d)(REG)", a, a->reg);
128 snprint(str, sizeof str, "LO");
129 if(a->name != D_NONE || a->sym != S)
130 snprint(str, sizeof str, "%N(LO)(REG)", a);
134 snprint(str, sizeof str, "HI");
135 if(a->name != D_NONE || a->sym != S)
136 snprint(str, sizeof str, "%N(HI)(REG)", a);
139 case D_BRANCH: /* botch */
140 if(curp->cond != P) {
145 snprint(str, sizeof str, "%s+%.5lux(BRANCH)", a->sym->name, v);
147 snprint(str, sizeof str, "%.5lux(BRANCH)", v);
150 snprint(str, sizeof str, "%s+%ld(APC)", a->sym->name, a->offset);
152 snprint(str, sizeof str, "%ld(APC)", a->offset);
156 snprint(str, sizeof str, "$%e", ieeedtod(a->ieee));
160 snprint(str, sizeof str, "$\"%S\"", a->sval);
163 return fmtstrcpy(fp, str);
173 a = va_arg(fp->args, Adr*);
177 snprint(str, sizeof str, "GOK-name(%d)", a->name);
181 snprint(str, sizeof str, "%ld", a->offset);
186 snprint(str, sizeof str, "%ld(SB)", a->offset);
188 snprint(str, sizeof str, "%s+%ld(SB)", s->name, a->offset);
193 snprint(str, sizeof str, "<>+%ld(SB)", a->offset);
195 snprint(str, sizeof str, "%s<>+%ld(SB)", s->name, a->offset);
200 snprint(str, sizeof str, "%ld(SP)", a->offset);
202 snprint(str, sizeof str, "%s-%ld(SP)", s->name, -a->offset);
207 snprint(str, sizeof str, "%ld(FP)", a->offset);
209 snprint(str, sizeof str, "%s+%ld(FP)", s->name, a->offset);
213 return fmtstrcpy(fp, str);
220 char str[STRINGSZ], *p, *a;
222 a = va_arg(fp->args, char*);
224 for(i=0; i<sizeof(long); i++) {
226 if(c >= 'a' && c <= 'z' ||
227 c >= 'A' && c <= 'Z' ||
228 c >= '0' && c <= '9' ||
229 c == ' ' || c == '%') {
250 *p++ = ((c>>3) & 7) + '0';
251 *p++ = (c & 7) + '0';
254 return fmtstrcpy(fp, str);
260 char buf[STRINGSZ], *tn;
264 if(curtext != P && curtext->from.sym != S)
265 tn = curtext->from.sym->name;
267 vseprint(buf, buf+sizeof(buf), fmt, arg);
269 print("%s: %s\n", tn, buf);
273 print("too many errors\n");