Annotation of 43BSDTahoe/lib/mip/pass2.h, revision 1.1

1.1     ! root        1: /*     pass2.h 4.4     87/12/10        */
        !             2: 
        !             3: #ifndef _PASS2_
        !             4: #define        _PASS2_
        !             5: 
        !             6: #include "macdefs.h"
        !             7: #include "mac2defs.h"
        !             8: #include "manifest.h"
        !             9: 
        !            10: /* cookies, used as arguments to codgen */
        !            11: #define FOREFF 01              /* compute for effects only */
        !            12: #define INAREG 02              /* compute into a register */
        !            13: #define INTAREG        04              /* compute into a scratch register */
        !            14: #define INBREG 010             /* compute into a lvalue register */
        !            15: #define INTBREG 020            /* compute into a scratch lvalue register */
        !            16: #define FORCC  040             /* compute for condition codes only */
        !            17: #define INTEMP 010000          /* compute into a temporary location */
        !            18: #define FORARG 020000          /* compute for an argument of a function */
        !            19: #define FORREW 040000          /* search the table for a rewrite rule */
        !            20: 
        !            21: /*
        !            22:  * OP descriptors,
        !            23:  * the ASG operator may be used on some of these
        !            24:  */
        !            25: #define OPSIMP 010000          /* +, -, &, |, ^ */
        !            26: #define OPCOMM 010002          /* +, &, |, ^ */
        !            27: #define OPMUL  010004          /* *, / */
        !            28: #define OPDIV  010006          /* /, % */
        !            29: #define OPUNARY        010010          /* unary ops */
        !            30: #define OPLEAF 010012          /* leaves */
        !            31: #define OPANY  010014          /* any op... */
        !            32: #define OPLOG  010016          /* logical ops */
        !            33: #define OPFLOAT        010020          /* +, -, *, or / (for floats) */
        !            34: #define OPSHFT 010022          /* <<, >> */
        !            35: #define OPLTYPE        010024          /* leaf type nodes (e.g, NAME, ICON, etc.) */
        !            36: 
        !            37: /* match returns */
        !            38: #define MNOPE  010000          /* no match generated */
        !            39: #define MDONE  010001          /* done evalution */
        !            40: 
        !            41: /* shapes */
        !            42: #define SANY   01              /* same as FOREFF */
        !            43: #define SAREG  02              /* same as INAREG */
        !            44: #define STAREG 04              /* same as INTAREG */
        !            45: #define SBREG  010             /* same as INBREG */
        !            46: #define STBREG 020             /* same as INTBREG */
        !            47: #define SCC    040             /* same as FORCC */
        !            48: #define SNAME  0100            /* name */
        !            49: #define SCON   0200            /* constant */
        !            50: #define SFLD   0400            /* field */
        !            51: #define SOREG  01000           /* offset from register */
        !            52: /* indirection or wild card shapes */
        !            53: #ifndef WCARD1
        !            54: #define STARNM 02000           /* indirect through name */
        !            55: #endif
        !            56: #ifndef WCARD2
        !            57: #define STARREG        04000           /* indirect through register */
        !            58: #endif
        !            59: #define SWADD  040000          /* word address */
        !            60: #define SPECIAL        0100000         /* special stuff (follows) */
        !            61: #define SZERO  SPECIAL         /* constant zero */
        !            62: #define SONE   (SPECIAL|1)     /* constant +1 */
        !            63: #define SMONE  (SPECIAL|2)     /* constant -1 */
        !            64: #define SCCON  (SPECIAL|3)     /* -256 <= constant < 256 */
        !            65: #define SSCON  (SPECIAL|4)     /* -32768 <= constant < 32768 */
        !            66: #define SSOREG (SPECIAL|5)     /* non-indexed OREG */
        !            67: #define SMCON  (SPECIAL|6)     /* constant < 0 */
        !            68: /* FORARG and INTEMP are carefully not conflicting with shapes */
        !            69: 
        !            70: /* types */
        !            71: #define TCHAR          01      /* char */
        !            72: #define TSHORT         02      /* short */
        !            73: #define TINT           04      /* int */
        !            74: #define TLONG          010     /* long */
        !            75: #define TFLOAT         020     /* float */
        !            76: #define TDOUBLE                040     /* double */
        !            77: #define TPOINT         0100    /* pointer to something */
        !            78: #define TUCHAR         0200    /* unsigned char */
        !            79: #define TUSHORT                0400    /* unsigned short */
        !            80: #define TUNSIGNED      01000   /* unsigned int */
        !            81: #define TULONG         02000   /* unsigned long */
        !            82: #define TPTRTO         04000   /* pointer to one of the above */
        !            83: #define TANY           010000  /* matches anything within reason */
        !            84: #define TSTRUCT                020000  /* structure or union */
        !            85: 
        !            86: /* reclamation cookies */
        !            87: #define RNULL          0       /* clobber result */
        !            88: #define RLEFT          01      /* reclaim left resource */
        !            89: #define RRIGHT         02      /* reclaim right resource */
        !            90: #define RESC1          04      /* reclaim resource allocated #1 */
        !            91: #define RESC2          010     /* reclaim resource allocated #2 */
        !            92: #define RESC3          020     /* reclaim resource allocated #3 */
        !            93: #define RESCC          04000   /* reclaim condition codes */
        !            94: #define RNOP           010000  /* DANGER: can cause loops.. */
        !            95: 
        !            96: /* needs */
        !            97: #define NAREG          01      /* need an A register */
        !            98: #define NACOUNT                03      /* count mask of A registers */
        !            99: #define NAMASK         017     /* A register need field mask */
        !           100: #define NASL           04      /* need A register shared with left resource */
        !           101: #define NASR           010     /* need A register shared with right resource */
        !           102: #define NBREG          020     /* need a B register */
        !           103: #define NBCOUNT                060     /* count mask of B register */
        !           104: #define NBMASK         0360    /* B register need field mask */
        !           105: #define NBSL           0100    /* need B register shared with left resource */
        !           106: #define NBSR           0200    /* need B register shared with right resource */
        !           107: #define NTEMP          0400    /* need temporary storage location */
        !           108: #define NTMASK         07400   /* count mask of temporary storage locations */
        !           109: #define REWRITE                010000  /* need rewrite */
        !           110: #define EITHER         040000  /* allocate all resources or nothing */
        !           111: 
        !           112: #define MUSTDO         010000  /* force register requirements */
        !           113: #ifndef NOPREF
        !           114: /* also defined in onepass.h */
        !           115: #define NOPREF         020000  /* no preference for register assignment */
        !           116: #endif
        !           117: #define        NEVEN           0100000 /* even register required */
        !           118: 
        !           119: /* register allocation */
        !           120: extern int rstatus[];          /* register status info */
        !           121: extern int busy[];             /* register use info */
        !           122: extern struct respref {
        !           123:        int     cform;
        !           124:        int     mform;
        !           125: } respref[];                   /* resource preference rules */
        !           126: 
        !           127: #define isbreg(r)      (rstatus[r]&SBREG)
        !           128: #define istreg(r)      (rstatus[r]&(STBREG|STAREG))
        !           129: #define istnode(p)     (p->in.op==REG && istreg(p->tn.rval))
        !           130: 
        !           131: #define TBUSY          01000   /* register temporarily busy (during alloc) */
        !           132: #define PBUSY          02000   /* this reg and next one are used as a pair */
        !           133: #define ISBUSY(r)      (((busy[r])&(PBUSY-1)) > 1)
        !           134: #define REGLOOP(i)     for (i = 0; i < REGSZ; ++i)
        !           135: 
        !           136: extern NODE *deltrees[DELAYS]; /* trees held for delayed evaluation */
        !           137: extern int deli;               /* mmmmm */
        !           138: 
        !           139: #define SETSTO(x,y)    (stotree = (x), stocook = (y))
        !           140: extern int stocook;
        !           141: extern NODE *stotree;
        !           142: extern int callflag;
        !           143: 
        !           144: extern int fregs;
        !           145: 
        !           146: #ifndef ONEPASS
        !           147: #include "ndu.h"
        !           148: #endif
        !           149: 
        !           150: extern NODE node[];
        !           151: 
        !           152: /* code tables */
        !           153: extern struct optab {
        !           154:        int     op;                     /* operator to match */
        !           155:        int     visit;                  /* goal to match */
        !           156:        int     lshape;                 /* left shape to match */
        !           157:        int     ltype;                  /* left type to match */
        !           158:        int     rshape;                 /* right shape to match */
        !           159:        int     rtype;                  /* right type to match */
        !           160:        int     needs;                  /* resource required */
        !           161:        int     rewrite;                /* how to rewrite afterwards */
        !           162:        char    *cstring;               /* code generation template */
        !           163: } table[];
        !           164: 
        !           165: extern NODE resc[];
        !           166: 
        !           167: extern OFFSZ tmpoff;
        !           168: extern OFFSZ maxoff;
        !           169: extern OFFSZ baseoff;
        !           170: extern OFFSZ maxtemp;
        !           171: extern int maxtreg;
        !           172: extern int ftnno;
        !           173: extern int rtyflg;
        !           174: extern int nrecur;             /* flag to keep track of recursions */
        !           175: 
        !           176: extern NODE
        !           177:        *talloc(),
        !           178:        *eread(),
        !           179:        *tcopy(),
        !           180:        *getlr();
        !           181: 
        !           182: extern CONSZ rdin();
        !           183: extern int eprint();
        !           184: extern char *rnames[];
        !           185: 
        !           186: extern int lineno;
        !           187: extern char filename[];
        !           188: extern int fldshf, fldsz;
        !           189: extern int lflag, xdebug, udebug, edebug, odebug;
        !           190: extern int rdebug, radebug, tdebug, sdebug;
        !           191: #ifdef FORT
        !           192: extern int Oflag;
        !           193: #endif
        !           194: 
        !           195: #ifndef callchk
        !           196: #define callchk(x) allchk()
        !           197: #endif
        !           198: 
        !           199: #ifndef PUTCHAR
        !           200: #define PUTCHAR(x) putchar(x)
        !           201: #endif
        !           202: 
        !           203: /* macros for doing double indexing */
        !           204: #define R2PACK(x,y,z)  (0200*((x)+1)+y+040000*z)       /* pack 3 regs */
        !           205: #define R2UPK1(x)      ((((x)>>7)-1)&0177)             /* unpack reg 1 */
        !           206: #define R2UPK2(x)      ((x)&0177)                      /* unpack reg 2 */
        !           207: #define R2UPK3(x)      (x>>14)                         /* unpack reg 3 */
        !           208: #define R2TEST(x)      ((x)>=0200)                     /* test if packed */
        !           209: 
        !           210: #ifdef MULTILEVEL
        !           211: union  mltemplate {
        !           212:        struct ml_head {
        !           213:                int     tag;                    /* tree class */
        !           214:                int     subtag;                 /* subclass of tree */
        !           215:                union   mltemplate *nexthead;   /* linked by mlinit() */
        !           216:        } mlhead;
        !           217:        struct ml_node {
        !           218:                int     op;                     /* operator or op description */
        !           219:                int     nshape;                 /* node shape */
        !           220:                /*
        !           221:                 * Both op and nshape must match the node.
        !           222:                 * where the work is to be done entirely by
        !           223:                 * op, nshape can be SANY, visa versa, op can
        !           224:                 * be OPANY.
        !           225:                 */
        !           226:                int     ntype;                  /* type descriptor */
        !           227:        } mlnode;
        !           228: };
        !           229: extern union mltemplate mltree[];
        !           230: #endif
        !           231: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.