Annotation of researchv9/jerq/sgs/optim/inter.c, revision 1.1.1.1

1.1       root        1: /*     static char  ID[] = "@(#) inter.c: 1.3 10/5/82";        */
                      2: 
                      3: #include "optim.h"
                      4: 
                      5: NODE *lastnode;        /* reference to node being built by Saveop */
                      6: 
                      7:        NODE *
                      8: Saveop(opn, str, len, op) /* save part of inst */
                      9:        register int opn; register char *str; unsigned len; int op; {
                     10: 
                     11:        register NODE *p = lastnode;
                     12: 
                     13:        if (opn == 0) { /* make a new node and link it in */
                     14:                p = lastnode = GETSTR(NODE);
                     15:                if ((p->op = op) != GHOST) {
                     16:                        INSNODE(p, &ntail);
                     17:                        ninst++;
                     18:                }
                     19:                for (op = 0; op < MAXOPS; )
                     20:                        p->ops[++op] = NULL;
                     21: #ifdef LIVEDEAD
                     22:                p->nlive = p->ndead = 0;
                     23: #endif
                     24: #ifdef IDVAL
                     25:                p->uniqid = IDVAL;
                     26: #endif
                     27:        }
                     28:        if (opn < 0 || opn > MAXOPS)
                     29:                fatal("invalid opn field for %s\n", str);
                     30:        p->ops[opn] = COPY(str, len);
                     31:        return (p);
                     32: }
                     33: 
                     34:        void
                     35: addref(str, len) char *str; unsigned len; { /* add text ref to reference list */
                     36: 
                     37:        register REF *r = lastref = lastref->nextref = GETSTR(REF);
                     38: 
                     39:        r->lab = COPY(str, len);
                     40:        r->nextref = NULL;
                     41: }
                     42: 
                     43:        void
                     44: filter() { /* print FILTER nodes and remove from list */
                     45: 
                     46:        register NODE *p;
                     47: 
                     48:        for (ALLN(p))
                     49:                if (p->op == FILTER) {
                     50:                        (void) puts(p->ops[0]);
                     51:                        DELNODE(p);
                     52:                }
                     53: }
                     54: 
                     55:        void
                     56: prtext() { /* print text list */
                     57: 
                     58:        register NODE *p;
                     59: 
                     60:        for (ALLN(p)) {
                     61:                prinst(p);
                     62:        }
                     63: }
                     64: 
                     65:        boolean
                     66: same(p, q) NODE *p, *q; { /* return true iff nodes are the same */
                     67: 
                     68:        register char **pp, **qq;
                     69:        register int i;
                     70: 
                     71:        if (p->op != q->op)
                     72:                return (false);
                     73: 
                     74:        /* first check for equal numbers of active operands */
                     75: 
                     76:        for (pp = p->ops, qq = q->ops, i = MAXOPS + 1;
                     77:            --i >= 0 && (*pp != NULL || *qq != NULL); pp++, qq++)
                     78:                if (*pp == NULL || *qq == NULL)
                     79:                        return (false);
                     80: 
                     81:        /* then check for equality of the active operands */
                     82: 
                     83:        while (pp > p->ops)
                     84:                if (**--pp != **--qq || strcmp(*pp, *qq))
                     85:                        return (false);
                     86:        return (true);
                     87: }
                     88: 
                     89:        boolean
                     90: sameaddr(p, q) NODE *p, *q; { /* return true iff ops[1...] are the same */
                     91: 
                     92:        register char **pp, **qq;
                     93:        register int i;
                     94: 
                     95:        /* first check for equal numbers of active operands */
                     96: 
                     97:        for (pp = p->ops, qq = q->ops, i = MAXOPS + 1;
                     98:            --i >= 0 && (*pp != NULL || *qq != NULL); pp++, qq++)
                     99:                if (*pp == NULL || *qq == NULL)
                    100:                        return (false);
                    101: 
                    102:        /* then check for equality of the active operands */
                    103: 
                    104:        while (pp > p->ops + 1)
                    105:                if (**--pp != **--qq || strcmp(*pp, *qq))
                    106:                        return (false);
                    107:        return (true);
                    108: }
                    109: 
                    110:        char *
                    111: xalloc(n) register unsigned n; { /* allocate space */
                    112: 
                    113:        extern char *malloc();
                    114:        register char *p;
                    115: 
                    116:        if ((p = malloc(n)) == NULL)
                    117:                fatal("out of space\n", (char *)NULL);
                    118:        return (p);
                    119: }
                    120: 
                    121:        void
                    122: xfree(p) char *p; { /* free up space allocated by xalloc */
                    123: 
                    124:        extern void free();
                    125: 
                    126:        free(p);                        /* return space */
                    127: }
                    128: 
                    129:        void
                    130: fatal(fmt, str) char *fmt, *str; { /* report fatal error and quit */
                    131: 
                    132:        extern void exit();
                    133: 
                    134:        FPRINTF(stderr, "Optimizer: ");
                    135:        FPRINTF(stderr, fmt, str);
                    136:        exit(2);
                    137: }

unix.superglobalmegacorp.com

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