1 /* BEGIN fort_nodes.incl.pl1 */
   2 
   3 
   4 
   5 /****^  HISTORY COMMENTS:
   6   1) change(86-07-14,BWong), approve(86-07-14,MCR7382), audit(86-07-17,Ginter),
   7      install(86-07-28,MR12.0-1105):
   8      Fix fortran bug 473.
   9   2) change(88-04-28,RWaters), approve(88-04-28,MCR7875), audit(88-07-13,Huen),
  10      install(88-11-10,MR12.2-1209):
  11      Implement SCP 6339: Allow character variable to be up to 128K-1 (131071)
  12      character long.
  13                                                    END HISTORY COMMENTS */
  14 
  15 
  16 /* Written: June 1976 by David Levin and Richard Barnes
  17 
  18 Modified:
  19           Feb 24 1977 by G. Chang for the optimizer
  20           Sept 12, 1977 by R. Barnes for the loop optimizer
  21           Nov 16, 1977 by D. Levin to add machine state node for loop optimizer
  22           Oct 09 1978 by P Smee for larger common and arrays.
  23           Dec 05 1978 by P Smee for %options statement.
  24           Jan 17 1979 by R Barnes for machine_state.value_in_xr
  25           May 23 1979 by P Smee to add source.line_number
  26           July 19 1979 by R Barnes for char mode changes
  27           Sept 17 1979 by R Barnes for register optimizer changes
  28           Oct 3 1979 by C R Davis for new EAQ management scheme.
  29           29 Oct 1979 by C R Davis for machine_state.eaq.reserved.
  30           3 Nov 1979 by R. Barnes for pointer node and to change
  31                     machine_state.next from a fixed bin to a pointer.
  32           18 Dec 1979 by R. Barnes for loop_ref_count to finalize
  33                     changes for the register optimizer.
  34           17 Dec 1979 by C R Davis for symbol.descriptor
  35           22 Dec 1979 by R. Barnes to remove in_list.
  36           22 Jan 1980 by P E Smee to try for long char arrays.
  37           23 Jan 1980 by C R Davis to fix bugs with yesterday's changes.
  38           4 Mar 1980 by C R Davis to rename node.multi_position to
  39                     node.stack_indirect, and to add machine_state.stack_extended
  40                     and machine_state.last_dynamic_temp.
  41           5 Jun 1980 by M E Presser to alter arg_desc node for use
  42                     in stack-extensions and arg-descriptor generation.
  43           16 July 1980 by C R Davis for symbol.variable_arglist.
  44           8 Jan 81 by M E Presser for label.not_referencable
  45           17 Feb 1981 by C R Davis for new dimension node layout.
  46           11 March 1981 by MEP for dimension.assumed_size
  47            3 May   1982 by TO to add star_extent_function to subprogram node.
  48  Mod 1    25 August 1982 by TO to add VLA_chain and LA_chain to subprogram node.
  49  Mod 1     2 September 1982 by TO to add 5 more entries to storage_info in
  50                the subprogram node (13-17), and to add VLA and LA bits to the
  51                symbol node.
  52  Mod 1     2 September 1982 by TO move fields around in nodes to get correct
  53                24 (really 35) bit fields and still maintain mapping between
  54                node, temporary, and array_ref (others limit to word 6 like node.)
  55           19 Jun 83, HH - 145: Add 'branched_to', 'ends_do_loop' & 'loop_end'
  56                     to 'label' node.
  57           19 Feb 86, BW & AG - 473.a: Add 'VLA' to 'arg_desc' node.
  58 END Modifications */
  59 
  60 
  61           /* GENERAL NODE TEMPLATE */
  62 
  63 dcl       1 node                        aligned based structure,
  64 
  65           /* WORD 1 */
  66 
  67             2 node_type                 fixed bin (4) unaligned,
  68             2 data_type                 fixed bin (4) unaligned unsigned,
  69             2 operand_type              fixed bin (4) unaligned,
  70 
  71             2 addressing_bits           unaligned structure,
  72               3 is_addressable          bit (1),
  73               3 value_in,
  74                 4 eaq                   bit (1),
  75                 4 x                     bit (1),
  76               3 allocated               bit (1),
  77               3 needs_pointer           bit (1),
  78               3 stack_indirect          bit (1),
  79               3 large_address           bit (1),
  80               3 address_in_base         bit (1),
  81               3 dont_update             bit (1),            /* for optimizer */
  82               3 not_in_storage          bit (1),            /* for optimizer */
  83               3 globally_assigned       bit (1),            /* for optimizer */
  84 
  85             2 bits                      unaligned structure,
  86               3 standard_bits,
  87                 4 allocate              bit (1),
  88                 4 set                   bit (1),
  89                 4 referenced            bit (1),
  90                 4 passed_as_arg         bit (1),
  91 
  92               3 fill                    bit (7),            /* These bits may be used by individual nodes. */
  93 
  94           /* WORD 2 */
  95 
  96             2 address                   aligned structure,
  97               3 base                    bit (3) unaligned,       /* For labels and constants, base and offset are */
  98               3 offset                  fixed bin (14) unaligned, /* combined to: fixed bin (18) unsigned unaligned. */
  99               3 char_num                fixed bin (2) unaligned unsigned,
 100               3 bit_num                 fixed bin (4) unaligned unsigned,
 101               3 fill                    bit (4) unaligned,
 102               3 inhibit                 bit (1) unaligned,
 103               3 ext_base                bit (1) unaligned,
 104               3 tag                     bit (6) unaligned,
 105 
 106           /* WORD 3 */
 107 
 108             2 units                     fixed bin (3) unaligned unsigned,
 109             2 fill                      bit (3) unaligned,  /* already used in symbol node */
 110             2 reloc_hold                bit (6) unaligned,
 111             2 reloc                     bit (6) unaligned,
 112             2 addr_hold                 bit (18) unaligned,
 113 
 114           /* WORD 4. Must not change for constant, char_constant, header, label, or symbol nodes. */
 115 
 116             2 next                      fixed bin (18) unsigned unaligned,
 117             2 hash_chain                fixed bin (18) unsigned unaligned, /* No hash chain for header nodes. */
 118 
 119           /* WORD 5 */
 120 
 121             2 pad                       fixed bin (18) unsigned unaligned,
 122             2 loop_ref_count            fixed bin (17) unaligned,     /* Only for symbols and temporaries. */
 123 
 124           /* WORD 6 */
 125 
 126             2 location                  fixed bin (24) aligned;       /* Only for array refs, symbols, temporaries, and headers. */
 127 
 128           /* ARG DESCRIPTOR NODE */
 129 
 130 dcl       1 arg_desc                    based aligned,
 131 
 132           /* WORD 1 */
 133 
 134             2 node_type                 fixed bin (4) unaligned,
 135             2 n_args                    fixed bin (12) unaligned,
 136             2 pad                       bit (18) unaligned,
 137 
 138           /* WORDS 2 - N_ARGS + 1 */
 139 
 140             2 arg(num_args refer(n_args))         aligned,
 141               3 data_type               fixed bin (4) unaligned unsigned,
 142               3 must_be                 unaligned,
 143                 4 array                 bit (1) unaligned,
 144                 4 scalar                bit (1) unaligned,
 145                 4 VLA                   bit (1) unaligned,
 146               3 star_extents            bit (1) unaligned,
 147               3 pad                     bit (9) unaligned,
 148               3 symbol                  fixed bin (18) unaligned;
 149 
 150 dcl       num_args fixed bin;
 151 
 152 
 153           /*  ARRAY REF NODE -- Must be same size as TEMPORARY NODE.  */
 154 
 155 dcl       1 array_ref                   aligned based structure,
 156 
 157           /* WORD 1 */
 158 
 159             2 node_type                 fixed bin (4) unaligned,
 160             2 data_type                 fixed bin (4) unaligned unsigned,
 161             2 operand_type              fixed bin (4) unaligned,
 162 
 163             2 addressing_bits           unaligned structure,
 164               3 is_addressable          bit (1),
 165               3 value_in,
 166                 4 eaq                   bit (1),
 167                 4 x                     bit (1),
 168               3 allocated               bit (1),
 169               3 needs_pointer           bit (1),
 170               3 stack_indirect          bit (1),
 171               3 large_address           bit (1),
 172               3 address_in_base         bit (1),
 173               3 dont_update             bit (1),            /* for optimizer */
 174               3 not_in_storage          bit (1),            /* for optimizer */
 175               3 globally_assigned       bit (1),            /* for optimizer */
 176 
 177             2 bits                      unaligned structure,
 178               3 standard_bits,
 179                 4 allocate              bit (1),
 180                 4 set                   bit (1),
 181                 4 referenced            bit (1),
 182                 4 passed_as_arg         bit (1),
 183 
 184               3 variable_length         bit (1),
 185 
 186               3 variable_offset         bit (1),
 187 
 188               3 invariant               bit (1),  /* must line up with temporary node */
 189               3 irreducible             bit (1),  /* .. */
 190               3 used_across_loops       bit (1),  /* .. */
 191 
 192               3 large_offset            bit (1),
 193 
 194               3 has_address             bit (1),
 195 
 196           /* WORD 2 */
 197 
 198             2 address                   aligned structure,
 199               3 base                    bit (3) unaligned,
 200               3 offset                  fixed bin (14) unaligned,
 201               3 char_num                fixed bin (2) unaligned unsigned,
 202               3 bit_num                 fixed bin (4) unaligned unsigned,
 203               3 fill                    bit (4) unaligned,
 204               3 inhibit                 bit (1) unaligned,
 205               3 ext_base                bit (1) unaligned,
 206               3 tag                     bit (6) unaligned,
 207 
 208           /* WORD 3 */
 209 
 210             2 units                     fixed bin (3) unaligned unsigned,
 211             2 fill                      bit (3) unaligned,
 212             2 reloc_hold                bit (6) unaligned,
 213             2 reloc                     bit (6) unaligned,
 214             2 addr_hold                 bit (18) unaligned,
 215 
 216           /* WORD 4 */
 217 
 218             2 next                      fixed bin (18) unsigned unaligned,
 219             2 loop_end_fu_pos           fixed bin (17) unaligned,     /* must overlay temporary.loop_end_fu_pos */
 220 
 221           /* WORD 5 */
 222 
 223             2 pad                       fixed bin (18) unsigned unaligned,
 224             2 v_offset                  fixed bin (18) unsigned unaligned,
 225 
 226           /* WORD 6 */
 227 
 228             2 location                  fixed bin (24) aligned,
 229 
 230           /* WORD 7 */
 231 
 232             2 ref_count                 fixed bin (17) unaligned,     /* must overlay temporary.ref_count */
 233             2 output_by                 fixed bin (18) unsigned unal,           /* must overlay temporary.output_by */
 234 
 235           /* WORD 8 */
 236 
 237             2 length                    fixed bin (24) aligned,
 238 
 239           /* WORD 9 */
 240 
 241             2 start_input_to            fixed bin (18) unsigned unal,           /* must overlay temporary.start_input_to */
 242             2 end_input_to              fixed bin (18) unsigned unal,           /* must overlay temporary.end_input_to */
 243 
 244           /* WORD 10 */
 245 
 246             2 ref_count_copy            fixed bin (17) unaligned,     /* must overlay temporary.ref_count_copy */
 247             2 parent                    fixed bin (18) unsigned unaligned,
 248 
 249           /* WORD 11 */
 250 
 251             2 unused                    fixed bin (24) aligned;       /*  Pad to size of 'temporary'.  */
 252 
 253 
 254           /* CONSTANT NODE */
 255 
 256 dcl       1 constant                    aligned based structure,
 257 
 258           /* WORD 1 */
 259 
 260             2 node_type                 fixed bin (4) unaligned,
 261             2 data_type                 fixed bin (4) unaligned unsigned,
 262             2 operand_type              fixed bin (4) unaligned,
 263 
 264             2 addressing_bits           unaligned structure,
 265               3 is_addressable          bit (1),
 266               3 value_in,
 267                 4 eaq                   bit (1),
 268                 4 x                     bit (1),
 269               3 allocated               bit (1),
 270               3 needs_pointer           bit (1),
 271               3 stack_indirect          bit (1),
 272               3 large_address           bit (1),
 273               3 address_in_base         bit (1),
 274               3 dont_update             bit (1),            /* for optimizer */
 275               3 not_in_storage          bit (1),            /* for optimizer */
 276               3 globally_assigned       bit (1),            /* for optimizer */
 277 
 278             2 bits                      unaligned structure,
 279               3 standard_bits,
 280                 4 allocate              bit (1),
 281                 4 set                   bit (1),
 282                 4 referenced            bit (1),
 283                 4 passed_as_arg         bit (1),
 284 
 285               3 fill                    bit (7),
 286 
 287           /* WORD 2 */
 288 
 289             2 address                   aligned structure,
 290               3 location                fixed bin (18) unsigned unaligned,
 291               3 op                      bit (10) unaligned,
 292               3 inhibit                 bit (1) unaligned,
 293               3 ext_base                bit (1) unaligned,
 294               3 tag                     bit (6) unaligned,
 295 
 296           /* WORD 3 */
 297 
 298             2 units                     fixed bin (3) unaligned unsigned,
 299             2 fill                      bit (3) unaligned,
 300             2 reloc_hold                bit (6) unaligned,
 301             2 reloc                     bit (6) unaligned,
 302             2 addr_hold                 bit (18) unaligned,
 303 
 304           /* WORD 4 */
 305 
 306             2 next_constant             fixed bin (18) unsigned unaligned,
 307             2 hash_chain                fixed bin (18) unsigned unaligned,
 308 
 309           /* WORDS 5 & 6 */
 310 
 311             2 value                     bit (72) aligned;
 312 
 313 
 314           /* CHARACTER CONSTANT NODE */
 315 
 316 dcl       1 char_constant               aligned based structure,
 317 
 318           /* WORD 1 */
 319 
 320             2 node_type                 fixed bin (4) unaligned,
 321             2 data_type                 fixed bin (4) unaligned unsigned,
 322             2 operand_type              fixed bin (4) unaligned,
 323 
 324             2 addressing_bits           unaligned structure,
 325               3 is_addressable          bit (1),
 326               3 value_in,
 327                 4 eaq                   bit (1),
 328                 4 x                     bit (1),
 329               3 allocated               bit (1),
 330               3 needs_pointer           bit (1),
 331               3 stack_indirect          bit (1),
 332               3 large_address           bit (1),
 333               3 address_in_base         bit (1),
 334               3 dont_update             bit (1),            /* for optimizer */
 335               3 not_in_storage          bit (1),            /* for optimizer */
 336               3 globally_assigned       bit (1),            /* for optimizer */
 337 
 338             2 bits                      unaligned structure,
 339               3 standard_bits,
 340                 4 allocate              bit (1),
 341                 4 set                   bit (1),
 342                 4 referenced            bit (1),
 343                 4 passed_as_arg         bit (1),
 344 
 345               3 no_value_stored         bit (1),
 346 
 347               3 fill                    bit (6),
 348 
 349           /* WORD 2 */
 350 
 351             2 address                   aligned structure,
 352               3 location                fixed bin (18) unsigned unaligned,
 353               3 char_num                fixed bin (2) unaligned unsigned,
 354               3 bit_num                 fixed bin (4) unaligned unsigned,
 355               3 fill                    bit (4) unaligned,
 356               3 inhibit                 bit (1) unaligned,
 357               3 ext_base                bit (1) unaligned,
 358               3 tag                     bit (6) unaligned,
 359 
 360           /* WORD 3 */
 361 
 362             2 units                     fixed bin (3) unaligned unsigned,
 363             2 fill                      bit (3) unaligned,
 364             2 reloc_hold                bit (6) unaligned,
 365             2 reloc                     bit (6) unaligned,
 366             2 addr_hold                 bit (18) unaligned,
 367 
 368           /* WORD 4 */
 369 
 370             2 next_constant             fixed bin (18) unsigned unaligned,
 371             2 hash_chain                fixed bin (18) unsigned unaligned,
 372 
 373           /* WORDS 5 thru n */
 374 
 375             2 length                    fixed bin (18) unsigned unaligned,
 376             2 value                     char(char_constant_length refer(char_constant.length)) unaligned;
 377 
 378 dcl       char_constant_length          fixed bin (18) unsigned;
 379 
 380 
 381           /* DIMENSION NODE */
 382 
 383 dcl       1 dimension                   aligned based structure,
 384 
 385           /* WORD 1 */
 386 
 387             2 node_type                 fixed bin (4) unaligned,      /* The only field in common with other nodes */
 388 
 389             2 number_of_dims            fixed bin (3) unaligned,      /* Number of dimensions */
 390 
 391             2 v_bound                   (7) unaligned,                /* Variable bound info - up to 7 dims. */
 392               3 lower                   bit (1) unaligned,            /* On if lower bound is variable */
 393               3 upper                   bit (1) unaligned,            /* On if upper bound is variable */
 394 
 395             2 has_virtual_origin        bit (1) unaligned,            /* On if virtual_origin is valid */
 396             2 has_array_size            bit (1) unaligned,            /* On if array_size is valid */
 397             2 has_dim_sizes             bit (1) unaligned,            /* On if dim.size (*) is valid */
 398 
 399             2 variable_virtual_origin   bit (1) unaligned,            /* On if virtual_origin is variable */
 400             2 variable_array_size       bit (1) unaligned,            /* On if array_size is variable */
 401             2 assumed_size              bit (1) unaligned,            /* On if array has assumed size */
 402 
 403             2 fill                      bit (7) unaligned,
 404 
 405           /* WORD 2 */
 406 
 407             2 virtual_origin            fixed bin (24) aligned,
 408 
 409           /* WORD 3 */
 410 
 411             2 element_count             fixed bin (24) aligned,
 412 
 413           /* WORD 4 */
 414 
 415             2 array_size                fixed bin (24) aligned,       /* Expressed in symbol.units */
 416 
 417           /* WORD 5 */
 418 
 419             2 VLA_base_addressor        fixed bin (18) aligned,
 420 
 421           /* WORDS 6 - n (max = 26) */
 422 
 423             2 dim (num_dims refer (dimension.number_of_dims)) aligned,
 424 
 425               3 lower_bound             fixed bin (24) aligned,       /* Lower bound of this dimension */
 426 
 427               3 upper_bound             fixed bin (24) aligned,       /* Upper bound of this dimension */
 428 
 429               3 size                    fixed bin (24) aligned;       /* No. of elements in this dimension */
 430 
 431 dcl       num_dims                      fixed bin (3);
 432 
 433 
 434           /* HEADER NODE */
 435 
 436 dcl       1 header                      aligned based structure,
 437 
 438           /* WORD 1 */
 439 
 440             2 node_type                 fixed bin (4) unaligned,
 441             2 data_type                 fixed bin (4) unaligned unsigned,
 442             2 operand_type              fixed bin (4) unaligned,
 443 
 444             2 addressing_bits           unaligned structure,
 445               3 is_addressable          bit (1),
 446               3 value_in,
 447                 4 eaq                   bit (1),
 448                 4 x                     bit (1),
 449               3 allocated               bit (1),
 450               3 needs_pointer           bit (1),
 451               3 stack_indirect          bit (1),
 452               3 large_address           bit (1),
 453               3 address_in_base         bit (1),
 454               3 dont_update             bit (1),            /* for optimizer */
 455               3 not_in_storage          bit (1),            /* for optimizer */
 456               3 globally_assigned       bit (1),            /* for optimizer */
 457 
 458             2 bits                      unaligned structure,
 459               3 storage_info,
 460                 4 standard_bits,
 461                     5 allocate          bit (1),
 462                     5 set               bit (1),
 463                     5 referenced        bit (1),
 464                     5 passed_as_arg     bit (1),
 465                 4 initialed             bit (1),            /* On if any member has initial attribute. */
 466 
 467               3 alignment               structure unaligned,
 468                 4 even                  bit (1),
 469                 4 odd                   bit (1),
 470                 4 character             bit (1),
 471 
 472               3 storage_class           structure unaligned,
 473                 4 automatic             bit (1),
 474                 4 static                bit (1),
 475                 4 in_common             bit (1),
 476 
 477           /* WORD 2 */
 478 
 479             2 address                   aligned structure,
 480               3 base                    bit (3) unaligned,
 481               3 offset                  fixed bin (14) unaligned,
 482               3 char_num                fixed bin (2) unaligned unsigned,
 483               3 bit_num                 fixed bin (4) unaligned unsigned,
 484               3 fill                    bit (4) unaligned,
 485               3 inhibit                 bit (1) unaligned,
 486               3 ext_base                bit (1) unaligned,
 487               3 tag                     bit (6) unaligned,
 488 
 489           /* WORD 3 */
 490 
 491             2 units                     fixed bin (3) unaligned unsigned,
 492             2 VLA bit (1) unaligned,                        /* chain for VLA's */
 493             2 LA bit (1) unaligned,                         /* chain for LA's */
 494             2 fill bit (1) unaligned,
 495             2 reloc_hold                bit (6) unaligned,
 496             2 reloc                     bit (6) unaligned,
 497             2 addr_hold                 bit (18) unaligned,
 498 
 499           /* WORD 4 */
 500 
 501             2 next_header               fixed bin (18) unsigned unaligned,
 502             2 first_element             fixed bin (18) unsigned unaligned,
 503 
 504           /* WORD 5 */
 505 
 506             2 last_element              fixed bin (18) unsigned unaligned,
 507             2 name_length               fixed bin (17) unaligned,
 508 
 509           /* WORD 6 */
 510 
 511             2 location                  fixed bin (24) aligned,
 512 
 513           /* WORD 7 */
 514 
 515             2 length                    fixed bin (24) aligned,
 516 
 517           /* WORD 8 */
 518 
 519             2 VLA_base_addressor        fixed bin (18) aligned,
 520 
 521           /* WORDS 9 - n. This field is variable in length. Its length is zero for equivalence groups. */
 522 
 523             2 block_name                char(allocate_symbol_name refer (header.name_length)) aligned;
 524 
 525 dcl       allocate_symbol_name          fixed bin;
 526 
 527 
 528           /* LABEL NODE */
 529 
 530 dcl       1 label                       aligned based structure,
 531 
 532           /* WORD 1 */
 533 
 534             2 node_type                 fixed bin (4) unaligned,
 535             2 data_type                 fixed bin (4) unaligned unsigned,
 536             2 operand_type              fixed bin (4) unaligned,
 537 
 538             2 addressing_bits           unaligned structure,
 539               3 is_addressable          bit (1),
 540               3 value_in,
 541                 4 eaq                   bit (1),
 542                 4 x                     bit (1),
 543               3 allocated               bit (1),
 544               3 needs_pointer           bit (1),
 545               3 stack_indirect          bit (1),
 546               3 large_address           bit (1),
 547               3 address_in_base         bit (1),
 548               3 dont_update             bit (1),            /* for optimizer */
 549               3 not_in_storage          bit (1),            /* for optimizer */
 550               3 globally_assigned       bit (1),            /* for optimizer */
 551 
 552             2 bits                      unaligned structure,
 553               3 storage_info,
 554                 4 standard_bits,
 555                     5 allocate          bit (1),
 556                     5 set               bit (1),
 557                     5 referenced        bit (1),
 558                     5 passed_as_arg     bit (1),
 559                 4 referenced_executable bit (1),
 560 
 561               3 usage,        /* Label is on a non-executable stmnt if both bits are ON. */
 562                 4 format                bit (1),
 563                 4 executable            bit (1),
 564 
 565               3 restore_prs             bit (1),
 566               3 not_referencable        bit (1),
 567               3 branched_to             bit (1),
 568               3 ends_do_loop            bit (1),
 569 
 570           /* WORD 2 */
 571 
 572             2 address                   aligned structure,
 573               3 location                fixed bin (18) unsigned unaligned,
 574               3 op                      bit (10) unaligned,
 575               3 inhibit                 bit (1) unaligned,
 576               3 ext_base                bit (1) unaligned,
 577               3 tag                     bit (6) unaligned,
 578 
 579           /* WORD 3 */
 580 
 581             2 units                     fixed bin (3) unaligned unsigned,
 582             2 fill                      bit (3) unaligned,
 583             2 reloc_hold                bit (6) unaligned,
 584             2 reloc                     bit (6) unaligned,
 585             2 addr_hold                 bit (18) unaligned,
 586 
 587           /* WORD 4 */
 588 
 589             2 next_label                fixed bin (18) unsigned unaligned,
 590             2 hash_chain                fixed bin (18) unsigned unaligned,
 591 
 592           /* WORD 5 */
 593 
 594             2 format_var                fixed bin (18) unsigned unaligned,
 595             2 name                      fixed bin (17) unaligned,
 596 
 597           /* WORD 6 */
 598 
 599             2 statement                 fixed bin (18) unsigned unaligned,
 600             2 loop_end                  fixed bin (18) unsigned unaligned;
 601 
 602 
 603           /*  LIBRARY NODE  */
 604 
 605 dcl       1 library                     aligned based structure,
 606 
 607           /* WORD 1 */
 608 
 609             2 node_type                 fixed bin (4) unaligned, /* The only field in common with the other nodes. */
 610             2 fill                      bit (13) unaligned,
 611             2 next_library_node         fixed bin (18) unsigned unaligned,
 612 
 613           /* WORD 2 */
 614 
 615             2 character_operand         fixed bin (18) unsigned aligned;
 616 
 617 
 618           /* MACHINE_STATE NODE */
 619 
 620 dcl       1 machine_state               aligned based structure,
 621 
 622           /* WORD 1 */
 623 
 624             2 node_type                 fixed bin (4) unal,
 625             2 pad                       bit (31) unal,
 626 
 627           /* WORD 2 */
 628 
 629             2 next                      pointer unaligned,
 630 
 631           /* WORDS 3-104 */
 632 
 633             2 ms                        aligned,
 634 
 635               3 eaq (4),                                    /* One for each of the A, Q, EAQ, and IND */
 636                 4 name                  fixed bin,
 637                 4 number                fixed bin,
 638                 4 variable(4)           fixed bin (18),
 639                 4 reserved              bit (1) aligned,
 640               3 rounded                 bit (1) aligned,
 641               3 indicators_valid        fixed bin (18),
 642 
 643               3 value_in_xr             bit (1) aligned,
 644 
 645               3 index_regs(0:7),
 646                 4 bits                  structure unaligned,
 647                   5 global              bit (1),
 648                   5 reserved            bit (1),
 649                   5 mbz                 bit (34),
 650                 4 type                  fixed bin (18),
 651                 4 variable              fixed bin (18),
 652                 4 used                  fixed bin (18),
 653                 4 mbz                   fixed bin (18),
 654 
 655               3 address_in_base         bit (1) aligned,
 656 
 657               3 base_regs(0:7),
 658                 4 bits                  structure unaligned,
 659                   5 global              bit (1),
 660                   5 reserved            bit (1),
 661                   5 mbz                 bit (34),
 662                 4 type                  fixed bin (18),
 663                 4 variable              fixed bin (18),
 664                 4 used                  fixed bin (18),
 665                 4 offset                fixed bin (18),
 666 
 667               3 stack_extended          bit (1) aligned,
 668               3 last_dynamic_temp       fixed bin (18);
 669 
 670           /* POINTER NODE */
 671 
 672 dcl       1 pointer                     aligned based structure,
 673 
 674           /* WORD 1 */
 675 
 676             2 node_type                 fixed bin (4) unaligned,
 677             2 pad                       bit (4) unaligned,
 678             2 code                      fixed bin (9) unaligned unsigned,
 679             2 variable                  fixed bin (18) unaligned unsigned,
 680 
 681           /* WORD 2 */
 682 
 683             2 offset                    fixed bin (18) unaligned unsigned,
 684             2 count                     fixed bin (18) unaligned unsigned,
 685 
 686           /* WORD 3 */
 687 
 688             2 hash_chain                fixed bin (18) aligned;
 689 
 690 
 691           /* SOURCE NODE */
 692 
 693 dcl       1 source                      aligned based structure,
 694 
 695           /* WORD 1 */
 696 
 697             2 node_type                 fixed bin (4) unal,
 698             2 pad                       bit (13) unal,
 699             2 line_number               fixed bin (17) unaligned,
 700 
 701           /* WORD 2 */
 702 
 703             2 uid                       bit (36) aligned,
 704 
 705           /* WORDS 3 & 4 */
 706 
 707             2 dtm                       fixed bin (71) unaligned,
 708 
 709           /* WORD 5 */
 710 
 711             2 next                      fixed bin (18) unsigned unaligned,
 712             2 initial_subprogram        fixed bin (18) unsigned unaligned,
 713 
 714           /* WORDS 6 - ? (depends on length of pathname) */
 715 
 716             2 pathname                  char(256) varying;
 717 
 718 
 719           /* STATEMENT NODE - This node only appears in the polish. */
 720 
 721 dcl       1 statement                   aligned based structure,
 722 
 723           /* WORD 1 */
 724 
 725             2 op_code                   fixed bin aligned,  /* Always equal to "stat_op". */
 726 
 727           /* WORD 2 */
 728 
 729             2 next                      bit (18) unaligned, /* "0"b = no next stmnt */
 730             2 location                  bit (18) unaligned, /* (18)"1"b = no text */
 731 
 732           /* WORD 3 */
 733 
 734             2 source_id                 structure unaligned,
 735               3 file                    fixed bin (8) unsigned,       /* 0 = first file */
 736               3 line                    bit (14),
 737               3 statement               bit (5),            /* 1 = first statement */
 738 
 739             2 length                    bit (9) unaligned,
 740 
 741           /* WORD 4 */
 742 
 743             2 bits                      structure unaligned,
 744               3 put_in_map              bit (1) unaligned,
 745               3 put_in_profile          bit (1) unaligned,
 746               3 pad                     bit (7) unaligned,
 747 
 748             2 start                     fixed bin (26) unaligned;
 749 
 750 
 751           /* SUBPROGRAM NODE */
 752 
 753 dcl       1 subprogram                  aligned based structure,
 754 
 755           /* WORD 1 */
 756 
 757             2 node_type                 fixed bin (4) unaligned, /* The only field in common with the other nodes. */
 758             2 subprogram_type           fixed bin (3) unaligned,
 759             2 default_is                unaligned,
 760               3 auto                    bit (1),
 761               3 static                  bit (1),
 762             2 need_PS                   bit (1) unaligned,
 763             2 need_prologue             bit (1) unaligned,
 764             2 multiple_entry            bit (1) unaligned,
 765             2 namelist_used             bit (1) unaligned,
 766             2 has_parameters            bit (1) unaligned,
 767             2 star_extent_function      bit (1) unaligned,
 768             2 fill                      bit (1) unaligned,
 769 
 770             2 symbol                    fixed bin (18) unsigned unaligned, /* symbol node for subprogram name */
 771 
 772           /* WORD 2 */
 773 
 774             2 previous_subprogram       fixed bin (18) unsigned unaligned,
 775             2 next_subprogram           fixed bin (18) unsigned unaligned,
 776 
 777           /* WORD 3 */
 778 
 779             2 common_chain              fixed bin (18) unsigned unaligned,
 780             2 equiv_chain               fixed bin (18) unsigned unaligned,
 781 
 782           /* WORD 4 */
 783 
 784             2 first_symbol              fixed bin (18) unsigned unaligned,
 785             2 last_symbol               fixed bin (18) unsigned unaligned,
 786 
 787           /* WORD 5 */
 788 
 789             2 first_label               fixed bin (18) unsigned unaligned,
 790             2 last_label                fixed bin (18) unsigned unaligned,
 791 
 792           /* WORD 6 */
 793 
 794             2 first_polish              fixed bin (18) unsigned unaligned,
 795             2 last_polish               fixed bin (18) unsigned unaligned,
 796 
 797           /* WORD 7 */
 798 
 799             2 map                       unaligned,
 800               3 first                   fixed bin (18) unsigned unaligned,
 801               3 last                    fixed bin (18) unsigned unaligned,
 802 
 803           /* WORD 8 */
 804 
 805             2 entry_info                fixed bin (18) unsigned unaligned,
 806             2 runtime                   fixed bin (18) unsigned unaligned,
 807 
 808           /* WORD 9 */
 809 
 810             2 first_quad                fixed bin (18) unsigned unaligned,
 811             2 last_quad                 fixed bin (18) unsigned unaligned,
 812 
 813           /* WORD 10 */
 814 
 815             2 options                   aligned like fortran_options,
 816 
 817           /* WORDS 11 - 44 */
 818 
 819             2 storage_info(17)          aligned,
 820               3 first                   fixed bin (18) unsigned unaligned,
 821               3 last                    fixed bin (18) unsigned unaligned,
 822               3 next_loc                fixed bin (18) aligned,
 823 
 824           /* WORD 45 */
 825 
 826             2 loop_vector_p             pointer unaligned,
 827 
 828           /* WORD 46 */
 829 
 830             2 n_loops                   fixed bin (18) unsigned unaligned,
 831             2 max_operators             fixed bin (18) unsigned unaligned,
 832 
 833           /* WORD 47 */
 834 
 835             2 VLA_chain                 fixed bin (18) unsigned unaligned,  /* Mod 1 */
 836             2 LA_chain                  fixed bin (18) unsigned unaligned,  /* Mod 1 */
 837           /* WORD 48 */
 838 
 839             2 max_sym                   fixed bin (18) aligned;
 840 
 841 
 842           /* SYMBOL NODE */
 843 
 844 dcl       1 symbol                      aligned based structure,
 845 
 846           /* WORD 1 */
 847 
 848             2 node_type                 fixed bin (4) unaligned,
 849             2 data_type                 fixed bin (4) unaligned unsigned,
 850             2 operand_type              fixed bin (4) unaligned,
 851 
 852             2 addressing_bits           unaligned structure,
 853               3 is_addressable          bit (1),
 854               3 value_in,
 855                 4 eaq                   bit (1),
 856                 4 x                     bit (1),
 857               3 allocated               bit (1),
 858               3 needs_pointer           bit (1),
 859               3 stack_indirect          bit (1),
 860               3 large_address           bit (1),
 861               3 address_in_base         bit (1),
 862               3 dont_update             bit (1),            /* for optimizer */
 863               3 not_in_storage          bit (1),            /* for optimizer */
 864               3 globally_assigned       bit (1),            /* for optimizer */
 865 
 866             2 bits                      unaligned structure,
 867               3 storage_info,
 868                 4 standard_bits,
 869                     5 allocate          bit (1),
 870                     5 set               bit (1),
 871                     5 referenced        bit (1),
 872                     5 passed_as_arg     bit (1),
 873                 4 initialed             bit (1),            /* Allows variable to become a constant. */
 874 
 875               3 variable_arglist        bit (1),
 876               3 dummy_arg               bit (1),
 877               3 variable_extents        bit (1),
 878               3 needs_descriptors       bit (1),
 879               3 put_in_symtab           bit (1),
 880               3 by_compiler             bit (1),
 881 
 882           /* WORD 2 */
 883 
 884             2 address                   aligned structure,
 885               3 base                    bit (3) unaligned,
 886               3 offset                  fixed bin (14) unaligned,
 887               3 char_num                fixed bin (2) unaligned unsigned,
 888               3 bit_num                 fixed bin (4) unaligned unsigned,
 889               3 fill                    bit (4) unaligned,
 890               3 inhibit                 bit (1) unaligned,
 891               3 ext_base                bit (1) unaligned,
 892               3 tag                     bit (6) unaligned,
 893 
 894           /* WORD 3 */
 895 
 896             2 units                     fixed bin (3) unaligned unsigned,
 897             2 aliasable                 bit (1) unaligned,
 898             2 has_constant_value        bit (1) unaligned,
 899             2 new_induction_var         bit (1) unaligned,
 900             2 reloc_hold                bit (6) unaligned,
 901             2 reloc                     bit (6) unaligned,
 902             2 addr_hold                 bit (18) unaligned,
 903 
 904           /* WORD 4 */
 905 
 906             2 next_symbol               fixed bin (18) unsigned unaligned,
 907             2 hash_chain                fixed bin (18) unsigned unaligned,
 908 
 909           /* WORD 5 */
 910 
 911             2 ext_attributes unaligned structure,
 912               3 VLA bit (1),                                /* symbol is Very large Element */
 913               3 LA bit (1),                                 /* symbol is Large Element */
 914               3 pad bit (18-2),
 915 
 916             2 loop_ref_count            fixed bin (17) unaligned,
 917 
 918           /* WORD 6 */
 919 
 920             2 location                  fixed bin (24) aligned,
 921 
 922           /* WORD 7 */
 923 
 924             2 v_length                  fixed bin (18) unsigned unaligned,
 925             2 general                   fixed bin (18) unsigned unaligned,
 926 
 927           /* WORD 8 */
 928 
 929             2 parent                    fixed bin (18) unsigned unaligned,
 930             2 next_member               fixed bin (18) unsigned unaligned,
 931 
 932           /* WORD 9 */
 933 
 934             2 attributes                aligned structure,
 935               3 mode_bits               unaligned structure,
 936                 4 char_size             fixed bin (20) unsigned,
 937                 4 mode,
 938                   5 integer             bit (1),
 939                   5 real                bit (1),
 940                   5 double_precision    bit (1),
 941                   5 complex             bit (1),
 942                   5 logical             bit (1),
 943                   5 character           bit (1),
 944                   5 label_value         bit (1),
 945                   5 entry_value         bit (1),
 946 
 947               3 misc_attributes         unaligned structure,
 948                 4 function              bit (1),
 949                 4 subroutine            bit (1),
 950                 4 entry_point           bit (1),
 951                 4 external              bit (1),
 952                 4 builtin               bit (1),
 953                 4 stmnt_func            bit (1),
 954                 4 namelist              bit (1),
 955                 4 dimensioned           bit (1),
 956 
 957           /* WORD 10 */
 958 
 959               3 storage_class           unaligned structure,
 960                 4 automatic             bit (1),
 961                 4 static                bit (1),
 962                 4 in_common             bit (1),
 963                 4 equivalenced          bit (1),
 964                 4 parameter             bit (1),
 965                 4 constant              bit (1),            /* If external or entry_point. */
 966                 4 named_constant        bit (1),
 967 
 968               3 variable                bit (1) unaligned,
 969               3 in_equiv_stmnt          bit (1) unaligned,
 970               3 star_extents            bit (1) unaligned,
 971               3 descriptor              bit (1) unaligned,
 972             2 pad                       bit (25) unaligned,
 973 
 974           /* WORD 11 */
 975 
 976             2 dimension                 fixed bin (18) unsigned unaligned,      /* Bounds may be added after symbol is declared. */
 977             2 initial                   fixed bin (18) unsigned unaligned,
 978 
 979           /* WORD 12 */
 980 
 981             2 runtime                   bit (18) unaligned,
 982             2 name_length               fixed bin (17) unaligned,
 983 
 984           /* WORD 13 */
 985 
 986             2 coordinate                fixed bin (17) unaligned,     /* used by loop optimizer */
 987             2 element_size              fixed bin (17) unaligned,
 988 
 989           /* WORD 14 */
 990 
 991             2 secondary                 pointer unaligned,            /* used by loop optimizer */
 992 
 993           /* WORD 15 */
 994 
 995             2 offset                    fixed bin (24) aligned,
 996 
 997           /* WORDS 16 - n. This field is variable in length. */
 998 
 999             2 name                      char(allocate_symbol_name refer (symbol.name_length)) aligned;
