xref: /original-bsd/old/pcc/c2.vax/c2.h (revision 03b3eafc)
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)))
211