xref: /original-bsd/old/pcc/c2.vax/c2.h (revision 70ce991f)
1 /*static	char sccsid[] = "@(#)c2.h 4.6 05/27/82";*/
2 /* @(#)c2.h 1.19 80/08/26 13:39:07 */
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 /*
88  *	When the new opcodes were added, the relative
89  *	ordering of the first 3 (those that are not float)
90  *	had to be retained, so that other parts of the program
91  *	were not broken.
92  *
93  *	In addition, the distance between OP3 and OP2 must be preserved.
94  *	The order of definitions above OP2 must not be changed.
95  *
96  *	Note that these definitions DO NOT correspond to
97  *	those definitions used in as, adb and sdb.
98  */
99 #define	BYTE	1
100 #define	WORD	2
101 #define LONG	3
102 #define	FFLOAT	4
103 #define	DFLOAT	5
104 #define QUAD	6
105 #define OP2	7
106 #define OP3	8
107 #define OPB	9
108 #define OPX	10
109 #define	GFLOAT	11
110 #define	HFLOAT	12
111 #define OCTA	13
112 
113 #define T(a,b) (a|((b)<<8))
114 #define U(a,b) (a|((b)<<4))
115 
116 #define C2_ASIZE 128
117 
118 struct optab {
119 	char	opstring[7];
120 	short	opcode;
121 } optab[];
122 
123 struct node {
124 	char	op;
125 	char	subop;
126 	short	refc;
127 	struct	node	*forw;
128 	struct	node	*back;
129 	struct	node	*ref;
130 	char	*code;
131 	struct	optab	*pop;
132 	long	labno;
133 	short	seq;
134 };
135 
136 struct {
137 	short	combop;
138 };
139 
140 char	line[512];
141 struct	node	first;
142 char	*curlp;
143 int	nbrbr;
144 int	nsaddr;
145 int	redunm;
146 int	iaftbr;
147 int	njp1;
148 int	nrlab;
149 int	nxjump;
150 int	ncmot;
151 int	nrevbr;
152 int	loopiv;
153 int	nredunj;
154 int	nskip;
155 int	ncomj;
156 int	nsob;
157 int	nrtst;
158 int nbj;
159 int nfield;
160 
161 int	nchange;
162 int	isn;
163 int	debug;
164 char	*lasta;
165 char	*lastr;
166 char	*firstr;
167 char	revbr[];
168 #define	NREG	12
169 char	*regs[NREG+5]; /* 0-11, 4 for operands, 1 for running off end */
170 char	conloc[C2_ASIZE];
171 char	conval[C2_ASIZE];
172 char	ccloc[C2_ASIZE];
173 
174 #define	RT1	12
175 #define	RT2	13
176 #define RT3 14
177 #define RT4 15
178 #define	LABHS	127
179 
180 struct { char lbyte; };
181 
182 char *copy();
183 long getnum();
184 struct node *codemove();
185 struct node *insertl();
186 struct node *nonlab();
187