📄 mfile2
字号:
# include "macdefs"# include "mac2defs"# include "manifest"# ifdef ONEPASS/* bunch of stuff for putting the passes together... */# define crslab crs2lab# define where where2# define xdebug x2debug# define tdebug t2debug# define deflab def2lab# define edebug e2debug# define eprint e2print# define getlab get2lab# define filename ftitle# endif/* cookies, used as arguments to codgen */# define FOREFF 01 /* compute for effects only */# define INAREG 02 /* compute into a register */# define INTAREG 04 /* compute into a scratch register */# define INBREG 010 /* compute into a lvalue register */# define INTBREG 020 /* compute into a scratch lvalue register */# define FORCC 040 /* compute for condition codes only */# define INTEMP 010000 /* compute into a temporary location */# define FORARG 020000 /* compute for an argument of a function */# define FORREW 040000 /* search the table, looking for a rewrite rule */ /* OP descriptors */ /* the ASG operator may be used on some of these */# define OPSIMP 010000 /* +, -, &, |, ^ */# define OPCOMM 010002 /* +, &, |, ^ */# define OPMUL 010004 /* *, / */# define OPDIV 010006 /* /, % */# define OPUNARY 010010 /* unary ops */# define OPLEAF 010012 /* leaves */# define OPANY 010014 /* any op... */# define OPLOG 010016 /* logical ops */# define OPFLOAT 010020 /* +, -, *, or / (for floats) */# define OPSHFT 010022 /* <<, >> */# define OPLTYPE 010024 /* leaf type nodes (e.g, NAME, ICON, etc. ) */ /* match returns */# define MNOPE 010000# define MDONE 010001 /* shapes */# define SANY 01 /* same as FOREFF */# define SAREG 02 /* same as INAREG */# define STAREG 04 /* same as INTAREG */# define SBREG 010 /* same as INBREG */# define STBREG 020 /* same as INTBREG */# define SCC 040 /* same as FORCC */# define SNAME 0100# define SCON 0200# define SFLD 0400# define SOREG 01000# define STARNM 02000# define STARREG 04000# define SWADD 040000# define SPECIAL 0100000# define SZERO SPECIAL# define SONE (SPECIAL|1)# define SMONE (SPECIAL|2) /* FORARG and INTEMP are carefully not conflicting with shapes */ /* types */# define TCHAR 01# define TSHORT 02# define TINT 04# define TLONG 010# define TFLOAT 020# define TDOUBLE 040# define TPOINT 0100# define TUCHAR 0200# define TUSHORT 0400# define TUNSIGNED 01000# define TULONG 02000# define TPTRTO 04000 /* pointer to one of the above */# define TANY 010000 /* matches anything within reason */# define TSTRUCT 020000 /* structure or union */ /* reclamation cookies */# define RNULL 0 /* clobber result */# define RLEFT 01# define RRIGHT 02# define RESC1 04# define RESC2 010# define RESC3 020# define RESCC 04000# define RNOP 010000 /* DANGER: can cause loops.. */ /* needs */# define NAREG 01# define NACOUNT 03# define NAMASK 017# define NASL 04 /* share left register */# define NASR 010 /* share right register */# define NBREG 020# define NBCOUNT 060# define NBMASK 0360# define NBSL 0100# define NBSR 0200# define NTEMP 0400# define NTMASK 07400# define REWRITE 010000# define MUSTDO 010000 /* force register requirements */# define NOPREF 020000 /* no preference for register assignment */ /* register allocation */extern int rstatus[];extern int busy[];extern struct respref { int cform; int mform; } respref[];# define isbreg(r) (rstatus[r]&SBREG)# define istreg(r) (rstatus[r]&(STBREG|STAREG))# define istnode(p) (p->op==REG && istreg(p->rval))# define TBUSY 01000# define REGLOOP(i) for(i=0;i<REGSZ;++i)# define SETSTO(x,y) (stotree=(x),stocook=(y))extern int stocook;# define DELAYS 20extern NODE *deltrees[DELAYS];extern int deli; /* mmmmm */extern NODE *stotree;extern int callflag;extern int fregs;# ifndef ONEPASSunion ndu { struct { int op; int rall; TWORD type; int su; char name[NCHNAM]; NODE *left; NODE *right; }; struct { int op; int rall; TWORD type; int su; char name[NCHNAM]; CONSZ lval; int rval; }; struct { int op, rall; TWORD type; int su; int label; /* for use with branching */ }; struct { int op, rall; TWORD type; int su; int stsize; /* sizes of structure objects */ int stalign; /* alignment of structure objects */ }; };#endifextern NODE node[];extern struct optab { int op; int visit; int lshape; int ltype; int rshape; int rtype; int needs; int rewrite; char * cstring; } table[];extern NODE resc[];extern OFFSZ tmpoff;extern OFFSZ maxoff;extern OFFSZ baseoff;extern OFFSZ maxtemp;extern int maxtreg;extern int ftnno;extern int rtyflg;extern int nrecur; /* flag to keep track of recursions */# define NRECUR (10*TREESZ)extern NODE *talloc(), *eread(), *tcopy(), *getlr();extern CONSZ rdin();extern int eprint();extern char *rnames[];extern int lineno;extern char filename[];extern int fldshf, fldsz;extern int lflag, xdebug, udebug, edebug, odebug, rdebug, radebug, tdebug, sdebug;#ifndef callchk#define callchk(x) allchk()#endif#ifndef PUTCHAR# define PUTCHAR(x) putchar(x)#endif /* macros for doing double indexing */# define R2PACK(x,y) (0200*((x)+1)+y)# define R2UPK1(x) (((x)>>7)-1)# define R2UPK2(x) ((x)&0177)# define R2TEST(x) ((x)>=0200)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -