Annotation of cci/usr/src/usr.bin/f77/f77pass1/defs.h, revision 1.1.1.1

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();

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.