|
|
1.1 root 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.1 (Berkeley) 6/7/85
7: */
8:
9: /*
10: * defs.h
11: *
12: * Definitions for f77pass1
13: *
14: * University of Utah CS Dept modification history:
15: *
16: * $Header: defs.h,v 2.3 85/06/07 21:06:48 root Exp $
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:
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();
559: expptr mkprim(), mklhs(), mkexpr(), mkconv(), mkfunct(), fixexpr(), fixtype();
560: expptr errnode(), mkintcon();
561: tagptr cpexpr();
562: ftnint lmin(), lmax(), iarrlen();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.