update from donn@utah-cs
[unix-history] / usr / src / old / pcc / c2.vax / c2.h
CommitLineData
3464f46e 1/* c2.h 4.10 85/08/22 */
b767c045 2
9de4af78
BJ
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
46aa6964
BJ
63#define LCOMM 59
64#define COMM 60
9de4af78
BJ
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
11850887
RC
87#define JCC 20
88#define JCS 21
89#define JVC 22
90#define JVS 23
91
0594fe30
BJ
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 */
9de4af78
BJ
104#define BYTE 1
105#define WORD 2
106#define LONG 3
0594fe30
BJ
107#define FFLOAT 4
108#define DFLOAT 5
f69a6536
RH
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
9de4af78
BJ
117
118#define T(a,b) (a|((b)<<8))
119#define U(a,b) (a|((b)<<4))
120
575b3828 121#define C2_ASIZE 128
033bb901 122
9de4af78
BJ
123struct optab {
124 char opstring[7];
125 short opcode;
126} optab[];
127
128struct node {
41feb04a
RC
129 union {
130 struct {
131 char op_op;
132 char op_subop;
133 } un_op;
134 short un_combop;
135 } op_un;
9de4af78
BJ
136 short refc;
137 struct node *forw;
138 struct node *back;
139 struct node *ref;
140 char *code;
141 struct optab *pop;
46aa6964 142 long labno;
9de4af78
BJ
143 short seq;
144};
145
41feb04a
RC
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
9de4af78
BJ
149
150char line[512];
151struct node first;
152char *curlp;
153int nbrbr;
154int nsaddr;
155int redunm;
156int iaftbr;
157int njp1;
158int nrlab;
159int nxjump;
160int ncmot;
161int nrevbr;
162int loopiv;
163int nredunj;
164int nskip;
165int ncomj;
166int nsob;
167int nrtst;
168int nbj;
169int nfield;
170
171int nchange;
41feb04a 172long isn;
9de4af78 173int debug;
9de4af78
BJ
174char revbr[];
175#define NREG 12
176char *regs[NREG+5]; /* 0-11, 4 for operands, 1 for running off end */
033bb901
MT
177char conloc[C2_ASIZE];
178char conval[C2_ASIZE];
179char ccloc[C2_ASIZE];
9de4af78
BJ
180
181#define RT1 12
182#define RT2 13
183#define RT3 14
184#define RT4 15
185#define LABHS 127
186
9de4af78
BJ
187char *copy();
188long getnum();
189struct node *codemove();
190struct node *insertl();
191struct node *nonlab();
41feb04a
RC
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
3464f46e
KM
199
200char *xalloc();
201extern char *newa;
202extern char *lasta;
203extern 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)))