Mercurial > hg > Members > kono > os9 > sbc09
diff os9/mc09/mc.c @ 107:c5dd5c363d43
mc.c in intel64 ( LP64 )
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 29 Dec 2018 23:05:40 +0900 |
parents | 6566b9f47f4a |
children | c4e909f21b25 |
line wrap: on
line diff
--- a/os9/mc09/mc.c Sat Dec 29 18:29:06 2018 +0900 +++ b/os9/mc09/mc.c Sat Dec 29 23:05:40 2018 +0900 @@ -159,7 +159,8 @@ int sym,ch,chsave,type,mode,gfree,lfree,mflag,lineno,glineno; int labelno,gpc,lvar,disp; -int symval,args,heap[HEAPSIZE]; +int symval,args; +long heap[HEAPSIZE]; int blabel,clabel,dlabel,cslabel,ilabel,control,ac,ac2,lsrc,chk,asmf; unsigned hash; @@ -171,12 +172,22 @@ typedef struct nametable { char nm[9]; - int sc,ty,dsp; } NMTBL; + int sc,ty; long dsp; } NMTBL; NMTBL ntable[GSYMS+LSYMS],*nptr,*gnptr,*decl0(),*decl1(),*lsearch(),*gsearch(); struct {int fd,ln;/*char fcb[320]*/FILE *fcb;} *filep,filestack[FILES]; +long car(); +long cadr(); +long caddr(); +long cadddr(); +void leaxpcr(NMTBL *n); +long error(); +list2(long e1,long e2); +list3(long e1,long e2,long e3); +list4(long e1,long e2,long e3,long e4); + main(argc,argv) int argc; char **argv; @@ -228,6 +239,7 @@ decl(); } } +long error(n) int n; { if(n == EOFERR) @@ -275,6 +287,7 @@ "Bug of compiler"); errmsg(); exit(1); + return 0; } errmsg() {char *p,*lim; @@ -1284,7 +1297,7 @@ getsym(); break; case FUNCTION: - e1=list2(FNAME,(int)nptr); + e1=list2(FNAME,(long)nptr); type=list2(FUNCTION,nptr->ty); getsym(); break; @@ -1293,14 +1306,14 @@ { nptr->sc = FUNCTION; nptr->ty= INT; type= list2(FUNCTION,INT); - e1=expr15(list2(FNAME,(int)nptr)); + e1=expr15(list2(FNAME,(long)nptr)); break; } default:error(UDERR); } break; case STRING: - e1=list3(STRING,(int)sptr,symval); + e1=list3(STRING,(long)sptr,symval); type=list3(ARRAY,CHAR,symval); getsym(); break; @@ -1677,7 +1690,7 @@ gexpr(e1) int e1; -{int e2,e3; +{long e2,e3; if (chk) return; e2 = cadr(e1); switch (car(e1)) @@ -1879,7 +1892,7 @@ } function(e1) int e1; -{int e2,e3,e4,e5,nargs; +{long e2,e3,e4,e5,nargs; NMTBL *n; e2 = cadr(e1); nargs = 0; @@ -2374,6 +2387,7 @@ int n; { printf("\tLEAX\t%d,U\n",n); } +void leaxpcr(n) NMTBL *n; { printf("\tLEAX\t%s,PCR\n",n->nm); @@ -2798,7 +2812,7 @@ if (getsym() == IDENT) { if (nptr->sc == EMPTY) { nptr->sc = MACRO; - nptr->dsp = (int)cheapp; + nptr->dsp = (long)cheapp; while ((*cheapp++ = c = *chptr++) && c != '\n'); *cheapp++ = '\0'; @@ -2851,24 +2865,28 @@ return 1; } +long car(e) int e; { return heap[e]; } +long cadr(e) int e; { return heap[e+1]; } +long caddr(e) int e; { return heap[e+2]; } +long cadddr(e) int e; { return heap[e+3]; } list2(e1,e2) -int e1,e2; +long e1,e2; {int e; e=getfree(2); heap[e]=e1; @@ -2876,7 +2894,7 @@ return e; } list3(e1,e2,e3) -int e1,e2,e3; +long e1,e2,e3; {int e; e=getfree(3); heap[e]=e1; @@ -2885,7 +2903,7 @@ return e; } list4(e1,e2,e3,e4) -int e1,e2,e3,e4; +long e1,e2,e3,e4; {int e; e=getfree(4); heap[e]=e1; @@ -2910,7 +2928,8 @@ return e; } rplacad(e,n) -int e,n; +int e; +long n; { heap[e+1]=n; return e; }