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