1000 
1001 
1002 
1003           /*  TEMPORARY NODE -- Must be same size as ARRAY REF NODE.  */
1004 
1005 dcl       1 temporary                   aligned based structure,
1006 
1007           /* WORD 1 */
1008 
1009             2 node_type                 fixed bin (4) unaligned,
1010             2 data_type                 fixed bin (4) unaligned unsigned,
1011             2 operand_type              fixed bin (4) unaligned,
1012 
1013             2 addressing_bits           unaligned structure,
1014               3 is_addressable          bit (1),
1015               3 value_in,
1016                 4 eaq                   bit (1),
1017                 4 x                     bit (1),
1018               3 allocated               bit (1),
1019               3 needs_pointer           bit (1),
1020               3 stack_indirect          bit (1),
1021               3 large_address           bit (1),
1022               3 address_in_base         bit (1),
1023               3 dont_update             bit (1),            /* for optimizer */
1024               3 not_in_storage          bit (1),            /* for optimizer */
1025               3 globally_assigned       bit (1),            /* for optimizer */
1026 
1027             2 bits                      unaligned structure,
1028               3 standard_bits,
1029                 4 allocate              bit (1),
1030                 4 set                   bit (1),
1031                 4 referenced            bit (1),
1032                 4 passed_as_arg         bit (1),
1033 
1034               3 variable_length         bit (1),
1035 
1036               3 fill                    bit (1),  /* can be used */
1037 
1038               3 invariant               bit (1),  /* must line up with array_ref node */
1039               3 irreducible             bit (1),  /* .. */
1040               3 used_across_loops       bit (1),  /* .. */
1041               3 frozen_for_do           bit (1),
1042               3 used_as_subscript       bit (1),
1043 
1044           /* WORD 2 */
1045 
1046             2 address                   aligned structure,
1047               3 base                    bit (3) unaligned,
1048               3 offset                  fixed bin (14) unaligned,
1049               3 char_num                fixed bin (2) unaligned unsigned,
1050               3 bit_num                 fixed bin (4) unaligned unsigned,
1051               3 fill                    bit (4) unaligned,
1052               3 inhibit                 bit (1) unaligned,
1053               3 ext_base                bit (1) unaligned,
1054               3 tag                     bit (6) unaligned,
1055 
1056           /* WORD 3 */
1057 
1058             2 units                     fixed bin (3) unaligned unsigned,
1059             2 fill                      bit (3) unaligned,
1060             2 reloc_hold                bit (6) unaligned,
1061             2 reloc                     bit (6) unaligned,
1062             2 addr_hold                 bit (18) unaligned,
1063 
1064           /* WORD 4 */
1065 
1066             2 next                      fixed bin (18) unsigned unaligned,
1067             2 loop_end_fu_pos           fixed bin (17) unaligned,     /* must overlay array_ref.loop_end_fu_pos */
1068 
1069           /* WORD 5 */
1070 
1071             2 pad                       fixed bin (18) unsigned unaligned,
1072             2 loop_ref_count            fixed bin (17) unaligned,
1073 
1074           /* WORD 6 */
1075 
1076             2 location                  fixed bin (24) aligned,
1077 
1078           /* WORD 7*/
1079 
1080             2 ref_count                 fixed bin (17) unaligned,     /* must overlay array_ref.ref_count */
1081             2 output_by                 fixed bin (18) unsigned unal,           /* must overlay array_ref.output_by */
1082 
1083           /* WORD 8 */
1084 
1085             2 size                      fixed bin (24) aligned,                 /* size in words */
1086 
1087           /* WORD 9 */
1088 
1089             2 start_input_to            fixed bin (18) unsigned unal,           /* must overlay array_ref.start_input_to */
1090             2 end_input_to              fixed bin (18) unsigned unal,           /* must overlay array_ref.end_input_to */
1091 
1092           /* WORD 10 */
1093 
1094             2 ref_count_copy            fixed bin (17) unaligned,     /* must overlay array_ref.ref_count_copy */
1095             2 ms_ref_count              fixed bin (17) unaligned,     /* counts occurances in saved machine states */
1096 
1097           /* WORD 11 */
1098 
1099             2 length                    fixed bin (24) aligned;       /* length in characters */
1100 
1101 /* END   fort_nodes.incl.pl1 */