7 fmtinstall('A', Aconv);
8 fmtinstall('D', Dconv);
9 fmtinstall('P', Pconv);
10 fmtinstall('S', Sconv);
11 fmtinstall('N', Nconv);
12 fmtinstall('R', Rconv);
28 p = va_arg(fp->args, Prog*);
31 if(a == ADATA || a == AINIT || a == ADYNT)
32 snprint(str, sizeof str, "(%d) %A %D/%d,%D", p->line, a, &p->from, p->reg, &p->to);
34 if(p->reg == NREG && p->from3.type == D_NONE)
35 snprint(str, sizeof str, "%s(%d) %A %D,%D",
36 p->mark & NOSCHED ? "*" : "", p->line, a,
39 if(a != ATEXT && p->from.type == D_OREG) {
40 snprint(str, sizeof str, "%s(%d) %A %ld(R%d+R%d),%D",
41 p->mark & NOSCHED ? "*" : "", p->line, a,
42 p->from.offset, p->from.reg, p->reg, &p->to);
44 if(p->to.type == D_OREG) {
45 snprint(str, sizeof str, "%s(%d) %A %D,%ld(R%d+R%d)",
46 p->mark & NOSCHED ? "*" : "", p->line, a,
47 &p->from, p->to.offset, p->to.reg, p->reg);
49 snprint(str, sizeof str, "%s(%d) %A %D",
50 p->mark & NOSCHED ? "*" : "", p->line, a,
53 snprint(str + strlen(str), sizeof(str) - strlen(str),
54 ",%c%d", p->from.type==D_FREG?'F':'R', p->reg);
55 if(p->from3.type != D_NONE)
56 snprint(str + strlen(str), sizeof(str) - strlen(str),
58 snprint(str + strlen(str), sizeof(str) - strlen(str),
62 return fmtstrcpy(fp, str);
71 a = va_arg(fp->args, int);
73 if(a >= AXXX && a < ALAST)
75 return fmtstrcpy(fp, s);
85 a = va_arg(fp->args, Adr*);
89 snprint(str, sizeof str, "GOK-type(%d)", a->type);
94 if(a->name != D_NONE || a->reg != NREG || a->sym != S)
95 snprint(str, sizeof str, "%N(R%d)(NONE)", a, a->reg);
100 snprint(str, sizeof str, "$%N(R%d)", a, a->reg);
102 snprint(str, sizeof str, "$%N", a);
107 snprint(str, sizeof str, "%N(R%d)", a, a->reg);
109 snprint(str, sizeof str, "%N", a);
113 snprint(str, sizeof str, "R%d", a->reg);
114 if(a->name != D_NONE || a->sym != S)
115 snprint(str, sizeof str, "%N(R%d)(REG)", a, a->reg);
119 snprint(str, sizeof str, "F%d", a->reg);
120 if(a->name != D_NONE || a->sym != S)
121 snprint(str, sizeof str, "%N(F%d)(REG)", a, a->reg);
128 snprint(str, sizeof str, "CR%d", a->reg);
129 if(a->name != D_NONE || a->sym != S)
130 snprint(str, sizeof str, "%N(C%d)(REG)", a, a->reg);
134 if(a->name == D_NONE && a->sym == S) {
136 case D_XER: snprint(str, sizeof str, "XER"); break;
137 case D_LR: snprint(str, sizeof str, "LR"); break;
138 case D_CTR: snprint(str, sizeof str, "CTR"); break;
139 default: snprint(str, sizeof str, "SPR(%ld)", a->offset); break;
143 snprint(str, sizeof str, "SPR-GOK(%d)", a->reg);
144 if(a->name != D_NONE || a->sym != S)
145 snprint(str, sizeof str, "%N(SPR-GOK%d)(REG)", a, a->reg);
149 if(a->name == D_NONE && a->sym == S) {
151 snprint(str, sizeof str, "DCR(%ld)", a->offset);
153 snprint(str, sizeof str, "DCR(R%d)", a->reg);
156 snprint(str, sizeof str, "DCR-GOK(%d)", a->reg);
157 if(a->name != D_NONE || a->sym != S)
158 snprint(str, sizeof str, "%N(DCR-GOK%d)(REG)", a, a->reg);
162 snprint(str, sizeof str, "OPT(%d)", a->reg);
167 strcpy(str, "FPSCR");
169 snprint(str, sizeof str, "FPSCR(%d)", a->reg);
173 snprint(str, sizeof str, "MSR");
177 snprint(str, sizeof str, "SREG(%d)", a->reg);
178 if(a->name != D_NONE || a->sym != S)
179 snprint(str, sizeof str, "%N(SREG%d)(REG)", a, a->reg);
183 if(curp->cond != P) {
188 snprint(str, sizeof str, "%s+%.5lux(BRANCH)", a->sym->name, v);
190 snprint(str, sizeof str, "%.5lux(BRANCH)", v);
193 snprint(str, sizeof str, "%s+%ld(APC)", a->sym->name, a->offset);
195 snprint(str, sizeof str, "%ld(APC)", a->offset);
199 snprint(str, sizeof str, "$%lux-%lux", a->ieee.h, a->ieee.l);
203 snprint(str, sizeof str, "$\"%S\"", a->sval);
206 return fmtstrcpy(fp, str);
216 a = va_arg(fp->args, Adr*);
219 snprint(str, sizeof str, "%ld", a->offset);
224 snprint(str, sizeof str, "GOK-name(%d)", a->name);
228 snprint(str, sizeof str, "%s+%ld(SB)", s->name, a->offset);
232 snprint(str, sizeof str, "%s<>+%ld(SB)", s->name, a->offset);
236 snprint(str, sizeof str, "%s-%ld(SP)", s->name, -a->offset);
240 snprint(str, sizeof str, "%s+%ld(FP)", s->name, a->offset);
244 return fmtstrcpy(fp, str);
253 a = va_arg(fp->args, int);
255 if(a >= C_NONE && a <= C_NCLASS)
257 return fmtstrcpy(fp, s);
264 char str[STRINGSZ], *p, *a;
266 a = va_arg(fp->args, char*);
268 for(i=0; i<sizeof(long); i++) {
270 if(c >= 'a' && c <= 'z' ||
271 c >= 'A' && c <= 'Z' ||
272 c >= '0' && c <= '9' ||
273 c == ' ' || c == '%') {
294 *p++ = ((c>>3) & 7) + '0';
295 *p++ = (c & 7) + '0';
298 return fmtstrcpy(fp, str);
304 char buf[STRINGSZ], *tn;
308 if(curtext != P && curtext->from.sym != S)
309 tn = curtext->from.sym->name;
311 vseprint(buf, buf+sizeof(buf), fmt, arg);
313 print("%s: %s\n", tn, buf);
317 print("too many errors\n");