xref: /original-bsd/old/pcc/c2.tahoe/c2.h (revision 41729bfe)
1 /*	c2.h	1.3	86/08/14	*/
2 
3 /*
4  * Header for object code improver
5  */
6 
7 /* tokens */
8 typedef	enum {
9 	NIL,
10 	JBR, CBR, JMP, LABEL, DLABEL, EROU, JSW,
11 	MOV, CLR, INC, DEC, TST, PUSH, CVT, MOVZ,
12 	CMP, ADD, SUB, BIT, AND, OR, XOR, COM,
13 	NEG, EMUL, MUL, DIV, EDIV, SHAL, SHAR,
14 	SHL, SHR, CALLF, CALLS, CASE, ADDA, SUBA,
15 	AOBLEQ, AOBLSS, MOVA, PUSHA, LDF, LNF, STF,
16 	CMPF, CMPF2, TSTF, PUSHD, CVLF, CVFL, LDFD,
17 	CVDF, NEGF, ADDF, SUBF, MULF, DIVF, SINF,
18 	COSF, ATANF, LOGF, SQRTF, EXPF, MOVBLK,
19 	MFPR, MTPR, PROBE, MOVO, TEXT, DATA, BSS,
20 	ALIGN, END, LGEN, WGEN, SET, LCOMM, COMM
21 } OpCode;
22 
23 #define	ord(e)	((int)(e))
24 
25 #define	JEQ	0
26 #define	JNE	1
27 #define	JLE	2
28 #define	JGE	3
29 #define	JLT	4
30 #define	JGT	5
31 /* rearranged for unsigned branches so that jxxu = jxx + 6 */
32 #define	JLOS	8
33 #define	JHIS	9
34 #define	JLO	10
35 #define	JHI	11
36 
37 #define	JBC	12
38 #define	JBS	13
39 #define	RET	14
40 
41 #define	BYTE	1
42 #define	WORD	2
43 #define LONG	3
44 #define QUAD	4
45 #define FLOAT	5
46 #define DOUBLE	6
47 #define OP2	7
48 #define OP3	8
49 #define OPB	9
50 #define OPX	10
51 
52 #define	has2ops(p)	(((p)->subop>>4) == OP2)
53 #define	has3ops(p)	(((p)->subop>>4) == OP3)
54 
55 /* #define T(a,b) (a|((b)<<8)) NUXI problems */
56 #define U(a,b) (a|((b)<<4))
57 
58 #define C2_ASIZE 128
59 
60 struct optab {
61 	char	opstring[7];
62 	OpCode	opcod;
63 	unsigned char	subopcod;
64 } optab[];
65 
66 struct node {
67 	OpCode	op;
68 	unsigned char	subop;
69 	short	refc;
70 	struct	node	*forw;
71 	struct	node	*back;
72 	struct	node	*ref;
73 	char	*code;
74 	struct	optab	*pop;
75 	long	labno;
76 	short	seq;
77 };
78 
79 struct intleavetab  {
80 	OpCode		op;
81 	unsigned char	subop;
82 	int		intleavect;
83 } intltab[];
84 
85 /* struct { NUXI problems
86 	short	combop;
87 }; */
88 
89 char	line[512];
90 struct	node	first;
91 char	*curlp;
92 int	nbrbr;
93 int	nsaddr;
94 int	redunm;
95 int	iaftbr;
96 int	njp1;
97 int	nrlab;
98 int	nxjump;
99 int	ncmot;
100 int	nrevbr;
101 int	loopiv;
102 int	nredunj;
103 int	nskip;
104 int	ncomj;
105 int	naob;
106 int	nrtst;
107 int	nbj;
108 int	nst;
109 int	nld;
110 
111 int	nchange;
112 int	isn;
113 int	debug;
114 int	fortflg;
115 int 	aobflag;
116 char	*lasta;
117 char	*lastr;
118 char	*firstr;
119 char	revbr[];
120 #define	NREG	13
121 /* 0-12, f.p. accumulator, 4 for operands, 1 for running off end */
122 char	*regs[NREG+6];
123 char	conloc[C2_ASIZE];
124 char	conval[C2_ASIZE];
125 char	ccloc[C2_ASIZE];
126 
127 #define	ACC	NREG
128 #define	RT1	NREG+1
129 #define	RT2	NREG+2
130 #define RT3	NREG+3
131 #define RT4	NREG+4
132 #define	LABHS	127
133 
134 #define MAXAOBDISP	5000
135 
136 #define NUSE 6
137 #define	tempreg(s,r)	((unsigned)((r)=isreg(s)) < NUSE)
138 
139 struct node *uses[NUSE + 7]; /* for backwards flow analysis */
140 struct node *useacc; /* same for acc */
141 char *lastrand; /* last operand of instruction */
142 struct node *bflow();
143 char *copy();
144 long getnum();
145 struct node *codemove();
146 struct node *insertl();
147 struct node *nonlab();
148 struct node *alloc();
149 char *findcon();
150 char *byondrd();
151 #define equstr !strcmp
152 #define COPYCODE
153