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