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