Bell 32V development
[unix-history] / usr / src / cmd / f77 / defs
CommitLineData
0d57d6f5
TL
1#include <stdio.h>
2
3#ifdef unix
4# include <ctype.h>
5#endif
6
7#include "ftypes"
8#include "defines"
9#include "locdefs"
10
11#define VL 6
12
13#define MAXINCLUDES 10
14#define MAXLITERALS 20
15#define MAXCTL 20
16#define MAXHASH 401
17#define MAXSTNO 201
18#define MAXEXT 200
19#define MAXEQUIV 150
20#define MAXLABLIST 100
21
22typedef union expression *expptr;
23typedef union taggedblock *tagptr;
24typedef union chainedblock *chainp;
25
26extern FILEP infile;
27extern FILEP diagfile;
28extern FILEP textfile;
29extern FILEP asmfile;
30extern FILEP initfile;
31extern long int headoffset;
32
33extern char token [ ];
34extern int toklen;
35extern int yylval;
36extern int lineno;
37extern char *infname;
38extern int needkwd;
39extern struct labelblock *thislabel;
40
41extern flag profileflag;
42extern flag optimflag;
43extern flag nowarnflag;
44extern flag ftn66flag;
45extern flag shiftcase;
46extern flag undeftype;
47extern flag shortsubs;
48extern flag onetripflag;
49extern flag checksubs;
50extern flag debugflag;
51extern int nerr;
52extern int nwarn;
53extern int ndata;
54
55extern int parstate;
56extern flag headerdone;
57extern int blklevel;
58extern flag saveall;
59extern flag substars;
60extern int impltype[ ];
61extern int implleng[ ];
62extern int implstg[ ];
63
64extern int tyint;
65extern int tylogical;
66extern ftnint typesize[];
67extern int typealign[];
68extern int procno;
69extern int proctype;
70extern char * procname;
71extern int rtvlabel[ ];
72extern int fudgelabel; /* to confuse the pdp11 optimizer */
73extern struct addrblock *typeaddr;
74extern struct addrblock *retslot;
75extern int cxslot;
76extern int chslot;
77extern int chlgslot;
78extern int procclass;
79extern ftnint procleng;
80extern int nentry;
81extern flag multitype;
82extern int blklevel;
83extern int lastlabno;
84extern int lastvarno;
85extern int lastargslot;
86extern int argloc;
87extern ftnint autoleng;
88extern ftnint bssleng;
89extern int retlabel;
90extern int ret0label;
91extern int dorange;
92extern int regnum[ ];
93extern struct nameblock *regnamep[ ];
94extern int maxregvar;
95extern int highregvar;
96extern int nregvar;
97
98extern chainp templist;
99extern chainp holdtemps;
100extern struct entrypoint *entries;
101extern struct rplblock *rpllist;
102extern chainp curdtp;
103extern ftnint curdtelt;
104extern flag toomanyinit;
105
106extern flag inioctl;
107extern int iostmt;
108extern struct addrblock *ioblkp;
109extern int nioctl;
110extern int nequiv;
111extern int nintnames;
112extern int nextnames;
113\f
114struct chain
115 {
116 chainp nextp;
117 tagptr datap;
118 };
119
120extern chainp chains;
121
122struct ctlframe
123 {
124 unsigned ctltype:8;
125 unsigned dostepsign:8;
126 int ctlabels[4];
127 int dolabel;
128 struct nameblock *donamep;
129 expptr domax;
130 expptr dostep;
131 };
132#define endlabel ctlabels[0]
133#define elselabel ctlabels[1]
134#define dobodylabel ctlabels[1]
135#define doposlabel ctlabels[2]
136#define doneglabel ctlabels[3]
137extern struct ctlframe ctls[ ];
138extern struct ctlframe *ctlstack;
139extern struct ctlframe *lastctl;
140
141struct extsym
142 {
143 char extname[XL];
144 unsigned extstg:4;
145 unsigned extsave:1;
146 unsigned extinit:1;
147 ptr extp;
148 ftnint extleng;
149 ftnint maxleng;
150 };
151
152extern struct extsym extsymtab[ ];
153extern struct extsym *nextext;
154extern struct extsym *lastext;
155
156struct labelblock
157 {
158 int labelno;
159 unsigned blklevel:8;
160 unsigned labused:1;
161 unsigned labinacc:1;
162 unsigned labdefined:1;
163 unsigned labtype:2;
164 ftnint stateno;
165 };
166
167extern struct labelblock labeltab[ ];
168extern struct labelblock *labtabend;
169extern struct labelblock *highlabtab;
170
171struct entrypoint
172 {
173 chainp nextp;
174 struct extsym *entryname;
175 chainp arglist;
176 int entrylabel;
177 int typelabel;
178 ptr enamep;
179 };
180
181struct primblock
182 {
183 unsigned tag:4;
184 unsigned vtype:4;
185 struct nameblock *namep;
186 struct listblock *argsp;
187 expptr fcharp;
188 expptr lcharp;
189 };
190
191
192struct hashentry
193 {
194 int hashval;
195 struct nameblock *varp;
196 };
197extern struct hashentry hashtab[ ];
198extern struct hashentry *lasthash;
199
200struct intrpacked /* bits for intrinsic function description */
201 {
202 unsigned f1:3;
203 unsigned f2:4;
204 unsigned f3:7;
205 };
206
207struct nameblock
208 {
209 unsigned tag:4;
210 unsigned vtype:4;
211 unsigned vclass:4;
212 unsigned vstg:4;
213 expptr vleng;
214 char varname[VL];
215 unsigned vdovar:1;
216 unsigned vdcldone:1;
217 unsigned vadjdim:1;
218 unsigned vsave:1;
219 unsigned vprocclass:3;
220 unsigned vregno:4;
221 union {
222 int varno;
223 chainp vstfdesc; /* points to (formals, expr) pair */
224 struct intrpacked intrdesc; /* bits for intrinsic function */
225 } vardesc;
226 struct dimblock *vdim;
227 int voffset;
228 };
229
230
231struct paramblock
232 {
233 unsigned tag:4;
234 unsigned vtype:4;
235 unsigned vclass:4;
236 expptr vleng;
237 char varname[VL];
238 ptr paramval;
239 } ;
240
241
242struct exprblock
243 {
244 unsigned tag:4;
245 unsigned vtype:4;
246 unsigned vclass:4;
247 expptr vleng;
248 unsigned opcode:6;
249 expptr leftp;
250 expptr rightp;
251 };
252
253
254union constant
255 {
256 char *ccp;
257 ftnint ci;
258 double cd[2];
259 };
260
261struct constblock
262 {
263 unsigned tag:4;
264 unsigned vtype:4;
265 expptr vleng;
266 union constant const;
267 };
268
269
270struct listblock
271 {
272 unsigned tag:4;
273 unsigned vtype:4;
274 chainp listp;
275 };
276
277
278
279struct addrblock
280 {
281 unsigned tag:4;
282 unsigned vtype:4;
283 unsigned vclass:4;
284 unsigned vstg:4;
285 expptr vleng;
286 int memno;
287 expptr memoffset;
288 unsigned istemp:1;
289 unsigned ntempelt:10;
290 };
291
292
293
294struct errorblock
295 {
296 unsigned tag:4;
297 unsigned vtype:4;
298 };
299
300
301union expression
302 {
303 struct exprblock;
304 struct addrblock;
305 struct constblock;
306 struct errorblock;
307 struct listblock;
308 struct primblock;
309 } ;
310
311
312
313struct dimblock
314 {
315 int ndim;
316 expptr nelt;
317 expptr baseoffset;
318 expptr basexpr;
319 struct
320 {
321 expptr dimsize;
322 expptr dimexpr;
323 } dims[1];
324 };
325
326
327struct impldoblock
328 {
329 unsigned tag:4;
330 unsigned isactive:1;
331 unsigned isbusy:1;
332 struct nameblock *varnp;
333 struct constblock *varvp;
334 expptr implb;
335 expptr impub;
336 expptr impstep;
337 ftnint impdiff;
338 ftnint implim;
339 chainp datalist;
340 };
341
342
343struct rplblock /* name replacement block */
344 {
345 chainp nextp;
346 struct nameblock *rplnp;
347 ptr rplvp;
348 struct exprblock *rplxp;
349 int rpltag;
350 };
351
352
353
354struct equivblock
355 {
356 ptr equivs;
357 unsigned eqvinit:1;
358 long int eqvtop;
359 long int eqvbottom;
360 } ;
361#define eqvleng eqvtop
362
363extern struct equivblock eqvclass[ ];
364
365
366struct eqvchain
367 {
368 chainp nextp;
369 ptr eqvitem;
370 long int eqvoffset;
371 } ;
372
373union chainedblock
374 {
375 struct chain;
376 struct entrypoint;
377 struct rplblock;
378 struct eqvchain;
379 };
380
381
382
383union taggedblock
384 {
385 struct nameblock;
386 struct paramblock;
387 struct exprblock;
388 struct constblock;
389 struct listblock;
390 struct addrblock;
391 struct errorblock;
392 struct primblock;
393 struct impldoblock;
394 } ;
395
396
397
398
399struct literal
400 {
401 short littype;
402 short litnum;
403 union {
404 ftnint litival;
405 double litdval;
406 struct {
407 char litclen; /* small integer */
408 char litcstr[XL];
409 } litcval;
410 } litval;
411 };
412
413extern struct literal litpool[ ];
414extern int nliterals;
415
416
417
418
419
420/* popular functions with non integer return values */
421
422
423int *ckalloc();
424char *varstr(), *nounder(), *varunder();
425char *copyn(), *copys();
426chainp hookup(), mkchain();
427ftnint convci();
428char *convic();
429char *setdoto();
430double convcd();
431struct nameblock *mkname();
432struct labelblock *mklabel();
433struct extsym *mkext(), *newentry();
434struct exprblock *addrof(), *call1(), *call2(), *call3(), *call4();
435struct addrblock *builtin(), *mktemp(), *mktmpn();
436struct addrblock *autovar(), *mklhs(), *mkaddr(), *putconst(), *memversion();
437struct constblock *mkintcon();
438expptr mkexpr(), mkconv(), mkfunct(), fixexpr(), fixtype();
439tagptr cpexpr(), mkprim();
440struct errorblock *errnode();