|
|
1.1 ! root 1: /* @(#)c2.h 1.1 86/02/03 SMI */ ! 2: ! 3: /* ! 4: * Copyright (c) 1985 by Sun Microsystems, Inc. ! 5: */ ! 6: ! 7: ! 8: /* ! 9: * Header for object code improver ! 10: */ ! 11: ! 12: ! 13: ! 14: /* ! 15: * a regmask is how we talk about registers being used or set by the ! 16: * current instruction, and also how we keep track of "dead" registers. ! 17: * Each d-register is represented by three bits: for byte, word, and ! 18: * longword access (pipe dreaming here). Each a-register is represented ! 19: * by only one bit, as they are always used and set as longwords. Each ! 20: * f-register is also represented by one bit, as are each of the condition ! 21: * code registers. ! 22: * It looks like this: ! 23: * +--+--+--+--+--+--+--+--+-----+-----+-----+-----+-----+-----+-----+-----+ ! 24: * |a7|a6|a5|a4|a3|a2|a1|a0| d7 | d6 | d5 | d4 | d3 | d2 | d1 | d0 | ! 25: * +--+--+--+--+--+--+--+--+-----+-----+-----+-----+-----+-----+-----+-----+ ! 26: * +--+--+--+--+--+--+--+--+--+--+ ! 27: * |fc|cc|f7|f6|f5|f4|f3|f2|f1|f0| ! 28: * +--+--+--+--+--+--+--+--+--+--+ ! 29: * where each of the d-register fields is subdivided as: ! 30: * +-----------+ ! 31: * | L | W | B | ! 32: * +-----------+ ! 33: * ! 34: * We can only deal with reading OR writing at one time here, even though the ! 35: * touch field in the instruction description talks about both at once. ! 36: */ ! 37: ! 38: typedef struct rm_type{ ! 39: unsigned da; ! 40: unsigned short f; ! 41: } regmask; ! 42: ! 43: regmask exitmask, regmask0, regmask_nontemp, regmask_all; ! 44: regmask makemask(), movemmask(), compute_normal(), addmask(); ! 45: regmask submask(), andmask(), notmask(); ! 46: ! 47: void init_csects(), freeoperand(), rectify(), freetree(); ! 48: void dumpprogram(), xref(), quicken(); ! 49: void newreference(), unreference(), cannibalize(); ! 50: struct node * addnode(); ! 51: ! 52: typedef ! 53: struct node { ! 54: opcode_t op:8; ! 55: subop_t subop:8; /* to quickly recognize certain nodes */ ! 56: struct node *forw; ! 57: struct node *back; ! 58: union { ! 59: struct ins_bkt *i; /* for Instruct and PseudoOp nodes */ ! 60: struct sym_bkt *n; /* if we're a label */ ! 61: } p; ! 62: # define instr p.i ! 63: # define name p.n ! 64: int nref; /* number operands or number references here */ ! 65: struct oper *ref[OPERANDS_MAX]; /* our operands */ ! 66: struct node *luse; /* operand, use chain for jumps*/ ! 67: struct node *lnext; ! 68: regmask ruse, ! 69: rset, ! 70: rlive; ! 71: short lineno; ! 72: } NODE; ! 73: ! 74: # define RMASK 3 ! 75: # define WMASK 014 ! 76: # define TOUCHWIDTH 5 ! 77: # define TOUCHMASK 037 ! 78: # define BR 1 ! 79: # define WR 2 ! 80: # define LR 3 ! 81: # define BW 4 ! 82: # define WW 8 ! 83: # define LW 12 ! 84: # define SPEC(n) (16+n) ! 85: # define MAKERMASK( regno, rtouch ) RegMasks[regno][(rtouch)&RMASK] ! 86: # define MAKEWMASK( regno, wtouch ) RegMasks[regno][((wtouch)&WMASK)>>2] ! 87: extern regmask RegMasks[PCREG+1][LR+1]; ! 88: ! 89: struct node first; ! 90: struct node *freenodes; ! 91: struct node *new(); ! 92: struct node *deletenode(); ! 93: char *curlp; ! 94: struct meter{ ! 95: int ndrop; ! 96: int nbrbr; ! 97: int nsaddr; ! 98: int redunm; ! 99: int iaftbr; ! 100: int nredext; ! 101: int nredadd; ! 102: int nredsub; ! 103: int nredmul; ! 104: int ndbra; ! 105: int ndbrarev; ! 106: int nredor; ! 107: int nredshf; ! 108: int nmtoc; ! 109: int nmtos; ! 110: int nctot; ! 111: int nmmtmo; ! 112: int nrmtfr; ! 113: int namwl; ! 114: int njp1; ! 115: int nrlab; ! 116: int nxjump; ! 117: int ncmot; ! 118: int nrevbr; ! 119: int loopiv; ! 120: int nredunj; ! 121: int nskip; ! 122: int ncomj; ! 123: int nttomo; ! 124: int nrtst; ! 125: int nwmov; ! 126: int nchange; ! 127: int nwop; ! 128: int nskyreg; ! 129: int ndpsky; ! 130: int nplusminus; ! 131: int nusecr; ! 132: } meter; ! 133: ! 134: int debug; ! 135: extern int fortranprog; /* set if a5, a4 point at "regular" memory */ ! 136: ! 137: extern int verbose; /* flag set by -v option */ ! 138:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.