diff --git a/sys/src/cmd/acid/acid.h b/sys/src/cmd/acid/acid.h index bd0d6b7cb..41f63db4f 100644 --- a/sys/src/cmd/acid/acid.h +++ b/sys/src/cmd/acid/acid.h @@ -29,6 +29,8 @@ typedef struct Frtype Frtype; Extern int kernel; Extern int text; Extern int silent; +Extern int fsize[]; +Extern char afmt; Extern Fhdr fhdr; Extern int line; Extern Biobuf* bout; diff --git a/sys/src/cmd/acid/builtin.c b/sys/src/cmd/acid/builtin.c index 0ebc11bbf..b8d904c7b 100644 --- a/sys/src/cmd/acid/builtin.c +++ b/sys/src/cmd/acid/builtin.c @@ -87,7 +87,7 @@ struct Btab 0 }; -char vfmt[] = "aBbcCdDfFgGiIoOqQrRsSuUVWxXYZ38"; +char vfmt[] = "aABbcCdDfFgGiIoOqQrRsSuUVWxXYZ38"; void mkprint(Lsym *s) @@ -365,7 +365,7 @@ follow(Node *r, Node *args) for(i = 0; i < n; i++) { l = al(TINT); l->ival = f[i]; - l->fmt = 'X'; + l->fmt = 'A'; *tail = l; tail = &l->next; } @@ -390,11 +390,11 @@ funcbound(Node *r, Node *args) r->l = al(TINT); l = r->l; l->ival = bounds[0]; - l->fmt = 'X'; + l->fmt = 'A'; l->next = al(TINT); l = l->next; l->ival = bounds[1]; - l->fmt = 'X'; + l->fmt = 'A'; } } @@ -970,10 +970,14 @@ void patom(char type, Store *res) { int i; + char fmt; char buf[512]; extern char *typenames[]; - switch(res->fmt) { + fmt = res->fmt; + if(fmt == 'A') + fmt = afmt; + switch(fmt) { case 'c': Bprint(bout, "%c", (int)res->ival); break; @@ -1065,7 +1069,6 @@ patom(char type, Store *res) Bprint(bout, "%S", (Rune*)res->string->string); break; case 'a': - case 'A': symoff(buf, sizeof(buf), res->ival, CANY); Bprint(bout, "%s", buf); break; @@ -1117,10 +1120,7 @@ comx(Node res) Lsym *sl; Node *n, xx; - if(res.fmt != 'a' && res.fmt != 'A') - return 0; - - if(res.comt == 0 || res.comt->base == 0) + if(res.fmt != 'a' || res.comt == 0 || res.comt->base == 0) return 0; sl = res.comt->base; diff --git a/sys/src/cmd/acid/expr.c b/sys/src/cmd/acid/expr.c index 4ba0943c2..cd24ec7b8 100644 --- a/sys/src/cmd/acid/expr.c +++ b/sys/src/cmd/acid/expr.c @@ -6,7 +6,7 @@ #define Extern extern #include "acid.h" -static int fsize[] = +int fsize[] = { ['A'] 4, ['B'] 4, @@ -149,7 +149,7 @@ oframe(Node *n, Node *res) res->ival = ival; res->op = OCONST; - res->fmt = 'X'; + res->fmt = 'A'; res->type = TINT; /* Try and set comt */ diff --git a/sys/src/cmd/acid/list.c b/sys/src/cmd/acid/list.c index 5ad7c54e4..be0c3362b 100644 --- a/sys/src/cmd/acid/list.c +++ b/sys/src/cmd/acid/list.c @@ -185,7 +185,7 @@ listvar(char *s, vlong v) l->string = strnode(s); l->next = al(TINT); l = l->next; - l->fmt = 'X'; + l->fmt = 'A'; l->ival = v; return tl; @@ -260,7 +260,7 @@ trlist(Map *map, uvlong pc, uvlong sp, Symbol *sym) l = al(TINT); /* Function address */ q->l = l; l->ival = sym->value; - l->fmt = 'X'; + l->fmt = 'A'; l->next = al(TINT); /* called from address */ l = l->next; diff --git a/sys/src/cmd/acid/main.c b/sys/src/cmd/acid/main.c index 0ef9f65cf..9a18f5f53 100644 --- a/sys/src/cmd/acid/main.c +++ b/sys/src/cmd/acid/main.c @@ -281,7 +281,7 @@ readtext(char *s) if(mach->sbreg && lookup(0, mach->sbreg, &sym)) { mach->sb = sym.value; l = enter("SB", Tid); - l->v->fmt = 'X'; + l->v->fmt = 'A'; l->v->ival = mach->sb; l->v->type = TINT; l->v->set = 1; diff --git a/sys/src/cmd/acid/util.c b/sys/src/cmd/acid/util.c index b47d4cbbb..46431f75e 100644 --- a/sys/src/cmd/acid/util.c +++ b/sys/src/cmd/acid/util.c @@ -7,6 +7,7 @@ #include "acid.h" #include "y.tab.h" +char afmt = 'X'; static int syren; Lsym* @@ -88,7 +89,7 @@ varsym(void) l->v->type = TINT; l->v->ival = v; if(l->v->comt == 0) - l->v->fmt = 'X'; + l->v->fmt = 'A'; /* Enter as list of { name, type, value } */ list = al(TSTRING); @@ -101,7 +102,7 @@ varsym(void) list->ival = s->type; list->next = al(TINT); list = list->next; - list->fmt = 'X'; + list->fmt = l->v->fmt; list->ival = v; } @@ -122,6 +123,12 @@ varreg(void) Reglist *r; List **tail, *li; + if(mach->szaddr == 8){ + afmt = 'Y'; + fsize['a'] = fsize[afmt]; + fsize['A'] = fsize[afmt]; + } + l = mkvar("registers"); v = l->v; v->set = 1;