|
|
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.