|
|
1.1 ! root 1: /* @(#) defs: 1.3 3/17/84 */ ! 2: ! 3: /* machine dependent include file for IS25 */ ! 4: ! 5: # include <ctype.h> ! 6: ! 7: ! 8: #define IMPREGAL ! 9: /* #define IMPSCRATCH */ ! 10: #define IMPLLSW ! 11: #define IMPTRIAD ! 12: #define IMPIL ! 13: ! 14: #define LABEL 3 ! 15: #define HLABEL 4 ! 16: #define JMP 5 ! 17: #define RET 6 ! 18: #define SWITCH 7 ! 19: #define SWITCHT 8 ! 20: #define CALL 9 ! 21: #define JSB 10 ! 22: #define JZ 11 ! 23: #define JNZ 12 ! 24: #define JPOS 13 ! 25: #define JNPOS 14 ! 26: #define JNEG 15 ! 27: #define JNNEG 16 ! 28: #define JE 17 ! 29: #define JNE 18 ! 30: #define JL 19 ! 31: #define JLE 20 ! 32: #define JG 21 ! 33: #define JGE 22 ! 34: #define JLU 23 ! 35: #define JLEU 24 ! 36: #define JGU 25 ! 37: #define JGEU 26 ! 38: #define JBC 27 ! 39: #define JBS 28 ! 40: #define CMPB 29 ! 41: #define CMPH 30 ! 42: #define CMPW 31 ! 43: #define BITW 32 ! 44: #define MCOMB 33 ! 45: #define MCOMH 34 ! 46: #define MCOMW 35 ! 47: #define MOVZBH 36 ! 48: #define MOVZBW 37 ! 49: #define MOVZHW 38 ! 50: #define MOVAB 39 ! 51: #define MOVAH 40 ! 52: #define MOVAW 41 ! 53: #define ANDB2 42 ! 54: #define ANDH2 43 ! 55: #define ANDW2 44 ! 56: #define ANDB3 45 ! 57: #define ANDH3 46 ! 58: #define ANDW3 47 ! 59: #define ORB2 48 ! 60: #define ORH2 49 ! 61: #define ORW2 50 ! 62: #define ORB3 51 ! 63: #define ORH3 52 ! 64: #define ORW3 53 ! 65: #define XORB2 54 ! 66: #define XORH2 55 ! 67: #define XORW2 56 ! 68: #define XORB3 57 ! 69: #define XORH3 58 ! 70: #define XORW3 59 ! 71: #define LLSW2 60 ! 72: #define LLSW3 61 ! 73: #define LRSW2 62 ! 74: #define LRSW3 63 ! 75: #define MOVB 64 ! 76: #define MOVH 65 ! 77: #define MOVW 66 ! 78: #define MOVBBH 67 ! 79: #define MOVBBW 68 ! 80: #define MOVBHW 69 ! 81: #define MOVTHB 70 ! 82: #define MOVTWB 71 ! 83: #define MOVTWH 72 ! 84: #define MNEGB 73 ! 85: #define MNEGH 74 ! 86: #define MNEGW 75 ! 87: #define ADDB2 76 ! 88: #define ADDH2 77 ! 89: #define ADDW2 78 ! 90: #define ADDB3 79 ! 91: #define ADDH3 80 ! 92: #define ADDW3 81 ! 93: #define SUBB2 82 ! 94: #define SUBH2 83 ! 95: #define SUBW2 84 ! 96: #define SUBB3 85 ! 97: #define SUBH3 86 ! 98: #define SUBW3 87 ! 99: #define MULW2 88 ! 100: #define MULW3 89 ! 101: #define DIVW2 90 ! 102: #define DIVW3 91 ! 103: #define MODW2 92 ! 104: #define MODW3 93 ! 105: #define ALSW2 94 ! 106: #define ALSW3 95 ! 107: #define ARSW2 96 ! 108: #define ARSW3 97 ! 109: #define UMULW2 98 /* unsigned ops set different result ! 110: ** indicators from other arith. ops. ! 111: */ ! 112: #define UMULW3 99 ! 113: #define UDIVW2 100 ! 114: #define UDIVW3 101 ! 115: #define UMODW2 102 ! 116: #define UMODW3 103 ! 117: #define INSV 104 ! 118: #define EXTZV 105 ! 119: #define MOVBLB 106 ! 120: #define MOVBLH 107 ! 121: #define MOVBLW 108 ! 122: #define INCTST 109 ! 123: #define INCPTH 110 ! 124: #define INCPTW 111 ! 125: #define DECPTH 112 ! 126: #define DECPTW 113 ! 127: #define ACJL 114 ! 128: #define ACJLU 115 ! 129: #define ACJLE 116 ! 130: #define ACJLEU 117 ! 131: #define ATJNZB 118 ! 132: #define ATJNZH 119 ! 133: #define ATJNZW 120 ! 134: #define OTHER 121 ! 135: #define PUSHAW 122 ! 136: #define PUSHW 123 ! 137: #define FADDD2 124 ! 138: #define FADDD3 125 ! 139: #define FADDS2 126 ! 140: #define FADDS3 127 ! 141: #define FSUBD2 128 ! 142: #define FSUBD3 129 ! 143: #define FSUBS2 130 ! 144: #define FSUBS3 131 ! 145: #define FMULD2 132 ! 146: #define FMULD3 133 ! 147: #define FMULS2 134 ! 148: #define FMULS3 135 ! 149: #define FDIVD2 136 ! 150: #define FDIVD3 137 ! 151: #define FDIVS2 138 ! 152: #define FDIVS3 139 ! 153: #define FCMPD 140 ! 154: #define MOVTDW 141 ! 155: #define MOVWD 142 ! 156: #define MOVTSW 143 ! 157: #define MOVWS 144 ! 158: #define MOVDS 145 ! 159: #define MOVSD 146 ! 160: #define MOVDW 147 ! 161: #define MOVSW 148 ! 162: #define MOVDD 149 ! 163: #define MOVD 150 ! 164: #define PUSHD 151 ! 165: #define SAVE 152 ! 166: #define PUSHZB 153 ! 167: #define PUSHZH 154 ! 168: #define PUSHBB 155 ! 169: #define PUSHBH 156 ! 170: ! 171: /* pseudo ops */ ! 172: ! 173: # define numpops 12 ! 174: ! 175: # define ALIGN 1 ! 176: # define BSS 2 ! 177: # define BYTE 3 ! 178: # define DATA 4 ! 179: # define DEF 5 ! 180: # define FIL 6 ! 181: # define GLOBL 7 ! 182: # define LN 8 ! 183: # define SET 9 ! 184: # define TEXT 10 ! 185: # define TV 11 ! 186: # define WORD 12 ! 187: # define POTHER 0 ! 188: ! 189: /* begin comment character */ ! 190: ! 191: # define CC '#' ! 192: ! 193: /* predicates and functions */ ! 194: ! 195: # define islabel(p) (p != NULL && (p->op == LABEL || p->op == HLABEL)) ! 196: # define ishl(p) (p->opcode[0] != '.' || p->op == HLABEL) ! 197: # define isuncbr(p) (JMP <= p->op && p->op <= SWITCHT) ! 198: # define iscbr(p) (p->op >= JZ && p->op <= JGEU) ! 199: # define isbr(p) (p->op >= JMP && p->op <= JBS && p->op != CALL) ! 200: # ifdef N3B ! 201: # define ishb(p) (p->op == RET) ! 202: # else ! 203: # define ishb(p) (0) ! 204: # endif ! 205: # define isrev(p) (p->op >= JZ && p->op <= JBS) ! 206: # define isret(p) (p->op == RET) ! 207: # define iscompare(p) (p->op == CMPW || p->op == CMPB || p->op == CMPH) ! 208: # define setlab(p) (p->op = LABEL) ! 209: # define setbr(p,l) {p->op = JMP; p->opcode = "jmp"; p->op1 = l;} ! 210: # define bboptim(f,l) 0 ! 211: # define mvlivecc(p) (p->back->nlive = (p->back->nlive & ~CONCODES) | (p->nlive & CONCODES)) ! 212: # define swplivecc(p,q) { int x; x=(p->nlive & CONCODES); mvlivecc(q); q->nlive = (q->nlive & ~CONCODES) | x; } ! 213: ! 214: /* maximum number of operands */ ! 215: ! 216: # define MAXOPS 4 ! 217: ! 218: /* register usages */ ! 219: ! 220: # define REGS 0x1fff /* bit 12 used for condition code analysis */ ! 221: # define RETREG 0x0003 ! 222: # define LIVEREGS 0x0e00 ! 223: ! 224: /* condition codes */ ! 225: ! 226: # define CONCODES 0x1000 ! 227: # define isdeadcc(p) ((p->nlive & CONCODES) == 0) ! 228: ! 229: /* options */ ! 230: ! 231: # define COMTAIL ! 232: # define LIVEDEAD ! 233: # define PEEPHOLE ! 234: ! 235: /* line number stuff */ ! 236: ! 237: # define IDTYPE int ! 238: # define IDVAL 0 ! 239: ! 240: /* table sizes */ ! 241: ! 242: /* maximum number of labels referenced in a function, ! 243: must be relatively prime to 5 */ ! 244: # ifdef AR16WR ! 245: # define NUMLBLS 513 ! 246: # else ! 247: # define NUMLBLS 917 ! 248: # endif ! 249: /* maximum allocatable space (in shorts) */ ! 250: # ifdef AR16WR ! 251: # define SPACE 19450 ! 252: # else ! 253: # define SPACE 150000 ! 254: # endif ! 255: ! 256: /* The symbol UCODE50 is defined for 3B20's (only) when they are ! 257: ** known to have the UNIX 5.0 microcode. ! 258: */ ! 259: ! 260: #ifndef UCODE50 /* allow local definition */ ! 261: #if defined(U3B) || defined(N3B) ! 262: #define UCODE50 /* turn on special instructions */ ! 263: #endif /* def U3B */ ! 264: #endif /* ndef UCODE50 */ ! 265: ! 266: /* There is an optimization in w2opt.c which removes certain "cmpw" ! 267: ** instructions that follow a "call". This option requires that ! 268: ** C-callable assembly language routines that return values must ! 269: ** set the result indicators according to the value of the returned ! 270: ** result. This improvement should only be turned on for systems ! 271: ** which will adhere to that convention. ! 272: */ ! 273: ! 274: #ifndef CALLCMPW /* allow local definition */ ! 275: #if defined(U3B) /* presently enabled for 3B20S UNIX */ ! 276: #define CALLCMPW /* enable removal of extra "cmpw" */ ! 277: #endif /* defined ... */ ! 278: #endif /* ndef CALLCMPW */ ! 279: ! 280: #define spflg(i) ( (i) == 'y' ) /* indicate y flag has suboptions */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.