Annotation of researchv9/jerq/sgs/optim/optim.h, revision 1.1.1.1

1.1       root        1: /*     static char  ID[] = "@(#) optim.h: 1.7 1/20/84";        */
                      2: 
                      3: /*     machine independent include file for code improver */
                      4: 
                      5: #include <stdio.h>
                      6: #include <ctype.h>
                      7: #include "defs"
                      8: 
                      9: #ifndef MEMFCN /* remove after 5.0 when memcpy is in all UNIX releases */
                     10: #define memcpy strncpy
                     11: #endif
                     12: 
                     13: #ifndef MAXOPS
                     14: #define MAXOPS 1
                     15: #endif
                     16: 
                     17: /* booleans */
                     18: 
                     19: typedef int boolean;
                     20: #define false  0
                     21: #define true   1
                     22: 
                     23: /* predefined "opcodes" for various nodes */
                     24: 
                     25: #define GHOST  0               /* temporary, to prevent linking node in */
                     26: #define TAIL   0               /* end of text list */
                     27: #define MISC   1               /* miscellaneous instruction */
                     28: #define FILTER 2               /* nodes to be filtered before optim */
                     29: 
                     30: #ifdef LIVEDEAD
                     31: extern void ldanal();
                     32: #if LIVEDEAD - 0 < 2
                     33: #undef LIVEDEAD
                     34: #define LIVEDEAD       16
                     35: #endif
                     36: #endif
                     37: 
                     38: /* structure of each text node */
                     39: 
                     40: typedef struct node {
                     41:        struct node *forw;      /* forward link */
                     42:        struct node *back;      /* backward link */
                     43:        char *ops[MAXOPS + 1];  /* opcode or label and operand field strings */
                     44: #ifdef IDVAL
                     45:        IDTYPE uniqid;          /* unique identification for this node */
                     46: #endif
                     47:        unsigned short op;      /* operation code */
                     48: #ifdef LIVEDEAD
                     49:        unsigned
                     50:            nlive:LIVEDEAD,     /* registers used by instruction */
                     51:            ndead:LIVEDEAD;     /* registers set but not used by instruction */
                     52: #endif
                     53: #ifdef USERDATA
                     54:        USERTYPE userdata;      /* user-defined data for this node */
                     55: #endif
                     56: } NODE;
                     57: 
                     58: #define opcode ops[0]
                     59: #define op1    ops[1]
                     60: #if MAXOPS > 1
                     61: #define op2    ops[2]
                     62: #if MAXOPS > 2
                     63: #define op3    ops[3]
                     64: #if MAXOPS > 3
                     65: #define op4    ops[4]
                     66: #if MAXOPS > 4
                     67: #define op5    ops[5]
                     68: #if MAXOPS > 5
                     69: #define op6    ops[6]
                     70: #endif
                     71: #endif
                     72: #endif
                     73: #endif
                     74: #endif
                     75: 
                     76: /* structure of non-branch text reference node */
                     77: 
                     78: typedef struct ref {
                     79:        char *lab;              /* label referenced */
                     80:        struct ref *nextref;    /* link to next ref */
                     81: } REF;
                     82: 
                     83: /* externals */
                     84: 
                     85: extern NODE n0;                        /* header node of text list */
                     86: extern NODE ntail;             /* trailer node of text list */
                     87: extern NODE *lastnode;         /* pointer to last node on text list */
                     88: extern REF *lastref;           /* pointer to last label reference */
                     89: 
                     90: extern int dflag;              /* display live-dead info */
                     91: extern int sflag;              /* statistics (on stderr) */
                     92: extern int ndisc;              /* # of instructions discarded */
                     93: extern int ninst;              /* total # of instructions */
                     94: extern int npass;              /* # of times through this function */
                     95: extern int fnum;               /* # of this function */
                     96: 
                     97: extern NODE *Saveop();
                     98: extern boolean same(), sameaddr();
                     99: extern char *getspace(), *strcpy(), *memcpy(), *xalloc(), *memset();
                    100: extern void addref(), fatal(), filter(), init(), optim(), prtext(), xfree();
                    101: 
                    102: /* user-supplied functions or macros */
                    103: 
                    104: #ifndef getp
                    105: extern char *getp();
                    106: #endif
                    107: #ifndef newlab
                    108: extern char *newlab();
                    109: #endif
                    110: 
                    111: #define saveop(opn, str, len, op) \
                    112:            (void) Saveop((opn), (str), (unsigned)(len), (op))
                    113: #define addtail(p)             /* superfluous */
                    114: #define appinst()              /* superfluous */
                    115: #define appmisc(str, len)      saveop(0, (str), (len), MISC)
                    116: #define appfl(str, len)                saveop(0, (str), (len), FILTER)
                    117: #define applbl(str, len) \
                    118:        (setlab(Saveop(0, (str), (unsigned)(len), MISC)), --ninst)
                    119: #define ALLN(p)                        p = n0.forw; p != &ntail; p = p->forw
                    120: #define PRINTF                 (void) printf
                    121: #define FPRINTF                        (void) fprintf
                    122: #define SPRINTF                        (void) sprintf
                    123: #define PUTCHAR(c)             (void) putchar(c)
                    124: #define DELNODE(p)             ((p)->back->forw = (p)->forw, \
                    125:                                    (p)->forw->back = (p)->back)
                    126: #define APPNODE(p, q)          PUTNODE((p), (q), back, forw)
                    127: #define INSNODE(p, q)          PUTNODE((p), (q), forw, back)
                    128: #define PUTNODE(p, q, f, b)    ((p)->f = (q), (p)->b = (q)->b, \
                    129:                                    (q)->b = (q)->b->f = (p))
                    130: #define GETSTR(type)           (type *) getspace(sizeof(type))
                    131: #define COPY(str, len) ((len) != 0 ? memcpy(getspace(len), str, (int)(len)) : str)
                    132: #ifndef ISLABREF
                    133: #define ISLABREF(p)    0
                    134: #endif

unix.superglobalmegacorp.com

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