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