1*47955Sbostic /*- 2*47955Sbostic * Copyright (c) 1980 The Regents of the University of California. 3*47955Sbostic * All rights reserved. 422805Smckusick * 5*47955Sbostic * %sccs.include.proprietary.c% 6*47955Sbostic * 7*47955Sbostic * @(#)defs.h 5.5 (Berkeley) 04/12/91 822805Smckusick */ 922805Smckusick 1022805Smckusick /* 1122805Smckusick * defs.h 1222805Smckusick * 1322805Smckusick * Definitions for f77pass1 1422805Smckusick * 1522805Smckusick * University of Utah CS Dept modification history: 1622805Smckusick * 1722805Smckusick * $Log: defs.h,v $ 1825814Sdonn * Revision 5.5 86/01/10 17:11:11 donn 1925814Sdonn * Add a vparamval field to Nameblock struct -- fix up klugy sharing between 2025814Sdonn * Paramblock and Nameblock structs. 2125814Sdonn * 2225814Sdonn * Revision 5.4 85/11/25 00:23:47 donn 2325814Sdonn * 4.3 beta 2425814Sdonn * 2524475Sdonn * Revision 5.3 85/08/10 06:31:09 donn 2624475Sdonn * Added missing definition for intrconv(). 2724475Sdonn * 2824475Sdonn * Revision 5.2 85/08/10 04:01:53 donn 2924475Sdonn * Jerry Berkman's change to add a definition for 'dblflag' and to ifdef 3024475Sdonn * the Fortran 66 compatibility flags. 3124475Sdonn * 3224475Sdonn * Revision 5.1 85/08/10 03:44:01 donn 3324475Sdonn * 4.3 alpha 3424475Sdonn * 3522805Smckusick * Revision 2.3 85/06/07 21:06:48 root 3622805Smckusick * Add copyright 3722805Smckusick * 3822805Smckusick * Revision 2.2 85/01/11 21:02:58 donn 3922805Smckusick * Added 'issaved' bit to addrblocks to help implement SAVE statements. 4022805Smckusick * 4122805Smckusick * Revision 2.1 84/07/19 12:02:46 donn 4222805Smckusick * Changed comment headers for UofU. 4322805Smckusick * 4422805Smckusick * Revision 1.2 84/02/27 00:49:40 donn 4522805Smckusick * Added external references to lists of argument temporaries, used in the 4622805Smckusick * Berkeley changes to reduce offsets of data. 4722805Smckusick * 4822805Smckusick */ 4922805Smckusick 5022805Smckusick #include <stdio.h> 5122805Smckusick 5222805Smckusick #ifdef unix 5322805Smckusick # include <ctype.h> 5422805Smckusick #endif 5522805Smckusick 5622805Smckusick #include "ftypes.h" 5722805Smckusick #include "defines.h" 5822805Smckusick #include "machdefs.h" 5922805Smckusick 6022805Smckusick #define VL 16 6122805Smckusick 6222805Smckusick #define MAXDIM 20 6322805Smckusick #define MAXINCLUDES 10 6422805Smckusick #define MAXLITERALS 30 6522805Smckusick #define MAXCTL 20 6622805Smckusick #define MAXHASH 1009 6722805Smckusick #define MAXSTNO 401 6822805Smckusick #define MAXEXT 200 6922805Smckusick #define MAXEQUIV 150 7022805Smckusick #define MAXLABLIST 256 7122805Smckusick #define MAXDEBUGFLAG 20 7222805Smckusick 7322805Smckusick typedef union Expression *expptr; 7422805Smckusick typedef union Taggedblock *tagptr; 7522805Smckusick typedef struct Chain *chainp; 7622805Smckusick typedef struct Addrblock *Addrp; 7722805Smckusick typedef struct Tempblock *Tempp; 7822805Smckusick typedef struct Constblock *Constp; 7922805Smckusick typedef struct Exprblock *Exprp; 8022805Smckusick typedef struct Nameblock *Namep; 8122805Smckusick 8222805Smckusick extern FILEP infile; 8322805Smckusick extern FILEP diagfile; 8422805Smckusick extern FILEP textfile; 8522805Smckusick extern FILEP asmfile; 8622805Smckusick extern FILEP initfile; 8722805Smckusick extern long int headoffset; 8822805Smckusick 8922805Smckusick extern char token [ ]; 9022805Smckusick extern int toklen; 9122805Smckusick extern int lineno; 9222805Smckusick extern char *infname; 9322805Smckusick extern int needkwd; 9422805Smckusick extern struct Labelblock *thislabel; 9522805Smckusick 9622805Smckusick extern int maxctl; 9722805Smckusick extern int maxequiv; 9822805Smckusick extern int maxstno; 9922805Smckusick extern int maxhash; 10022805Smckusick extern int maxext; 10122805Smckusick 10222805Smckusick extern flag profileflag; 10324475Sdonn extern flag dblflag; 10422805Smckusick extern flag optimflag; 10522805Smckusick extern flag nowarnflag; 10622805Smckusick extern flag ftn66flag; 10724475Sdonn #ifdef ONLY66 10822805Smckusick extern flag no66flag; 10922805Smckusick extern flag noextflag; 11024475Sdonn #endif 11122805Smckusick extern flag shiftcase; 11222805Smckusick extern flag undeftype; 11322805Smckusick extern flag shortsubs; 11422805Smckusick extern flag onetripflag; 11522805Smckusick extern flag checksubs; 11622805Smckusick extern flag debugflag[]; 11722805Smckusick extern flag equivdcl; 11822805Smckusick extern int nerr; 11922805Smckusick extern int nwarn; 12022805Smckusick extern int ndata; 12122805Smckusick 12222805Smckusick extern int parstate; 12322805Smckusick extern flag headerdone; 12422805Smckusick extern int blklevel; 12522805Smckusick extern flag saveall; 12622805Smckusick extern flag substars; 12722805Smckusick extern int impltype[ ]; 12822805Smckusick extern int implleng[ ]; 12922805Smckusick extern int implstg[ ]; 13022805Smckusick 13122805Smckusick extern int tyint; 13222805Smckusick extern int tylogical; 13322805Smckusick extern ftnint typesize[]; 13422805Smckusick extern int typealign[]; 13522805Smckusick extern int procno; 13622805Smckusick extern int proctype; 13722805Smckusick extern char * procname; 13822805Smckusick extern int rtvlabel[ ]; 13922805Smckusick extern int fudgelabel; /* to confuse the pdp11 optimizer */ 14022805Smckusick extern Addrp typeaddr; 14122805Smckusick extern Addrp retslot; 14222805Smckusick extern int cxslot; 14322805Smckusick extern int chslot; 14422805Smckusick extern int chlgslot; 14522805Smckusick extern int procclass; 14622805Smckusick extern ftnint procleng; 14722805Smckusick extern int nentry; 14822805Smckusick extern flag multitype; 14922805Smckusick extern int blklevel; 15022805Smckusick extern int lastlabno; 15122805Smckusick extern int lastvarno; 15222805Smckusick extern int lastargslot; 15322805Smckusick extern int argloc; 15422805Smckusick extern ftnint autoleng; 15522805Smckusick extern ftnint bssleng; 15622805Smckusick extern int retlabel; 15722805Smckusick extern int ret0label; 15822805Smckusick extern int dorange; 15922805Smckusick extern int regnum[ ]; 16022805Smckusick extern Namep regnamep[ ]; 16122805Smckusick extern int maxregvar; 16222805Smckusick extern int highregvar; 16322805Smckusick extern int nregvar; 16422805Smckusick extern ftnint lowbss; 16522805Smckusick extern ftnint highbss; 16622805Smckusick extern int bsslabel; 16722805Smckusick extern flag anyinits; 16822805Smckusick extern flag anylocals; 16922805Smckusick 17022805Smckusick extern chainp templist; 17122805Smckusick extern chainp argtemplist; 17222805Smckusick extern chainp activearglist; 17322805Smckusick extern int maxdim; 17422805Smckusick extern chainp holdtemps; 17522805Smckusick extern struct Entrypoint *entries; 17622805Smckusick extern struct Rplblock *rpllist; 17722805Smckusick extern struct Chain *curdtp; 17822805Smckusick extern ftnint curdtelt; 17922805Smckusick extern flag toomanyinit; 18022805Smckusick 18122805Smckusick extern flag inioctl; 18222805Smckusick extern int iostmt; 18322805Smckusick extern Addrp ioblkp; 18422805Smckusick extern int nioctl; 18522805Smckusick extern int nequiv; 18622805Smckusick extern int eqvstart; /* offset to eqv number to guarantee uniqueness */ 18722805Smckusick extern int nintnames; 18822805Smckusick 18922805Smckusick #ifdef SDB 19022805Smckusick extern int dbglabel; 19122805Smckusick extern flag sdbflag; 19222805Smckusick #endif 19322805Smckusick 19422805Smckusick extern int cdatafile; 19522805Smckusick extern int cchkfile; 19622805Smckusick extern int vdatafile; 19722805Smckusick extern int vchkfile; 19822805Smckusick 19922805Smckusick extern char cdatafname[]; 20022805Smckusick extern char cchkfname[]; 20122805Smckusick extern char vdatafname[]; 20222805Smckusick extern char vchkfname[]; 20322805Smckusick 20422805Smckusick extern long cdatahwm; 20522805Smckusick extern long vdatahwm; 20622805Smckusick 20722805Smckusick 20822805Smckusick struct Chain 20922805Smckusick { 21022805Smckusick chainp nextp; 21122805Smckusick tagptr datap; 21222805Smckusick }; 21322805Smckusick 21422805Smckusick extern chainp chains; 21522805Smckusick 21622805Smckusick struct Headblock 21722805Smckusick { 21822805Smckusick field tag; 21922805Smckusick field vtype; 22022805Smckusick field vclass; 22122805Smckusick field vstg; 22222805Smckusick expptr vleng; 22322805Smckusick } ; 22422805Smckusick 22522805Smckusick struct Ctlframe 22622805Smckusick { 22722805Smckusick unsigned ctltype:8; 22822805Smckusick unsigned dostepsign:8; 22922805Smckusick int ctlabels[4]; 23022805Smckusick int dolabel; 23122805Smckusick Namep donamep; 23222805Smckusick expptr domax; 23322805Smckusick expptr dostep; 23422805Smckusick }; 23522805Smckusick #define endlabel ctlabels[0] 23622805Smckusick #define elselabel ctlabels[1] 23722805Smckusick #define dobodylabel ctlabels[1] 23822805Smckusick #define doposlabel ctlabels[2] 23922805Smckusick #define doneglabel ctlabels[3] 24022805Smckusick extern struct Ctlframe *ctls; 24122805Smckusick extern struct Ctlframe *ctlstack; 24222805Smckusick extern struct Ctlframe *lastctl; 24322805Smckusick 24422805Smckusick struct Extsym 24522805Smckusick { 24622805Smckusick char extname[XL+1]; 24722805Smckusick field extstg; 24822805Smckusick unsigned extsave:1; 24922805Smckusick unsigned extinit:1; 25022805Smckusick chainp extp; 25122805Smckusick ftnint extleng; 25222805Smckusick ftnint maxleng; 25322805Smckusick char init; 25422805Smckusick long initoffset; 25522805Smckusick }; 25622805Smckusick 25722805Smckusick extern struct Extsym *extsymtab; 25822805Smckusick extern struct Extsym *nextext; 25922805Smckusick extern struct Extsym *lastext; 26022805Smckusick 26122805Smckusick struct Labelblock 26222805Smckusick { 26322805Smckusick int labelno; 26422805Smckusick unsigned blklevel:8; 26522805Smckusick unsigned labused:1; 26622805Smckusick unsigned labinacc:1; 26722805Smckusick unsigned labdefined:1; 26822805Smckusick unsigned labtype:2; 26922805Smckusick ftnint stateno; 27022805Smckusick }; 27122805Smckusick 27222805Smckusick extern struct Labelblock *labeltab; 27322805Smckusick extern struct Labelblock *labtabend; 27422805Smckusick extern struct Labelblock *highlabtab; 27522805Smckusick 27622805Smckusick struct Entrypoint 27722805Smckusick { 27822805Smckusick struct Entrypoint *entnextp; 27922805Smckusick struct Extsym *entryname; 28022805Smckusick chainp arglist; 28122805Smckusick int entrylabel; 28222805Smckusick int typelabel; 28322805Smckusick Namep enamep; 28422805Smckusick }; 28522805Smckusick 28622805Smckusick struct Primblock 28722805Smckusick { 28822805Smckusick field tag; 28922805Smckusick field vtype; 29022805Smckusick Namep namep; 29122805Smckusick struct Listblock *argsp; 29222805Smckusick expptr fcharp; 29322805Smckusick expptr lcharp; 29422805Smckusick }; 29522805Smckusick 29622805Smckusick 29722805Smckusick struct Hashentry 29822805Smckusick { 29922805Smckusick int hashval; 30022805Smckusick Namep varp; 30122805Smckusick }; 30222805Smckusick extern struct Hashentry *hashtab; 30322805Smckusick extern struct Hashentry *lasthash; 30422805Smckusick 30522805Smckusick struct Intrpacked /* bits for intrinsic function description */ 30622805Smckusick { 30722805Smckusick unsigned f1:3; 30822805Smckusick unsigned f2:4; 30922805Smckusick unsigned f3:7; 31022805Smckusick }; 31122805Smckusick 31222805Smckusick struct Nameblock 31322805Smckusick { 31422805Smckusick field tag; 31522805Smckusick field vtype; 31622805Smckusick field vclass; 31722805Smckusick field vstg; 31822805Smckusick expptr vleng; 31922805Smckusick char varname[VL]; 32025814Sdonn expptr vparamval; 32122805Smckusick unsigned vdovar:1; 32222805Smckusick unsigned vdcldone:1; 32322805Smckusick unsigned vadjdim:1; 32422805Smckusick unsigned vsave:1; 32522805Smckusick unsigned vprocclass:3; 32622805Smckusick unsigned vregno:4; 32722805Smckusick union { 32822805Smckusick int varno; 32922805Smckusick struct Intrpacked intrdesc; /* bits for intrinsic function*/ 33022805Smckusick } vardesc; 33122805Smckusick struct Dimblock *vdim; 33222805Smckusick ftnint voffset; 33322805Smckusick union { 33422805Smckusick chainp namelist; /* points to chain of names in */ 33522805Smckusick chainp vstfdesc; /* points to (formals, expr) pair */ 33622805Smckusick } varxptr; 33722805Smckusick char inlcomm; 33822805Smckusick char init; 33922805Smckusick long initoffset; 34022805Smckusick ftnint varsize; 34122805Smckusick }; 34222805Smckusick 34322805Smckusick 34422805Smckusick struct Paramblock 34522805Smckusick { 34622805Smckusick field tag; 34722805Smckusick field vtype; 34822805Smckusick field vclass; 34922805Smckusick field vstg; 35022805Smckusick expptr vleng; 35122805Smckusick char varname[VL]; 35222805Smckusick expptr paramval; 35322805Smckusick } ; 35422805Smckusick 35522805Smckusick 35622805Smckusick struct Exprblock 35722805Smckusick { 35822805Smckusick field tag; 35922805Smckusick field vtype; 36022805Smckusick field vclass; 36122805Smckusick field vstg; 36222805Smckusick expptr vleng; 36322805Smckusick unsigned opcode:6; 36422805Smckusick expptr leftp; 36522805Smckusick expptr rightp; 36622805Smckusick }; 36722805Smckusick 36822805Smckusick 36922805Smckusick union Constant 37022805Smckusick { 37122805Smckusick char *ccp; 37222805Smckusick ftnint ci; 37322805Smckusick double cd[2]; 37422805Smckusick }; 37522805Smckusick 37622805Smckusick struct Constblock 37722805Smckusick { 37822805Smckusick field tag; 37922805Smckusick field vtype; 38022805Smckusick field vclass; 38122805Smckusick field vstg; 38222805Smckusick expptr vleng; 38333253Sbostic union Constant constant; 38422805Smckusick }; 38522805Smckusick 38622805Smckusick 38722805Smckusick struct Listblock 38822805Smckusick { 38922805Smckusick field tag; 39022805Smckusick field vtype; 39122805Smckusick chainp listp; 39222805Smckusick }; 39322805Smckusick 39422805Smckusick 39522805Smckusick 39622805Smckusick struct Addrblock 39722805Smckusick { 39822805Smckusick field tag; 39922805Smckusick field vtype; 40022805Smckusick field vclass; 40122805Smckusick field vstg; 40222805Smckusick expptr vleng; 40322805Smckusick int memno; 40422805Smckusick expptr memoffset; 40522805Smckusick unsigned istemp:1; 40622805Smckusick unsigned isarray:1; 40722805Smckusick unsigned issaved:1; 40822805Smckusick unsigned ntempelt:10; 40922805Smckusick ftnint varleng; 41022805Smckusick ftnint varsize; 41122805Smckusick }; 41222805Smckusick 41322805Smckusick 41422805Smckusick 41522805Smckusick struct Tempblock 41622805Smckusick { 41722805Smckusick field tag; 41822805Smckusick field vtype; 41922805Smckusick field vclass; 42022805Smckusick expptr vleng; 42122805Smckusick Addrp memalloc; 42222805Smckusick unsigned istemp:1; 42322805Smckusick unsigned ntempelt:10; 42422805Smckusick ftnint varleng; 42522805Smckusick }; 42622805Smckusick 42722805Smckusick 42822805Smckusick 42922805Smckusick struct Errorblock 43022805Smckusick { 43122805Smckusick field tag; 43222805Smckusick field vtype; 43322805Smckusick }; 43422805Smckusick 43522805Smckusick 43622805Smckusick union Expression 43722805Smckusick { 43822805Smckusick field tag; 43922805Smckusick struct Headblock headblock; 44022805Smckusick struct Exprblock exprblock; 44122805Smckusick struct Addrblock addrblock; 44222805Smckusick struct Tempblock tempblock; 44322805Smckusick struct Constblock constblock; 44422805Smckusick struct Errorblock errorblock; 44522805Smckusick struct Listblock listblock; 44622805Smckusick struct Primblock primblock; 44722805Smckusick } ; 44822805Smckusick 44922805Smckusick 45022805Smckusick 45122805Smckusick struct Dimblock 45222805Smckusick { 45322805Smckusick int ndim; 45422805Smckusick expptr nelt; 45522805Smckusick expptr baseoffset; 45622805Smckusick expptr basexpr; 45722805Smckusick struct 45822805Smckusick { 45922805Smckusick expptr dimsize; 46022805Smckusick expptr dimexpr; 46122805Smckusick expptr lb; 46222805Smckusick expptr lbaddr; 46322805Smckusick expptr ub; 46422805Smckusick expptr ubaddr; 46522805Smckusick } dims[1]; 46622805Smckusick }; 46722805Smckusick 46822805Smckusick 46922805Smckusick struct Impldoblock 47022805Smckusick { 47122805Smckusick field tag; 47222805Smckusick unsigned isactive:1; 47322805Smckusick unsigned isbusy:1; 47422805Smckusick Namep varnp; 47522805Smckusick Constp varvp; 47622805Smckusick chainp impdospec; 47722805Smckusick expptr implb; 47822805Smckusick expptr impub; 47922805Smckusick expptr impstep; 48022805Smckusick ftnint impdiff; 48122805Smckusick ftnint implim; 48222805Smckusick struct Chain *datalist; 48322805Smckusick }; 48422805Smckusick 48522805Smckusick 48622805Smckusick struct Rplblock /* name replacement block */ 48722805Smckusick { 48822805Smckusick struct Rplblock *rplnextp; 48922805Smckusick Namep rplnp; 49022805Smckusick expptr rplvp; 49122805Smckusick expptr rplxp; 49222805Smckusick int rpltag; 49322805Smckusick }; 49422805Smckusick 49522805Smckusick 49622805Smckusick 49722805Smckusick struct Equivblock 49822805Smckusick { 49922805Smckusick struct Eqvchain *equivs; 50022805Smckusick flag eqvinit; 50122805Smckusick long int eqvtop; 50222805Smckusick long int eqvbottom; 50322805Smckusick char inlcomm; 50422805Smckusick char init; 50522805Smckusick long initoffset; 50622805Smckusick } ; 50722805Smckusick #define eqvleng eqvtop 50822805Smckusick 50922805Smckusick extern struct Equivblock *eqvclass; 51022805Smckusick 51122805Smckusick 51222805Smckusick struct Eqvchain 51322805Smckusick { 51422805Smckusick struct Eqvchain *eqvnextp; 51522805Smckusick union 51622805Smckusick { 51722805Smckusick struct Primblock *eqvlhs; 51822805Smckusick Namep eqvname; 51922805Smckusick } eqvitem; 52022805Smckusick long int eqvoffset; 52122805Smckusick } ; 52222805Smckusick 52322805Smckusick 52422805Smckusick union Taggedblock 52522805Smckusick { 52622805Smckusick field tag; 52722805Smckusick struct Headblock headblock; 52822805Smckusick struct Nameblock nameblock; 52922805Smckusick struct Paramblock paramblock; 53022805Smckusick struct Exprblock exprblock; 53122805Smckusick struct Constblock constblock; 53222805Smckusick struct Listblock listblock; 53322805Smckusick struct Addrblock addrblock; 53422805Smckusick struct Tempblock tempblock; 53522805Smckusick struct Errorblock errorblock; 53622805Smckusick struct Primblock primblock; 53722805Smckusick struct Impldoblock impldoblock; 53822805Smckusick } ; 53922805Smckusick 54022805Smckusick 54122805Smckusick 54222805Smckusick 54322805Smckusick struct Literal 54422805Smckusick { 54522805Smckusick short littype; 54622805Smckusick short litnum; 54722805Smckusick union { 54822805Smckusick ftnint litival; 54922805Smckusick double litdval; 55022805Smckusick struct { 55122805Smckusick char litclen; /* small integer */ 55222805Smckusick char litcstr[XL]; 55322805Smckusick } litcval; 55422805Smckusick } litval; 55522805Smckusick }; 55622805Smckusick 55722805Smckusick extern struct Literal litpool[ ]; 55822805Smckusick extern int nliterals; 55922805Smckusick 56022805Smckusick 56122805Smckusick 56222805Smckusick /* popular functions with non integer return values */ 56322805Smckusick 56422805Smckusick 56522805Smckusick int *ckalloc(); 56622805Smckusick char *varstr(), *nounder(), *varunder(); 56722805Smckusick char *copyn(), *copys(); 56822805Smckusick chainp hookup(), mkchain(); 56922805Smckusick ftnint convci(); 57022805Smckusick char *convic(); 57122805Smckusick char *setdoto(); 57222805Smckusick double convcd(); 57322805Smckusick Namep mkname(); 57422805Smckusick struct Labelblock *mklabel(), *execlab(); 57522805Smckusick struct Extsym *mkext(), *newentry(); 57622805Smckusick expptr addrof(), call1(), call2(), call3(), call4(); 57722805Smckusick Tempp mktmpn(); 57822805Smckusick Addrp builtin(), mktemp(), altmpn(), mkaltemp(), mkaltmpn(), autovar(); 57922805Smckusick Addrp mkplace(), mkaddr(), putconst(), memversion(); 58024475Sdonn expptr mkprim(), mklhs(), mkexpr(), mkconv(), intrconv(), mkfunct(); 58124475Sdonn expptr fixexpr(), fixtype(); 58222805Smckusick expptr errnode(), mkintcon(); 58322805Smckusick tagptr cpexpr(); 58422805Smckusick ftnint lmin(), lmax(), iarrlen(); 585