|
|
1.1 root 1: /* c2.h 4.10 85/08/22 */
2:
3: /*
4: * Header for object code improver
5: */
6:
7: #define JBR 1
8: #define CBR 2
9: #define JMP 3
10: #define LABEL 4
11: #define DLABEL 5
12: #define EROU 7
13: #define JSW 9
14: #define MOV 10
15: #define CLR 11
16: #define INC 12
17: #define DEC 13
18: #define TST 14
19: #define PUSH 15
20: #define CVT 16
21: #define CMP 17
22: #define ADD 18
23: #define SUB 19
24: #define BIT 20
25: #define BIC 21
26: #define BIS 22
27: #define XOR 23
28: #define COM 24
29: #define NEG 25
30: #define MUL 26
31: #define DIV 27
32: #define ASH 28
33: #define EXTV 29
34: #define EXTZV 30
35: #define INSV 31
36: #define CALLS 32
37: #define RET 33
38: #define CASE 34
39: #define SOB 35
40: #define TEXT 36
41: #define DATA 37
42: #define BSS 38
43: #define ALIGN 39
44: #define END 40
45: #define MOVZ 41
46: #define WGEN 42
47: #define SOBGEQ 43
48: #define SOBGTR 44
49: #define AOBLEQ 45
50: #define AOBLSS 46
51: #define ACB 47
52: #define MOVA 48
53: #define PUSHA 49
54: #define LGEN 50
55: #define SET 51
56: #define MOVC3 52
57: #define RSB 53
58: #define JSB 54
59: #define MFPR 55
60: #define MTPR 56
61: #define PROBER 57
62: #define PROBEW 58
63: #define LCOMM 59
64: #define COMM 60
65:
66: #define JEQ 0
67: #define JNE 1
68: #define JLE 2
69: #define JGE 3
70: #define JLT 4
71: #define JGT 5
72: /* rearranged for unsigned branches so that jxxu = jxx + 6 */
73: #define JLOS 8
74: #define JHIS 9
75: #define JLO 10
76: #define JHI 11
77:
78: #define JBC 12
79: #define JBS 13
80: #define JLBC 14
81: #define JLBS 15
82: #define JBCC 16
83: #define JBSC 17
84: #define JBCS 18
85: #define JBSS 19
86:
87: #define JCC 20
88: #define JCS 21
89: #define JVC 22
90: #define JVS 23
91:
92: /*
93: * When the new opcodes were added, the relative
94: * ordering of the first 3 (those that are not float)
95: * had to be retained, so that other parts of the program
96: * were not broken.
97: *
98: * In addition, the distance between OP3 and OP2 must be preserved.
99: * The order of definitions above OP2 must not be changed.
100: *
101: * Note that these definitions DO NOT correspond to
102: * those definitions used in as, adb and sdb.
103: */
104: #define BYTE 1
105: #define WORD 2
106: #define LONG 3
107: #define FFLOAT 4
108: #define DFLOAT 5
109: #define QUAD 6
110: #define OP2 7
111: #define OP3 8
112: #define OPB 9
113: #define OPX 10
114: #define GFLOAT 11
115: #define HFLOAT 12
116: #define OCTA 13
117:
118: #define T(a,b) (a|((b)<<8))
119: #define U(a,b) (a|((b)<<4))
120:
121: #define C2_ASIZE 128
122:
123: struct optab {
124: char opstring[7];
125: short opcode;
126: } optab[];
127:
128: struct node {
129: union {
130: struct {
131: char op_op;
132: char op_subop;
133: } un_op;
134: short un_combop;
135: } op_un;
136: short refc;
137: struct node *forw;
138: struct node *back;
139: struct node *ref;
140: char *code;
141: struct optab *pop;
142: long labno;
143: short seq;
144: };
145:
146: #define op op_un.un_op.op_op
147: #define subop op_un.un_op.op_subop
148: #define combop op_un.un_combop
149:
150: char line[512];
151: struct node first;
152: char *curlp;
153: int nbrbr;
154: int nsaddr;
155: int redunm;
156: int iaftbr;
157: int njp1;
158: int nrlab;
159: int nxjump;
160: int ncmot;
161: int nrevbr;
162: int loopiv;
163: int nredunj;
164: int nskip;
165: int ncomj;
166: int nsob;
167: int nrtst;
168: int nbj;
169: int nfield;
170:
171: int nchange;
172: long isn;
173: int debug;
174: char revbr[];
175: #define NREG 12
176: char *regs[NREG+5]; /* 0-11, 4 for operands, 1 for running off end */
177: char conloc[C2_ASIZE];
178: char conval[C2_ASIZE];
179: char ccloc[C2_ASIZE];
180:
181: #define RT1 12
182: #define RT2 13
183: #define RT3 14
184: #define RT4 15
185: #define LABHS 127
186:
187: char *copy();
188: long getnum();
189: struct node *codemove();
190: struct node *insertl();
191: struct node *nonlab();
192:
193: #ifdef notdef
194: #define decref(p) \
195: ((p) && --(p)->refc <= 0 ? nrlab++, delnode(p) : 0)
196: #define delnode(p) \
197: ((p)->back->forw = (p)->forw, (p)->forw->back = (p)->back)
198: #endif notdef
199:
200: char *xalloc();
201: extern char *newa;
202: extern char *lasta;
203: extern char *lastr;
204: #define XALIGN(n) \
205: (((n)+(sizeof (char *) - 1)) & ~(sizeof (char *) - 1))
206: #define alloc(n) \
207: ((struct node *) \
208: ((newa = lasta) + (n) > lastr ? \
209: xalloc(n) : \
210: (lasta += XALIGN(n), newa)))
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.