Commit | Line | Data |
---|---|---|
099b7138 KM |
1 | /* |
2 | * Copyright (c) 1980 Regents of the University of California. | |
3 | * All rights reserved. The Berkeley software License Agreement | |
4 | * specifies the terms and conditions for redistribution. | |
5 | * | |
ca67e7b4 | 6 | * @(#)defs.h 5.1 (Berkeley) 6/7/85 |
099b7138 KM |
7 | */ |
8 | ||
9 | /* | |
10 | * defs.h | |
11 | * | |
12 | * Definitions for f77pass1 | |
13 | * | |
14 | * University of Utah CS Dept modification history: | |
15 | * | |
ca67e7b4 | 16 | * $Header: defs.h,v 2.3 85/06/07 21:06:48 root Exp $ |
099b7138 KM |
17 | * $Log: defs.h,v $ |
18 | * Revision 2.3 85/06/07 21:06:48 root | |
19 | * Add copyright | |
20 | * | |
21 | * Revision 2.2 85/01/11 21:02:58 donn | |
22 | * Added 'issaved' bit to addrblocks to help implement SAVE statements. | |
23 | * | |
24 | * Revision 2.1 84/07/19 12:02:46 donn | |
25 | * Changed comment headers for UofU. | |
26 | * | |
27 | * Revision 1.2 84/02/27 00:49:40 donn | |
28 | * Added external references to lists of argument temporaries, used in the | |
29 | * Berkeley changes to reduce offsets of data. | |
30 | * | |
31 | */ | |
32 | ||
33 | #include <stdio.h> | |
34 | ||
35 | #ifdef unix | |
36 | # include <ctype.h> | |
37 | #endif | |
38 | ||
39 | #include "ftypes.h" | |
40 | #include "defines.h" | |
41 | #include "machdefs.h" | |
42 | ||
43 | #define VL 16 | |
44 | ||
45 | #define MAXDIM 20 | |
46 | #define MAXINCLUDES 10 | |
47 | #define MAXLITERALS 30 | |
48 | #define MAXCTL 20 | |
49 | #define MAXHASH 1009 | |
50 | #define MAXSTNO 401 | |
51 | #define MAXEXT 200 | |
52 | #define MAXEQUIV 150 | |
53 | #define MAXLABLIST 256 | |
54 | #define MAXDEBUGFLAG 20 | |
55 | ||
56 | typedef union Expression *expptr; | |
57 | typedef union Taggedblock *tagptr; | |
58 | typedef struct Chain *chainp; | |
59 | typedef struct Addrblock *Addrp; | |
60 | typedef struct Tempblock *Tempp; | |
61 | typedef struct Constblock *Constp; | |
62 | typedef struct Exprblock *Exprp; | |
63 | typedef struct Nameblock *Namep; | |
64 | ||
65 | extern FILEP infile; | |
66 | extern FILEP diagfile; | |
67 | extern FILEP textfile; | |
68 | extern FILEP asmfile; | |
69 | extern FILEP initfile; | |
70 | extern long int headoffset; | |
71 | ||
72 | extern char token [ ]; | |
73 | extern int toklen; | |
74 | extern int lineno; | |
75 | extern char *infname; | |
76 | extern int needkwd; | |
77 | extern struct Labelblock *thislabel; | |
78 | ||
79 | extern int maxctl; | |
80 | extern int maxequiv; | |
81 | extern int maxstno; | |
82 | extern int maxhash; | |
83 | extern int maxext; | |
84 | ||
85 | extern flag profileflag; | |
86 | extern flag optimflag; | |
87 | extern flag nowarnflag; | |
88 | extern flag ftn66flag; | |
89 | extern flag no66flag; | |
90 | extern flag noextflag; | |
91 | extern flag shiftcase; | |
92 | extern flag undeftype; | |
93 | extern flag shortsubs; | |
94 | extern flag onetripflag; | |
95 | extern flag checksubs; | |
96 | extern flag debugflag[]; | |
97 | extern flag equivdcl; | |
98 | extern int nerr; | |
99 | extern int nwarn; | |
100 | extern int ndata; | |
101 | ||
102 | extern int parstate; | |
103 | extern flag headerdone; | |
104 | extern int blklevel; | |
105 | extern flag saveall; | |
106 | extern flag substars; | |
107 | extern int impltype[ ]; | |
108 | extern int implleng[ ]; | |
109 | extern int implstg[ ]; | |
110 | ||
111 | extern int tyint; | |
112 | extern int tylogical; | |
113 | extern ftnint typesize[]; | |
114 | extern int typealign[]; | |
115 | extern int procno; | |
116 | extern int proctype; | |
117 | extern char * procname; | |
118 | extern int rtvlabel[ ]; | |
119 | extern int fudgelabel; /* to confuse the pdp11 optimizer */ | |
120 | extern Addrp typeaddr; | |
121 | extern Addrp retslot; | |
122 | extern int cxslot; | |
123 | extern int chslot; | |
124 | extern int chlgslot; | |
125 | extern int procclass; | |
126 | extern ftnint procleng; | |
127 | extern int nentry; | |
128 | extern flag multitype; | |
129 | extern int blklevel; | |
130 | extern int lastlabno; | |
131 | extern int lastvarno; | |
132 | extern int lastargslot; | |
133 | extern int argloc; | |
134 | extern ftnint autoleng; | |
135 | extern ftnint bssleng; | |
136 | extern int retlabel; | |
137 | extern int ret0label; | |
138 | extern int dorange; | |
139 | extern int regnum[ ]; | |
140 | extern Namep regnamep[ ]; | |
141 | extern int maxregvar; | |
142 | extern int highregvar; | |
143 | extern int nregvar; | |
144 | extern ftnint lowbss; | |
145 | extern ftnint highbss; | |
146 | extern int bsslabel; | |
147 | extern flag anyinits; | |
148 | extern flag anylocals; | |
149 | ||
150 | extern chainp templist; | |
151 | extern chainp argtemplist; | |
152 | extern chainp activearglist; | |
153 | extern int maxdim; | |
154 | extern chainp holdtemps; | |
155 | extern struct Entrypoint *entries; | |
156 | extern struct Rplblock *rpllist; | |
157 | extern struct Chain *curdtp; | |
158 | extern ftnint curdtelt; | |
159 | extern flag toomanyinit; | |
160 | ||
161 | extern flag inioctl; | |
162 | extern int iostmt; | |
163 | extern Addrp ioblkp; | |
164 | extern int nioctl; | |
165 | extern int nequiv; | |
166 | extern int eqvstart; /* offset to eqv number to guarantee uniqueness */ | |
167 | extern int nintnames; | |
168 | ||
169 | #ifdef SDB | |
170 | extern int dbglabel; | |
171 | extern flag sdbflag; | |
172 | #endif | |
173 | ||
174 | extern int cdatafile; | |
175 | extern int cchkfile; | |
176 | extern int vdatafile; | |
177 | extern int vchkfile; | |
178 | ||
179 | extern char cdatafname[]; | |
180 | extern char cchkfname[]; | |
181 | extern char vdatafname[]; | |
182 | extern char vchkfname[]; | |
183 | ||
184 | extern long cdatahwm; | |
185 | extern long vdatahwm; | |
186 | ||
187 | \f | |
188 | struct Chain | |
189 | { | |
190 | chainp nextp; | |
191 | tagptr datap; | |
192 | }; | |
193 | ||
194 | extern chainp chains; | |
195 | ||
196 | struct Headblock | |
197 | { | |
198 | field tag; | |
199 | field vtype; | |
200 | field vclass; | |
201 | field vstg; | |
202 | expptr vleng; | |
203 | } ; | |
204 | ||
205 | struct Ctlframe | |
206 | { | |
207 | unsigned ctltype:8; | |
208 | unsigned dostepsign:8; | |
209 | int ctlabels[4]; | |
210 | int dolabel; | |
211 | Namep donamep; | |
212 | expptr domax; | |
213 | expptr dostep; | |
214 | }; | |
215 | #define endlabel ctlabels[0] | |
216 | #define elselabel ctlabels[1] | |
217 | #define dobodylabel ctlabels[1] | |
218 | #define doposlabel ctlabels[2] | |
219 | #define doneglabel ctlabels[3] | |
220 | extern struct Ctlframe *ctls; | |
221 | extern struct Ctlframe *ctlstack; | |
222 | extern struct Ctlframe *lastctl; | |
223 | ||
224 | struct Extsym | |
225 | { | |
226 | char extname[XL+1]; | |
227 | field extstg; | |
228 | unsigned extsave:1; | |
229 | unsigned extinit:1; | |
230 | chainp extp; | |
231 | ftnint extleng; | |
232 | ftnint maxleng; | |
233 | char init; | |
234 | long initoffset; | |
235 | }; | |
236 | ||
237 | extern struct Extsym *extsymtab; | |
238 | extern struct Extsym *nextext; | |
239 | extern struct Extsym *lastext; | |
240 | ||
241 | struct Labelblock | |
242 | { | |
243 | int labelno; | |
244 | unsigned blklevel:8; | |
245 | unsigned labused:1; | |
246 | unsigned labinacc:1; | |
247 | unsigned labdefined:1; | |
248 | unsigned labtype:2; | |
249 | ftnint stateno; | |
250 | }; | |
251 | ||
252 | extern struct Labelblock *labeltab; | |
253 | extern struct Labelblock *labtabend; | |
254 | extern struct Labelblock *highlabtab; | |
255 | ||
256 | struct Entrypoint | |
257 | { | |
258 | struct Entrypoint *entnextp; | |
259 | struct Extsym *entryname; | |
260 | chainp arglist; | |
261 | int entrylabel; | |
262 | int typelabel; | |
263 | Namep enamep; | |
264 | }; | |
265 | ||
266 | struct Primblock | |
267 | { | |
268 | field tag; | |
269 | field vtype; | |
270 | Namep namep; | |
271 | struct Listblock *argsp; | |
272 | expptr fcharp; | |
273 | expptr lcharp; | |
274 | }; | |
275 | ||
276 | ||
277 | struct Hashentry | |
278 | { | |
279 | int hashval; | |
280 | Namep varp; | |
281 | }; | |
282 | extern struct Hashentry *hashtab; | |
283 | extern struct Hashentry *lasthash; | |
284 | ||
285 | struct Intrpacked /* bits for intrinsic function description */ | |
286 | { | |
287 | unsigned f1:3; | |
288 | unsigned f2:4; | |
289 | unsigned f3:7; | |
290 | }; | |
291 | ||
292 | struct Nameblock | |
293 | { | |
294 | field tag; | |
295 | field vtype; | |
296 | field vclass; | |
297 | field vstg; | |
298 | expptr vleng; | |
299 | char varname[VL]; | |
300 | unsigned vdovar:1; | |
301 | unsigned vdcldone:1; | |
302 | unsigned vadjdim:1; | |
303 | unsigned vsave:1; | |
304 | unsigned vprocclass:3; | |
305 | unsigned vregno:4; | |
306 | union { | |
307 | int varno; | |
308 | struct Intrpacked intrdesc; /* bits for intrinsic function*/ | |
309 | } vardesc; | |
310 | struct Dimblock *vdim; | |
311 | ftnint voffset; | |
312 | union { | |
313 | chainp namelist; /* points to chain of names in */ | |
314 | chainp vstfdesc; /* points to (formals, expr) pair */ | |
315 | } varxptr; | |
316 | char inlcomm; | |
317 | char init; | |
318 | long initoffset; | |
319 | ftnint varsize; | |
320 | }; | |
321 | ||
322 | ||
323 | struct Paramblock | |
324 | { | |
325 | field tag; | |
326 | field vtype; | |
327 | field vclass; | |
328 | field vstg; | |
329 | expptr vleng; | |
330 | char varname[VL]; | |
331 | expptr paramval; | |
332 | } ; | |
333 | ||
334 | ||
335 | struct Exprblock | |
336 | { | |
337 | field tag; | |
338 | field vtype; | |
339 | field vclass; | |
340 | field vstg; | |
341 | expptr vleng; | |
342 | unsigned opcode:6; | |
343 | expptr leftp; | |
344 | expptr rightp; | |
345 | }; | |
346 | ||
347 | ||
348 | union Constant | |
349 | { | |
350 | char *ccp; | |
351 | ftnint ci; | |
352 | double cd[2]; | |
353 | }; | |
354 | ||
355 | struct Constblock | |
356 | { | |
357 | field tag; | |
358 | field vtype; | |
359 | field vclass; | |
360 | field vstg; | |
361 | expptr vleng; | |
362 | union Constant const; | |
363 | }; | |
364 | ||
365 | ||
366 | struct Listblock | |
367 | { | |
368 | field tag; | |
369 | field vtype; | |
370 | chainp listp; | |
371 | }; | |
372 | ||
373 | ||
374 | ||
375 | struct Addrblock | |
376 | { | |
377 | field tag; | |
378 | field vtype; | |
379 | field vclass; | |
380 | field vstg; | |
381 | expptr vleng; | |
382 | int memno; | |
383 | expptr memoffset; | |
384 | unsigned istemp:1; | |
385 | unsigned isarray:1; | |
386 | unsigned issaved:1; | |
387 | unsigned ntempelt:10; | |
388 | ftnint varleng; | |
389 | ftnint varsize; | |
390 | }; | |
391 | ||
392 | ||
393 | ||
394 | struct Tempblock | |
395 | { | |
396 | field tag; | |
397 | field vtype; | |
398 | field vclass; | |
399 | expptr vleng; | |
400 | Addrp memalloc; | |
401 | unsigned istemp:1; | |
402 | unsigned ntempelt:10; | |
403 | ftnint varleng; | |
404 | }; | |
405 | ||
406 | ||
407 | ||
408 | struct Errorblock | |
409 | { | |
410 | field tag; | |
411 | field vtype; | |
412 | }; | |
413 | ||
414 | ||
415 | union Expression | |
416 | { | |
417 | field tag; | |
418 | struct Headblock headblock; | |
419 | struct Exprblock exprblock; | |
420 | struct Addrblock addrblock; | |
421 | struct Tempblock tempblock; | |
422 | struct Constblock constblock; | |
423 | struct Errorblock errorblock; | |
424 | struct Listblock listblock; | |
425 | struct Primblock primblock; | |
426 | } ; | |
427 | ||
428 | ||
429 | ||
430 | struct Dimblock | |
431 | { | |
432 | int ndim; | |
433 | expptr nelt; | |
434 | expptr baseoffset; | |
435 | expptr basexpr; | |
436 | struct | |
437 | { | |
438 | expptr dimsize; | |
439 | expptr dimexpr; | |
440 | expptr lb; | |
441 | expptr lbaddr; | |
442 | expptr ub; | |
443 | expptr ubaddr; | |
444 | } dims[1]; | |
445 | }; | |
446 | ||
447 | ||
448 | struct Impldoblock | |
449 | { | |
450 | field tag; | |
451 | unsigned isactive:1; | |
452 | unsigned isbusy:1; | |
453 | Namep varnp; | |
454 | Constp varvp; | |
455 | chainp impdospec; | |
456 | expptr implb; | |
457 | expptr impub; | |
458 | expptr impstep; | |
459 | ftnint impdiff; | |
460 | ftnint implim; | |
461 | struct Chain *datalist; | |
462 | }; | |
463 | ||
464 | ||
465 | struct Rplblock /* name replacement block */ | |
466 | { | |
467 | struct Rplblock *rplnextp; | |
468 | Namep rplnp; | |
469 | expptr rplvp; | |
470 | expptr rplxp; | |
471 | int rpltag; | |
472 | }; | |
473 | ||
474 | ||
475 | ||
476 | struct Equivblock | |
477 | { | |
478 | struct Eqvchain *equivs; | |
479 | flag eqvinit; | |
480 | long int eqvtop; | |
481 | long int eqvbottom; | |
482 | char inlcomm; | |
483 | char init; | |
484 | long initoffset; | |
485 | } ; | |
486 | #define eqvleng eqvtop | |
487 | ||
488 | extern struct Equivblock *eqvclass; | |
489 | ||
490 | ||
491 | struct Eqvchain | |
492 | { | |
493 | struct Eqvchain *eqvnextp; | |
494 | union | |
495 | { | |
496 | struct Primblock *eqvlhs; | |
497 | Namep eqvname; | |
498 | } eqvitem; | |
499 | long int eqvoffset; | |
500 | } ; | |
501 | ||
502 | ||
503 | union Taggedblock | |
504 | { | |
505 | field tag; | |
506 | struct Headblock headblock; | |
507 | struct Nameblock nameblock; | |
508 | struct Paramblock paramblock; | |
509 | struct Exprblock exprblock; | |
510 | struct Constblock constblock; | |
511 | struct Listblock listblock; | |
512 | struct Addrblock addrblock; | |
513 | struct Tempblock tempblock; | |
514 | struct Errorblock errorblock; | |
515 | struct Primblock primblock; | |
516 | struct Impldoblock impldoblock; | |
517 | } ; | |
518 | ||
519 | ||
520 | ||
521 | ||
522 | struct Literal | |
523 | { | |
524 | short littype; | |
525 | short litnum; | |
526 | union { | |
527 | ftnint litival; | |
528 | double litdval; | |
529 | struct { | |
530 | char litclen; /* small integer */ | |
531 | char litcstr[XL]; | |
532 | } litcval; | |
533 | } litval; | |
534 | }; | |
535 | ||
536 | extern struct Literal litpool[ ]; | |
537 | extern int nliterals; | |
538 | ||
539 | ||
540 | ||
541 | /* popular functions with non integer return values */ | |
542 | ||
543 | ||
544 | int *ckalloc(); | |
545 | char *varstr(), *nounder(), *varunder(); | |
546 | char *copyn(), *copys(); | |
547 | chainp hookup(), mkchain(); | |
548 | ftnint convci(); | |
549 | char *convic(); | |
550 | char *setdoto(); | |
551 | double convcd(); | |
552 | Namep mkname(); | |
553 | struct Labelblock *mklabel(), *execlab(); | |
554 | struct Extsym *mkext(), *newentry(); | |
555 | expptr addrof(), call1(), call2(), call3(), call4(); | |
556 | Tempp mktmpn(); | |
557 | Addrp builtin(), mktemp(), altmpn(), mkaltemp(), mkaltmpn(), autovar(); | |
558 | Addrp mkplace(), mkaddr(), putconst(), memversion(); | |
ca67e7b4 | 559 | expptr mkprim(), mklhs(), mkexpr(), mkconv(), mkfunct(), fixexpr(), fixtype(); |
099b7138 KM |
560 | expptr errnode(), mkintcon(); |
561 | tagptr cpexpr(); | |
562 | ftnint lmin(), lmax(), iarrlen(); |