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