17dd7cddfSDavid du Colombier #include <u.h> 27dd7cddfSDavid du Colombier #include <libc.h> 37dd7cddfSDavid du Colombier #include <bio.h> 47dd7cddfSDavid du Colombier #include "../5c/5.out.h" 57dd7cddfSDavid du Colombier 67dd7cddfSDavid du Colombier #ifndef EXTERN 77dd7cddfSDavid du Colombier #define EXTERN extern 87dd7cddfSDavid du Colombier #endif 97dd7cddfSDavid du Colombier 107dd7cddfSDavid du Colombier typedef struct Sym Sym; 117dd7cddfSDavid du Colombier typedef struct Gen Gen; 127dd7cddfSDavid du Colombier typedef struct Io Io; 137dd7cddfSDavid du Colombier typedef struct Hist Hist; 147dd7cddfSDavid du Colombier 157dd7cddfSDavid du Colombier #define MAXALIGN 7 167dd7cddfSDavid du Colombier #define FPCHIP 1 177dd7cddfSDavid du Colombier #define NSYMB 8192 18*2ec6491fSDavid du Colombier #define BUFSIZ (16*1024) 197dd7cddfSDavid du Colombier #define HISTSZ 20 207dd7cddfSDavid du Colombier #define NINCLUDE 10 217dd7cddfSDavid du Colombier #define NHUNK 10000 227dd7cddfSDavid du Colombier #define EOF (-1) 237dd7cddfSDavid du Colombier #define IGN (-2) 247dd7cddfSDavid du Colombier #define GETC() ((--fi.c < 0)? filbuf(): *fi.p++ & 0xff) 257dd7cddfSDavid du Colombier #define NHASH 503 267dd7cddfSDavid du Colombier #define STRINGSZ 200 277dd7cddfSDavid du Colombier #define NMACRO 10 287dd7cddfSDavid du Colombier 297dd7cddfSDavid du Colombier struct Sym 307dd7cddfSDavid du Colombier { 317dd7cddfSDavid du Colombier Sym* link; 327dd7cddfSDavid du Colombier char* macro; 337dd7cddfSDavid du Colombier long value; 347dd7cddfSDavid du Colombier ushort type; 357dd7cddfSDavid du Colombier char *name; 367dd7cddfSDavid du Colombier char sym; 377dd7cddfSDavid du Colombier }; 387dd7cddfSDavid du Colombier #define S ((Sym*)0) 397dd7cddfSDavid du Colombier 407dd7cddfSDavid du Colombier EXTERN struct 417dd7cddfSDavid du Colombier { 427dd7cddfSDavid du Colombier char* p; 437dd7cddfSDavid du Colombier int c; 447dd7cddfSDavid du Colombier } fi; 457dd7cddfSDavid du Colombier 467dd7cddfSDavid du Colombier struct Io 477dd7cddfSDavid du Colombier { 487dd7cddfSDavid du Colombier Io* link; 497dd7cddfSDavid du Colombier char b[BUFSIZ]; 507dd7cddfSDavid du Colombier char* p; 517dd7cddfSDavid du Colombier short c; 527dd7cddfSDavid du Colombier short f; 537dd7cddfSDavid du Colombier }; 547dd7cddfSDavid du Colombier #define I ((Io*)0) 557dd7cddfSDavid du Colombier 567dd7cddfSDavid du Colombier EXTERN struct 577dd7cddfSDavid du Colombier { 587dd7cddfSDavid du Colombier Sym* sym; 597dd7cddfSDavid du Colombier short type; 607dd7cddfSDavid du Colombier } h[NSYM]; 617dd7cddfSDavid du Colombier 627dd7cddfSDavid du Colombier struct Gen 637dd7cddfSDavid du Colombier { 647dd7cddfSDavid du Colombier Sym* sym; 657dd7cddfSDavid du Colombier long offset; 667dd7cddfSDavid du Colombier short type; 677dd7cddfSDavid du Colombier short reg; 687dd7cddfSDavid du Colombier short name; 697dd7cddfSDavid du Colombier double dval; 707dd7cddfSDavid du Colombier char sval[8]; 717dd7cddfSDavid du Colombier }; 727dd7cddfSDavid du Colombier 737dd7cddfSDavid du Colombier struct Hist 747dd7cddfSDavid du Colombier { 757dd7cddfSDavid du Colombier Hist* link; 767dd7cddfSDavid du Colombier char* name; 777dd7cddfSDavid du Colombier long line; 787dd7cddfSDavid du Colombier long offset; 797dd7cddfSDavid du Colombier }; 807dd7cddfSDavid du Colombier #define H ((Hist*)0) 817dd7cddfSDavid du Colombier 827dd7cddfSDavid du Colombier enum 837dd7cddfSDavid du Colombier { 847dd7cddfSDavid du Colombier CLAST, 857dd7cddfSDavid du Colombier CMACARG, 867dd7cddfSDavid du Colombier CMACRO, 877dd7cddfSDavid du Colombier CPREPROC, 887dd7cddfSDavid du Colombier 897dd7cddfSDavid du Colombier Always = 14, 907dd7cddfSDavid du Colombier }; 917dd7cddfSDavid du Colombier 927dd7cddfSDavid du Colombier EXTERN char debug[256]; 937dd7cddfSDavid du Colombier EXTERN Sym* hash[NHASH]; 947dd7cddfSDavid du Colombier EXTERN char* Dlist[30]; 957dd7cddfSDavid du Colombier EXTERN int nDlist; 967dd7cddfSDavid du Colombier EXTERN Hist* ehist; 977dd7cddfSDavid du Colombier EXTERN int newflag; 987dd7cddfSDavid du Colombier EXTERN Hist* hist; 997dd7cddfSDavid du Colombier EXTERN char* hunk; 1007dd7cddfSDavid du Colombier EXTERN char* include[NINCLUDE]; 1017dd7cddfSDavid du Colombier EXTERN Io* iofree; 1027dd7cddfSDavid du Colombier EXTERN Io* ionext; 1037dd7cddfSDavid du Colombier EXTERN Io* iostack; 1047dd7cddfSDavid du Colombier EXTERN long lineno; 1057dd7cddfSDavid du Colombier EXTERN int nerrors; 1067dd7cddfSDavid du Colombier EXTERN long nhunk; 1077dd7cddfSDavid du Colombier EXTERN int ninclude; 1087dd7cddfSDavid du Colombier EXTERN Gen nullgen; 1097dd7cddfSDavid du Colombier EXTERN char* outfile; 1107dd7cddfSDavid du Colombier EXTERN int pass; 1117dd7cddfSDavid du Colombier EXTERN char* pathname; 1127dd7cddfSDavid du Colombier EXTERN long pc; 1137dd7cddfSDavid du Colombier EXTERN int peekc; 1147dd7cddfSDavid du Colombier EXTERN int sym; 1157dd7cddfSDavid du Colombier EXTERN char symb[NSYMB]; 1167dd7cddfSDavid du Colombier EXTERN int thechar; 1177dd7cddfSDavid du Colombier EXTERN char* thestring; 1187dd7cddfSDavid du Colombier EXTERN long thunk; 1197dd7cddfSDavid du Colombier EXTERN Biobuf obuf; 1207dd7cddfSDavid du Colombier 1217dd7cddfSDavid du Colombier void* alloc(long); 1227dd7cddfSDavid du Colombier void* allocn(void*, long, long); 1237dd7cddfSDavid du Colombier void errorexit(void); 1247dd7cddfSDavid du Colombier void pushio(void); 1257dd7cddfSDavid du Colombier void newio(void); 1267dd7cddfSDavid du Colombier void newfile(char*, int); 1277dd7cddfSDavid du Colombier Sym* slookup(char*); 1287dd7cddfSDavid du Colombier Sym* lookup(void); 1297dd7cddfSDavid du Colombier void syminit(Sym*); 1307dd7cddfSDavid du Colombier long yylex(void); 1317dd7cddfSDavid du Colombier int getc(void); 1327dd7cddfSDavid du Colombier int getnsc(void); 1337dd7cddfSDavid du Colombier void unget(int); 1347dd7cddfSDavid du Colombier int escchar(int); 1357dd7cddfSDavid du Colombier void cinit(void); 1367dd7cddfSDavid du Colombier void pinit(char*); 1377dd7cddfSDavid du Colombier void cclean(void); 1387dd7cddfSDavid du Colombier int isreg(Gen*); 1397dd7cddfSDavid du Colombier void outcode(int, int, Gen*, int, Gen*); 1407dd7cddfSDavid du Colombier void zname(char*, int, int); 1417dd7cddfSDavid du Colombier void zaddr(Gen*, int); 1427dd7cddfSDavid du Colombier void ieeedtod(Ieee*, double); 1437dd7cddfSDavid du Colombier int filbuf(void); 1447dd7cddfSDavid du Colombier Sym* getsym(void); 1457dd7cddfSDavid du Colombier void domacro(void); 1467dd7cddfSDavid du Colombier void macund(void); 1477dd7cddfSDavid du Colombier void macdef(void); 1487dd7cddfSDavid du Colombier void macexpand(Sym*, char*); 1497dd7cddfSDavid du Colombier void macinc(void); 1507dd7cddfSDavid du Colombier void maclin(void); 1517dd7cddfSDavid du Colombier void macprag(void); 1527dd7cddfSDavid du Colombier void macif(int); 1537dd7cddfSDavid du Colombier void macend(void); 1547dd7cddfSDavid du Colombier void outhist(void); 1557dd7cddfSDavid du Colombier void dodefine(char*); 1567dd7cddfSDavid du Colombier void prfile(long); 1577dd7cddfSDavid du Colombier void linehist(char*, int); 1587dd7cddfSDavid du Colombier void gethunk(void); 1597dd7cddfSDavid du Colombier void yyerror(char*, ...); 1607dd7cddfSDavid du Colombier int yyparse(void); 1617dd7cddfSDavid du Colombier void setinclude(char*); 1627dd7cddfSDavid du Colombier int assemble(char*); 1637dd7cddfSDavid du Colombier 1647dd7cddfSDavid du Colombier /* 1657dd7cddfSDavid du Colombier * system-dependent stuff from ../cc/compat.c 1667dd7cddfSDavid du Colombier */ 1677dd7cddfSDavid du Colombier 1687dd7cddfSDavid du Colombier enum /* keep in synch with ../cc/cc.h */ 1697dd7cddfSDavid du Colombier { 1707dd7cddfSDavid du Colombier Plan9 = 1<<0, 1717dd7cddfSDavid du Colombier Unix = 1<<1, 1727dd7cddfSDavid du Colombier Windows = 1<<2, 1737dd7cddfSDavid du Colombier }; 1747dd7cddfSDavid du Colombier int mywait(int*); 1757dd7cddfSDavid du Colombier int mycreat(char*, int); 1767dd7cddfSDavid du Colombier int systemtype(int); 1777dd7cddfSDavid du Colombier int pathchar(void); 1787dd7cddfSDavid du Colombier int myfork(void); 1797dd7cddfSDavid du Colombier void* mysbrk(ulong); 180