Annotation of researchv9/cmd/sun/mip/cpass2.h, revision 1.1

1.1     ! root        1: /*     @(#)cpass2.h 1.1 86/02/03 SMI   */
        !             2: 
        !             3: # include "machdep.h"
        !             4: # include "machdep2.h"
        !             5: # include "mip.h"
        !             6: 
        !             7: # ifdef ONEPASS
        !             8: 
        !             9: /*     bunch of stuff for putting the passes together... */
        !            10: # define crslab crs2lab
        !            11: # define where where2
        !            12: # define xdebug x2debug
        !            13: # define tdebug t2debug
        !            14: # define deflab def2lab
        !            15: # define edebug e2debug
        !            16: # define eprint e2print
        !            17: # define getlab get2lab
        !            18: # define filename ftitle
        !            19: # endif
        !            20: 
        !            21: /*     cookies, used as arguments to codgen */
        !            22: 
        !            23: # define FOREFF       01 /* compute for effects only */
        !            24: # define INAREG       02 /* compute into a register */
        !            25: # define INTAREG      04 /* compute into a scratch register */
        !            26: # define INBREG      010 /* compute into a lvalue register */
        !            27: # define INTBREG     020 /* compute into a scratch lvalue register */
        !            28: # define INCREG      040 /* compute into a floating register */
        !            29: # define INTCREG    0100 /* compute into a scratch floating register */
        !            30: # define FORCC      0200 /* compute for condition codes only */
        !            31: # define INTEMP  0200000 /* compute into a temporary location */
        !            32: # define FORARG  0400000 /* compute for an argument of a function */
        !            33: # define FORREW 01000000 /* search the table, looking for a rewrite rule */
        !            34: 
        !            35:        /* OP descriptors */
        !            36:        /* the ASG operator may be used on some of these */
        !            37: 
        !            38: # define OPSIMP  010000 /* +, -, &, |, ^ */
        !            39: # define OPCOMM  010002 /* +, &, |, ^    */
        !            40: # define OPMUL   010004 /* *, /          */
        !            41: # define OPDIV   010006 /* /, %          */
        !            42: # define OPUNARY 010010 /* unary ops     */
        !            43: # define OPLEAF  010012 /* leaves        */
        !            44: # define OPANY   010014 /* any op...     */
        !            45: # define OPLOG   010016 /* logical ops   */
        !            46: # define OPFLOAT 010020 /* +, -, *, or / (for floats) */
        !            47: # define OPSHFT  010022 /* <<, >>        */
        !            48: # define OPLTYPE 010024 /* leaf type nodes (e.g, NAME, ICON, etc. ) */
        !            49: # define OPINTR  010026 /* fortran intrinsics (sin, cos, exp, ...) */
        !            50: 
        !            51:        /* match returns */
        !            52: 
        !            53: # define MNOPE 010000
        !            54: # define MDONE 010001
        !            55: 
        !            56:        /* shapes */
        !            57: 
        !            58: # define SANY     01   /* same as FOREFF   */
        !            59: # define SAREG    02   /* same as INAREG   */
        !            60: # define STAREG   04   /* same as INTAREG  */
        !            61: # define SBREG   010   /* same as INBREG   */
        !            62: # define STBREG  020   /* same as INTBREG  */
        !            63: # define SCREG   040   /* same as INCREG   */
        !            64: # define STCREG 0100   /* same as INTCREG  */
        !            65: # define SCC    0200   /* same as FORCC    */
        !            66: # define SNAME  0400
        !            67: # define SCON  01000
        !            68: # define SFLD  02000
        !            69: # define SOREG 04000
        !            70: /* indirection or wild card shapes */
        !            71: # ifndef WCARD1
        !            72: # define STARNM  010000
        !            73: # endif
        !            74: # ifndef WCARD2
        !            75: # define STARREG 020000
        !            76: # endif
        !            77: # define SWADD   040000
        !            78: # define SPECIAL 0100000
        !            79: # define SZERO   SPECIAL
        !            80: # define SONE   (SPECIAL|1)
        !            81: # define SMONE  (SPECIAL|2)
        !            82: # define SCCON  (SPECIAL|3)    /* -256 <= constant < 256 */
        !            83: # define SSCON  (SPECIAL|4)    /* -32768 <= constant < 32768 */
        !            84: # define SSOREG (SPECIAL|5)    /* non-indexed OREG */
        !            85: 
        !            86:        /* FORARG and INTEMP are carefully not conflicting with shapes */
        !            87: 
        !            88:        /* types */
        !            89: 
        !            90: # define TCHAR 01
        !            91: # define TSHORT 02
        !            92: # define TINT 04
        !            93: # define TLONG 010
        !            94: # define TFLOAT 020
        !            95: # define TDOUBLE 040
        !            96: # define TPOINT 0100
        !            97: # define TUCHAR 0200
        !            98: # define TUSHORT 0400
        !            99: # define TUNSIGNED 01000
        !           100: # define TULONG 02000
        !           101: # define TPTRTO 04000  /* pointer to one of the above */
        !           102: # define TANY 010000  /* matches anything within reason */
        !           103: # define TSTRUCT 020000   /* structure or union */
        !           104: 
        !           105:        /* reclamation cookies */
        !           106: 
        !           107: # define RNULL 0    /* clobber result */
        !           108: # define RLEFT 01
        !           109: # define RRIGHT 02
        !           110: # define RESC1 04
        !           111: # define RESC2 010
        !           112: # define RESC3 020
        !           113: # define RESCC 04000
        !           114: # define RESFCC 010000 /* floating coprocessor condition code */
        !           115: # define RNOP 020000   /* DANGER: can cause loops.. */
        !           116: 
        !           117:        /* needs */
        !           118: 
        !           119: # define NAREG       01
        !           120: # define NACOUNT     03
        !           121: # define NAMASK     017
        !           122: # define NASL        04  /* share left register */
        !           123: # define NASR       010 /* share right register */
        !           124: # define NBREG      020
        !           125: # define NBCOUNT    060
        !           126: # define NBMASK    0360
        !           127: # define NBSL      0100
        !           128: # define NBSR      0200
        !           129: # define NCREG     0400
        !           130: # define NCCOUNT  01400
        !           131: # define NCMASK   07400
        !           132: # define NCSL     02000
        !           133: # define NCSR     04000
        !           134: # define NTEMP    010000
        !           135: # define NTMASK  0170000
        !           136: # define REWRITE 0200000
        !           137: # define EITHER  0400000 /* "either" modifier for needs */
        !           138: 
        !           139: 
        !           140: # define MUSTDO 010000   /* force register requirements */
        !           141: # define NOPREF 020000  /* no preference for register assignment */
        !           142: 
        !           143: 
        !           144:        /* register allocation */
        !           145: 
        !           146: extern int rstatus[];
        !           147: extern int busy[];
        !           148: 
        !           149: extern struct respref { int cform; int mform; } respref[];
        !           150: 
        !           151: # define isareg(r) (rstatus[r]&SAREG)
        !           152: # define isbreg(r) (rstatus[r]&SBREG)
        !           153: # define iscreg(r) (rstatus[r]&SCREG)
        !           154: # define istreg(r) (rstatus[r]&(STBREG|STAREG|STCREG))
        !           155: # define istnode(p) (p->in.op==REG && istreg(p->tn.rval))
        !           156: 
        !           157: # define TBUSY 01000
        !           158: # define REGLOOP(i) for(i=0;i<REGSZ;++i)
        !           159: 
        !           160: # define SETSTO(x,y) (stotree=(x),stocook=(y))
        !           161: extern int stocook;
        !           162: # define DELAYS 20
        !           163: extern NODE *deltrees[DELAYS];
        !           164: extern int deli;   /* mmmmm */
        !           165: 
        !           166: extern NODE *stotree;
        !           167: extern int callflag;
        !           168: 
        !           169: # ifndef ONEPASS
        !           170: union ndu {
        !           171: 
        !           172:        struct {
        !           173:                int op;
        !           174:                int rall;
        !           175:                TWORD type;
        !           176:                SUTYPE su;
        !           177:                int stalign;  /* alignment of structure objects */
        !           178: #ifndef FLEXNAMES
        !           179:                char name[NCHNAM];
        !           180: #else
        !           181:                char *name;
        !           182: #endif
        !           183:                NODE *left;
        !           184:                NODE *right;
        !           185:                }in; /* interior node */
        !           186:        
        !           187:        struct {
        !           188:                int op;
        !           189:                int rall;
        !           190:                TWORD type;
        !           191:                SUTYPE su;
        !           192:                int stalign;  /* alignment of structure objects */
        !           193: #ifndef FLEXNAMES
        !           194:                char name[NCHNAM];
        !           195: #else
        !           196:                char *name;
        !           197: #endif
        !           198:                CONSZ lval;
        !           199:                int rval;
        !           200:                }tn; /* terminal node */
        !           201:        
        !           202:        struct {
        !           203:                int op, rall;
        !           204:                TWORD type;
        !           205:                SUTYPE su;
        !           206:                int label;  /* for use with branching */
        !           207:                int reversed;
        !           208:                }bn; /* branch node */
        !           209: 
        !           210:        struct {
        !           211:                int op, rall;
        !           212:                TWORD type;
        !           213:                SUTYPE su;
        !           214:                int stalign;  /* alignment of structure objects */
        !           215:                int stsize;  /* sizes of structure objects */
        !           216:                }stn; /* structure node */
        !           217: 
        !           218:        struct {
        !           219:                /* this structure is used when a floating point constant
        !           220:                   is being computed */
        !           221:                int op;
        !           222:                int rall;
        !           223:                TWORD type;
        !           224:                SUTYPE su;
        !           225:                double dval;
        !           226:                }fpn; /* floating point node */
        !           227: 
        !           228:        };
        !           229: #endif
        !           230: 
        !           231: extern struct optab {
        !           232:        int op;
        !           233:        int visit;
        !           234:        int lshape;
        !           235:        int ltype;
        !           236:        int rshape;
        !           237:        int rtype;
        !           238:        int needs;
        !           239:        int rewrite;
        !           240:        char * cstring;
        !           241:        }
        !           242:        table[];
        !           243: 
        !           244: extern NODE resc[];
        !           245: 
        !           246: extern OFFSZ tmpoff;
        !           247: extern OFFSZ maxoff;
        !           248: extern OFFSZ baseoff;
        !           249: extern OFFSZ maxtemp;
        !           250: extern int maxtreg;
        !           251: extern int ftnno;
        !           252: extern int rtyflg;
        !           253: 
        !           254: extern int nrecur;  /* flag to keep track of recursions */
        !           255: 
        !           256: # define NRECUR (10*TREESZ)
        !           257: 
        !           258: #define ncopy(dest,srce) (*(dest) = *(srce))
        !           259: 
        !           260: extern NODE
        !           261:        *talloc(),
        !           262:        *eread(),
        !           263:        *tcopy(),
        !           264:        *getlr();
        !           265: 
        !           266: extern CONSZ rdin();
        !           267: 
        !           268: extern int eprint();
        !           269: 
        !           270: extern char *rnames[];
        !           271: 
        !           272: extern int lineno;
        !           273: extern char filename[];
        !           274: extern int fldshf, fldsz;
        !           275: extern int lflag, xdebug, udebug, edebug, odebug, rdebug, radebug, tdebug, sdebug;
        !           276: 
        !           277: #ifndef callchk
        !           278: #define callchk(x) allchk()
        !           279: #endif
        !           280: 
        !           281: #ifndef PUTCHAR
        !           282: # define PUTCHAR(x) putchar(x)
        !           283: #endif
        !           284: 
        !           285:        /* macros for doing double indexing */
        !           286: # define R2PACK(x,y,z) (0200*((x)+1)+y+040000*z)
        !           287: # define R2UPK1(x) ((((x)>>7)-1)&0177)
        !           288: # define R2UPK2(x) ((x)&0177)
        !           289: # define R2UPK3(x) (x>>14)
        !           290: # define R2TEST(x) ((x)>=0200)
        !           291: 
        !           292: # ifdef MULTILEVEL
        !           293: 
        !           294: union mltemplate{
        !           295:        struct ml_head{
        !           296:                int tag; /* identifies class of tree */
        !           297:                int subtag; /* subclass of tree */
        !           298:                union mltemplate * nexthead; /* linked by mlinit() */
        !           299:                } mlhead;
        !           300:        struct ml_node{
        !           301:                int op; /* either an operator or op description */
        !           302:                int nshape; /* shape of node */
        !           303:                /* both op and nshape must match the node.
        !           304:                 * where the work is to be done entirely by
        !           305:                 * op, nshape can be SANY, visa versa, op can
        !           306:                 * be OPANY.
        !           307:                 */
        !           308:                int ntype; /* type descriptor from mfile2 */
        !           309:                } mlnode;
        !           310:        };
        !           311: 
        !           312: # endif

unix.superglobalmegacorp.com

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