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