8 fmtinstall('A', Aconv);
9 fmtinstall('B', Bconv);
10 fmtinstall('P', Pconv);
11 fmtinstall('S', Sconv);
12 fmtinstall('D', Dconv);
13 fmtinstall('R', Rconv);
19 char str[STRINGSZ], ss[STRINGSZ], *s;
23 memset(str, 0, sizeof str);
24 bits = va_arg(fp->args, Bits);
28 strncat(str, " ", sizeof str - 1);
30 snprint(ss, sizeof(ss), "$%ld", var[i].offset);
34 strncat(str, s, sizeof str - 1);
35 bits.b[i/32] &= ~(1L << (i%32));
37 return fmtstrcpy(fp, str);
46 p = va_arg(fp->args, Prog*);
48 snprint(str, sizeof(str), " %A %D/%d,%D",
49 p->as, &p->from, p->from.scale, &p->to);
50 else if(p->as == ATEXT)
51 snprint(str, sizeof(str), " %A %D,%d,%D",
52 p->as, &p->from, p->from.scale, &p->to);
54 snprint(str, sizeof(str), " %A %D,%D",
55 p->as, &p->from, &p->to);
56 return fmtstrcpy(fp, str);
64 i = va_arg(fp->args, int);
65 return fmtstrcpy(fp, anames[i]);
75 a = va_arg(fp->args, Adr*);
79 snprint(str, sizeof(str), "%ld(%R)", a->offset, i-D_INDIR);
81 snprint(str, sizeof(str), "(%R)", i-D_INDIR);
88 snprint(str, sizeof(str), "$%ld,%R", a->offset, i);
90 snprint(str, sizeof(str), "%R", i);
98 snprint(str, sizeof(str), "%ld(PC)", a->offset-pc);
102 snprint(str, sizeof(str), "%s+%ld(SB)", a->sym->name, a->offset);
106 snprint(str, sizeof(str), "%s<>+%ld(SB)", a->sym->name, a->offset);
110 snprint(str, sizeof(str), "%s+%ld(SP)", a->sym->name, a->offset);
115 snprint(str, sizeof(str), "%s+%ld(FP)", a->sym->name, a->offset);
117 snprint(str, sizeof(str), "%ld(FP)", a->offset);
121 snprint(str, sizeof(str), "$%ld", a->offset);
125 snprint(str, sizeof(str), "$(%.17e)", a->dval);
129 snprint(str, sizeof(str), "$\"%S\"", a->sval);
135 snprint(str, sizeof(str), "$%D", a);
141 if(a->index != D_NONE)
142 return fmtprint(fp, "%s(%R*%d)", str, (int)a->index, (int)a->scale);
144 return fmtstrcpy(fp, str);
225 r = va_arg(fp->args, int);
226 if(r >= D_AL && r <= D_NONE)
227 snprint(str, sizeof(str), "%s", regstr[r-D_AL]);
229 snprint(str, sizeof(str), "gok(%d)", r);
231 return fmtstrcpy(fp, str);
238 char str[30], *p, *a;
240 a = va_arg(fp->args, char*);
242 for(i=0; i<sizeof(double); i++) {
244 if(c >= 'a' && c <= 'z' ||
245 c >= 'A' && c <= 'Z' ||
246 c >= '0' && c <= '9') {
253 if(c < 040 || c >= 0177)
254 break; /* not portable */
272 *p++ = ((c>>3) & 7) + '0';
273 *p++ = (c & 7) + '0';
276 return fmtstrcpy(fp, str);