BSD 4 development
[unix-history] / usr / src / cmd / mip / mfile1
CommitLineData
17f8ead8
BJ
1
2# include "macdefs"
3# include "manifest"
4
5/* storage classes */
6# define SNULL 0
7# define AUTO 1
8# define EXTERN 2
9# define STATIC 3
10# define REGISTER 4
11# define EXTDEF 5
12# define LABEL 6
13# define ULABEL 7
14# define MOS 8
15# define PARAM 9
16# define STNAME 10
17# define MOU 11
18# define UNAME 12
19# define TYPEDEF 13
20# define FORTRAN 14
21# define ENAME 15
22# define MOE 16
23# define UFORTRAN 17
24# define USTATIC 18
25 /* field size is ORed in */
26# define FIELD 0100
27# define FLDSIZ 077
28# ifndef BUG1
29extern char *scnames();
30# endif
31
32/* location counters */
33# define PROG 0
34# define DATA 1
35# define ADATA 2
36# define STRNG 3
37# define ISTRNG 4
38# define STAB 5
39
40
41/* symbol table flags */
42# define SMOS 01
43# define SHIDDEN 02
44# define SHIDES 04
45# define SSET 010
46# define SREF 020
47# define SNONUNIQ 040
48# define STAG 0100
49
50# ifndef FIXDEF
51# define FIXDEF(p)
52#endif
53# ifndef FIXARG
54# define FIXARG(p)
55# endif
56# ifndef FIXSTRUCT
57# define FIXSTRUCT(a,b)
58# endif
59
60 /* alignment of initialized quantities */
61# ifndef AL_INIT
62# define AL_INIT ALINT
63# endif
64
65struct symtab {
66#ifndef FLEXNAMES
67 char sname[NCHNAM];
68#else
69 char *sname;
70#endif
71 TWORD stype; /* type word */
72
73 char sclass; /* storage class */
74 char slevel; /* scope level */
75 char sflags; /* flags for set, use, hidden, mos, etc. */
76 int offset; /* offset or value */
77 short dimoff; /* offset into the dimension table */
78 short sizoff; /* offset into the size table */
79 short suse; /* line number of last use of the variable */
80 };
81
82
83# ifdef ONEPASS
84/* NOPREF must be defined for use in first pass tree machine */
85# define NOPREF 020000 /* no preference for register assignment */
86#else
87
88union ndu {
89 struct {
90 int op;
91 TWORD type;
92 int cdim, csiz;
93 }fn; /* front node */
94 struct {
95 int op;
96 TWORD type;
97 int cdim, csiz;
98 NODE *left;
99 NODE * right;
100 }in; /* interior node */
101
102 struct {
103 /* this structure is the same as above,
104 but is used when a value, rather than
105 address, is kept in +left */
106 int op;
107 TWORD type;
108 int cdim, csiz;
109 CONSZ lval;
110 int rval;
111 }tn; /* terminal node */
112
113 struct {
114 /* this structure is used when a floating point constant
115 is being computed */
116 int op;
117 TWORD type;
118 int cdim, csiz;
119 double dval;
120 }fpn; /* floating point node */
121
122 };
123# endif
124
125struct sw {
126 CONSZ sval;
127 int slab;
128 };
129
130extern struct sw swtab[];
131extern struct sw *swp;
132extern int swx;
133
134extern int ftnno;
135extern int blevel;
136extern int instruct, stwart;
137
138extern int lineno, nerrors;
139typedef union {
140 int intval;
141 NODE * nodep;
142 } YYSTYPE;
143extern YYSTYPE yylval;
144
145extern CONSZ lastcon;
146extern double dcon;
147
148extern char ftitle[];
149extern char ititle[];
150extern struct symtab stab[];
151extern int curftn;
152extern int curclass;
153extern int curdim;
154extern int dimtab[];
155extern int paramstk[];
156extern int paramno;
157extern int autooff, argoff, strucoff;
158extern int regvar;
159extern int minrvar;
160extern int brkflag;
161extern char yytext[];
162
163extern int strflg;
164
165extern OFFSZ inoff;
166
167extern int reached;
168
169/* tunnel to buildtree for name id's */
170
171extern int idname;
172
173extern NODE node[];
174extern NODE *lastfree;
175
176extern int cflag, hflag, pflag;
177
178/* various labels */
179extern int brklab;
180extern int contlab;
181extern int flostat;
182extern int retlab;
183extern int retstat;
184extern int asavbc[], *psavbc;
185
186/* flags used in structures/unions */
187
188# define SEENAME 01
189# define INSTRUCT 02
190# define INUNION 04
191# define FUNNYNAME 010
192# define TAGNAME 020
193
194/* flags used in the (elementary) flow analysis ... */
195
196# define FBRK 02
197# define FCONT 04
198# define FDEF 010
199# define FLOOP 020
200
201/* flags used for return status */
202
203# define RETVAL 1
204# define NRETVAL 2
205
206/* used to mark a constant with no name field */
207
208# define NONAME 040000
209
210 /* mark an offset which is undefined */
211
212# define NOOFFSET (-10201)
213
214/* declarations of various functions */
215
216extern NODE
217 *buildtree(),
218 *bdty(),
219 *mkty(),
220 *rstruct(),
221 *dclstruct(),
222 *getstr(),
223 *tymerge(),
224 *stref(),
225 *offcon(),
226 *bcon(),
227 *bpsize(),
228 *convert(),
229 *pconvert(),
230 *oconvert(),
231 *ptmatch(),
232 *tymatch(),
233 *makety(),
234 *block(),
235 *doszof(),
236 *talloc(),
237 *optim(),
238 *strargs(),
239 *clocal();
240
241OFFSZ tsize(),
242 psize();
243
244TWORD types();
245
246
247double atof();
248
249char *exname(), *exdcon();
250
251# define checkst(x)
252
253# ifndef CHARCAST
254/* to make character constants into character connstants */
255/* this is a macro to defend against cross-compilers, etc. */
256# define CHARCAST(x) (char)(x)
257# endif
258
259# define BCSZ 100 /* size of the table to save break and continue labels */
260# define SYMTSZ 1300 /* size of the symbol table (was 500) */
261# define DIMTABSZ 1500 /* size of the dimension/size table (was 800) */
262# define PARAMSZ 150 /* size of the parameter stack */
263# define SWITSZ 500 /* size of switch table */
264/* special interfaces for yacc alone */
265/* These serve as abbreviations of 2 or more ops:
266 ASOP =, = ops
267 RELOP LE,LT,GE,GT
268 EQUOP EQ,NE
269 DIVOP DIV,MOD
270 SHIFTOP LS,RS
271 ICOP ICR,DECR
272 UNOP NOT,COMPL
273 STROP DOT,STREF
274
275 */
276# define ASOP 25
277# define RELOP 26
278# define EQUOP 27
279# define DIVOP 28
280# define SHIFTOP 29
281# define INCOP 30
282# define UNOP 31
283# define STROP 32
284
285# define LP 50
286# define RP 51
287# define LC 52
288# define RC 53