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