BSD 4_3_Tahoe release
[unix-history] / usr / src / usr.bin / f77 / f77.tahoe / f77pass1 / defs.h
CommitLineData
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
56typedef union Expression *expptr;
57typedef union Taggedblock *tagptr;
58typedef struct Chain *chainp;
59typedef struct Addrblock *Addrp;
60typedef struct Tempblock *Tempp;
61typedef struct Constblock *Constp;
62typedef struct Exprblock *Exprp;
63typedef struct Nameblock *Namep;
64
65extern FILEP infile;
66extern FILEP diagfile;
67extern FILEP textfile;
68extern FILEP asmfile;
69extern FILEP initfile;
70extern long int headoffset;
71
72extern char token [ ];
73extern int toklen;
74extern int lineno;
75extern char *infname;
76extern int needkwd;
77extern struct Labelblock *thislabel;
78
79extern int maxctl;
80extern int maxequiv;
81extern int maxstno;
82extern int maxhash;
83extern int maxext;
84
85extern flag profileflag;
86extern flag optimflag;
87extern flag nowarnflag;
88extern flag ftn66flag;
89extern flag no66flag;
90extern flag noextflag;
91extern flag shiftcase;
92extern flag undeftype;
93extern flag shortsubs;
94extern flag onetripflag;
95extern flag checksubs;
96extern flag debugflag[];
97extern flag equivdcl;
98extern int nerr;
99extern int nwarn;
100extern int ndata;
101
102extern int parstate;
103extern flag headerdone;
104extern int blklevel;
105extern flag saveall;
106extern flag substars;
107extern int impltype[ ];
108extern int implleng[ ];
109extern int implstg[ ];
110
111extern int tyint;
112extern int tylogical;
113extern ftnint typesize[];
114extern int typealign[];
115extern int procno;
116extern int proctype;
117extern char * procname;
118extern int rtvlabel[ ];
119extern int fudgelabel; /* to confuse the pdp11 optimizer */
120extern Addrp typeaddr;
121extern Addrp retslot;
122extern int cxslot;
123extern int chslot;
124extern int chlgslot;
125extern int procclass;
126extern ftnint procleng;
127extern int nentry;
128extern flag multitype;
129extern int blklevel;
130extern int lastlabno;
131extern int lastvarno;
132extern int lastargslot;
133extern int argloc;
134extern ftnint autoleng;
135extern ftnint bssleng;
136extern int retlabel;
137extern int ret0label;
138extern int dorange;
139extern int regnum[ ];
140extern Namep regnamep[ ];
141extern int maxregvar;
142extern int highregvar;
143extern int nregvar;
144extern ftnint lowbss;
145extern ftnint highbss;
146extern int bsslabel;
147extern flag anyinits;
148extern flag anylocals;
149
150extern chainp templist;
151extern chainp argtemplist;
152extern chainp activearglist;
153extern int maxdim;
154extern chainp holdtemps;
155extern struct Entrypoint *entries;
156extern struct Rplblock *rpllist;
157extern struct Chain *curdtp;
158extern ftnint curdtelt;
159extern flag toomanyinit;
160
161extern flag inioctl;
162extern int iostmt;
163extern Addrp ioblkp;
164extern int nioctl;
165extern int nequiv;
166extern int eqvstart; /* offset to eqv number to guarantee uniqueness */
167extern int nintnames;
168
169#ifdef SDB
170extern int dbglabel;
171extern flag sdbflag;
172#endif
173
174extern int cdatafile;
175extern int cchkfile;
176extern int vdatafile;
177extern int vchkfile;
178
179extern char cdatafname[];
180extern char cchkfname[];
181extern char vdatafname[];
182extern char vchkfname[];
183
184extern long cdatahwm;
185extern long vdatahwm;
186
187\f
188struct Chain
189 {
190 chainp nextp;
191 tagptr datap;
192 };
193
194extern chainp chains;
195
196struct Headblock
197 {
198 field tag;
199 field vtype;
200 field vclass;
201 field vstg;
202 expptr vleng;
203 } ;
204
205struct 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]
220extern struct Ctlframe *ctls;
221extern struct Ctlframe *ctlstack;
222extern struct Ctlframe *lastctl;
223
224struct 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
237extern struct Extsym *extsymtab;
238extern struct Extsym *nextext;
239extern struct Extsym *lastext;
240
241struct 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
252extern struct Labelblock *labeltab;
253extern struct Labelblock *labtabend;
254extern struct Labelblock *highlabtab;
255
256struct Entrypoint
257 {
258 struct Entrypoint *entnextp;
259 struct Extsym *entryname;
260 chainp arglist;
261 int entrylabel;
262 int typelabel;
263 Namep enamep;
264 };
265
266struct Primblock
267 {
268 field tag;
269 field vtype;
270 Namep namep;
271 struct Listblock *argsp;
272 expptr fcharp;
273 expptr lcharp;
274 };
275
276
277struct Hashentry
278 {
279 int hashval;
280 Namep varp;
281 };
282extern struct Hashentry *hashtab;
283extern struct Hashentry *lasthash;
284
285struct Intrpacked /* bits for intrinsic function description */
286 {
287 unsigned f1:3;
288 unsigned f2:4;
289 unsigned f3:7;
290 };
291
292struct 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
323struct 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
335struct 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
348union Constant
349 {
350 char *ccp;
351 ftnint ci;
352 double cd[2];
353 };
354
355struct Constblock
356 {
357 field tag;
358 field vtype;
359 field vclass;
360 field vstg;
361 expptr vleng;
362 union Constant const;
363 };
364
365
366struct Listblock
367 {
368 field tag;
369 field vtype;
370 chainp listp;
371 };
372
373
374
375struct 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
394struct 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
408struct Errorblock
409 {
410 field tag;
411 field vtype;
412 };
413
414
415union 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
430struct 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
448struct 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
465struct 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
476struct 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
488extern struct Equivblock *eqvclass;
489
490
491struct 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
503union 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
522struct 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
536extern struct Literal litpool[ ];
537extern int nliterals;
538
539
540
541/* popular functions with non integer return values */
542
543
544int *ckalloc();
545char *varstr(), *nounder(), *varunder();
546char *copyn(), *copys();
547chainp hookup(), mkchain();
548ftnint convci();
549char *convic();
550char *setdoto();
551double convcd();
552Namep mkname();
553struct Labelblock *mklabel(), *execlab();
554struct Extsym *mkext(), *newentry();
555expptr addrof(), call1(), call2(), call3(), call4();
556Tempp mktmpn();
557Addrp builtin(), mktemp(), altmpn(), mkaltemp(), mkaltmpn(), autovar();
558Addrp mkplace(), mkaddr(), putconst(), memversion();
ca67e7b4 559expptr mkprim(), mklhs(), mkexpr(), mkconv(), mkfunct(), fixexpr(), fixtype();
099b7138
KM
560expptr errnode(), mkintcon();
561tagptr cpexpr();
562ftnint lmin(), lmax(), iarrlen();