7 fmtinstall('R', Rconv);
8 fmtinstall('A', Aconv);
9 fmtinstall('D', Dconv);
10 fmtinstall('S', Sconv);
11 fmtinstall('P', Pconv);
22 p = va_arg(fp->args, Prog*);
24 snprint(str, sizeof str, "(%ld) %A %D,%D",
25 p->line, p->as, &p->from, &p->to);
27 return fmtprint(fp, "%s,%d,%d", str, p->to.field, p->from.field);
29 return fmtstrcpy(fp, str);
35 return fmtstrcpy(fp, anames[va_arg(fp->args, int)]);
45 i0 = va_arg(fp->args, int) & D_MASK;
46 i1 = va_arg(fp->args, int);
48 snprint(str, sizeof str, "(%R.%c*%c)", i0, "WWWWLLLL"[i1], "12481248"[i1]);
49 return fmtstrcpy(fp, str);
60 a = va_arg(fp->args, Adr*);
68 snprint(str, sizeof str, "???%ld(%D)", d, a);
72 snprint(str, sizeof str, "%D", a);
77 snprint(str, sizeof str, "%ld(%D)", d, a);
79 snprint(str, sizeof str, "(%D)", a);
84 snprint(str, sizeof str, "%ld(%D", d, a);
86 snprint(str, sizeof str, "(%D", a);
92 snprint(s, sizeof s, "(%R.%c*%c)", i, "WWWWLLLL"[j], "12481248"[j]);
93 strncat(str, s, sizeof str - 1);
94 str[sizeof str - 1] = 0;
96 if((i & I_MASK) == I_INDEX3){
97 strncat(str, ")", sizeof str - 1);
98 str[sizeof str - 1] = 0;
107 a->type = i & D_MASK;
112 snprint(str, sizeof str, "(%D)+", a);
116 snprint(str, sizeof str, "-(%D)", a);
121 snprint(str, sizeof str, "%ld(%D)", d, a);
123 snprint(str, sizeof str, "(%D)", a);
128 snprint(str, sizeof str, "$%D", a);
138 snprint(str, sizeof str, "%R", i);
146 if(bigP != P && bigP->pcond != P)
148 snprint(str, sizeof str, "%lux+%s", bigP->pcond->pc,
151 snprint(str, sizeof str, "%lux", bigP->pcond->pc);
153 snprint(str, sizeof str, "%ld(PC)", a->offset);
157 snprint(str, sizeof str, "%s+%ld(SB)", a->sym->name, a->offset);
161 snprint(str, sizeof str, "%s<%d>+%ld(SB)", a->sym->name,
162 a->sym->version, a->offset);
166 snprint(str, sizeof str, "%s+%ld(SP)", a->sym->name, a->offset);
171 snprint(str, sizeof str, "%s+%ld(FP)", a->sym->name, a->offset);
173 snprint(str, sizeof str, "%ld(FP)", a->offset);
177 snprint(str, sizeof str, "$%ld", a->offset);
181 snprint(str, sizeof str, "TOS+%ld", a->offset);
185 snprint(str, sizeof str, "$Q%ld", a->offset);
189 snprint(str, sizeof str, "$(%.8lux,%.8lux)", a->ieee.h, a->ieee.l);
193 snprint(str, sizeof str, "$\"%S\"", a->scon);
197 return fmtprint(fp, "%s/%ld", str, a->displace);
199 return fmtstrcpy(fp, str);
208 r = va_arg(fp->args, int);
209 if(r >= D_R0 && r < D_R0+NREG)
210 snprint(str, sizeof str, "R%d", r-D_R0);
212 if(r >= D_A0 && r < D_A0+NREG)
213 snprint(str, sizeof str, "A%d", r-D_A0);
215 if(r >= D_F0 && r < D_F0+NREG)
216 snprint(str, sizeof str, "F%d", r-D_F0);
221 snprint(str, sizeof str, "gok(%d)", r);
225 snprint(str, sizeof str, "NONE");
229 snprint(str, sizeof str, "TOS");
233 snprint(str, sizeof str, "CCR");
237 snprint(str, sizeof str, "SR");
241 snprint(str, sizeof str, "SFC");
245 snprint(str, sizeof str, "DFC");
249 snprint(str, sizeof str, "CACR");
253 snprint(str, sizeof str, "USP");
257 snprint(str, sizeof str, "VBR");
261 snprint(str, sizeof str, "CAAR");
265 snprint(str, sizeof str, "MSP");
269 snprint(str, sizeof str, "ISP");
273 snprint(str, sizeof str, "FPCR");
277 snprint(str, sizeof str, "FPSR");
281 snprint(str, sizeof str, "FPIAR");
285 snprint(str, sizeof str, "TREE");
289 snprint(str, sizeof str, "TC");
293 snprint(str, sizeof str, "ITT0");
297 snprint(str, sizeof str, "ITT1");
301 snprint(str, sizeof str, "DTT0");
305 snprint(str, sizeof str, "DTT1");
309 snprint(str, sizeof str, "MMUSR");
312 snprint(str, sizeof str, "URP");
316 snprint(str, sizeof str, "SRP");
319 return fmtstrcpy(fp, str);
326 char str[30], *p, *a;
328 a = va_arg(fp->args, char*);
330 for(i=0; i<sizeof(double); i++) {
332 if(c >= 'a' && c <= 'z' ||
333 c >= 'A' && c <= 'Z' ||
334 c >= '0' && c <= '9') {
341 if(c < 040 || c >= 0177)
342 break; /* not portable */
360 *p++ = ((c>>3) & 7) + '0';
361 *p++ = (c & 7) + '0';
364 return fmtstrcpy(fp, str);
370 char buf[STRINGSZ], *tn;
374 if(curtext != P && curtext->from.sym != S)
375 tn = curtext->from.sym->name;
377 vseprint(buf, buf+sizeof(buf), fmt, arg);
379 print("%s: %s\n", tn, buf);
383 print("too many errors\n");