00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 #ifdef KEY
00051
00052
00053 #endif
00054 # define CG_INTEGER_DEFAULT_TYPE init_default_linear_type[Fortran_Integer]
00055
00056
00057 # define CHARACTER_DEFAULT_TYPE default_linear_type[Fortran_Character]
00058 # define COMPLEX_DEFAULT_TYPE default_linear_type[Fortran_Complex]
00059 # define DOUBLE_COMPLEX_DEFAULT_TYPE TYP_LINEAR(DOUBLE_COMPLEX_TYPE_IDX)
00060 # define DOUBLE_DEFAULT_TYPE TYP_LINEAR(DOUBLE_PRECISION_TYPE_IDX)
00061 # define INTEGER_DEFAULT_TYPE default_linear_type[Fortran_Integer]
00062 # define LOGICAL_DEFAULT_TYPE default_linear_type[Fortran_Logical]
00063 # define REAL_DEFAULT_TYPE default_linear_type[Fortran_Real]
00064
00065 # if !defined(_HOST32) && !defined(_WHIRL_HOST64_TARGET64)
00066 # define TYPELESS_DEFAULT_TYPE Typeless_8
00067 # else
00068 # define TYPELESS_DEFAULT_TYPE Typeless_4
00069 # endif
00070
00071
00072 # ifdef _TYPE_CODE_64_BIT
00073 # define IO_TYPE_CODE_TYPE Integer_8
00074 # else
00075 # define IO_TYPE_CODE_TYPE TYPELESS_DEFAULT_TYPE
00076 # endif
00077
00078 #ifdef KEY
00079
00080 # define MAX_ID_LEN 63
00081 # define ANSI90_ID_LEN 31
00082 #else
00083 # define MAX_ID_LEN 31
00084 #endif
00085 # define MAX_EXTERNAL_ID_LEN 255
00086
00087 # define FALSE 0
00088 # define IDENTICAL 0
00089 # define NULL_IDX 0
00090 # define TRUE 1
00091
00092 # define DEFAULT_SAFEVL _MAXVL
00093
00094 # define AMP '&'
00095 # define AT_SIGN '@'
00096 # define BANG '!'
00097 # define BK_SLASH '\\'
00098 # define BLANK ' '
00099 # define COLON ':'
00100 # define COMMA ','
00101 # define DASH '-'
00102 # define DBL_QUOTE '"'
00103 # define DOLLAR '$'
00104 # define DOT '.'
00105 # define EOS '\0'
00106 # define EQUAL '='
00107 # define GT '>'
00108 # define LBRKT '['
00109 # define LPAREN '('
00110 # define LT '<'
00111 # define MINUS '-'
00112 # define NEWLINE '\n'
00113 # define NULL_CHAR '\0'
00114 # define PERCENT '%'
00115 # define PLUS '+'
00116 # define QUEST_MARK '?'
00117 # define QUOTE '\''
00118 # define RBRKT ']'
00119 # define RPAREN ')'
00120 # define SEMI_COLON ';'
00121 # define SHARP '#'
00122 # define SLASH '/'
00123 # define STAR '*'
00124 # define TAB '\t'
00125 # define USCORE '_'
00126 # define ZERO '0'
00127
00128 # define EOS_STR "EOS"
00129
00130
00131
00132
00133
00134
00135
00136 # define ALL_RECS 0001
00137 # define COMPILER_RECS 0002
00138 # define BASIC_RECS 0004
00139 # define INFO_RECS 0010
00140 # define MESSAGE_RECS 0020
00141 # define MISC_RECS 0040
00142 # define OUTPUT_TO_STDOUT 0100
00143 # define XREF_RECS 0200
00144 # define CMD_PROVIDED_CIF 4000
00145
00146
00147
00148
00149
00150
00151
00152
00153 # define OPEN_MP_LIST_CNT 19
00154
00155 # define OPEN_MP_IF_IDX 0
00156 # define OPEN_MP_NUM_THREADS 1
00157 # define OPEN_MP_PRIVATE_IDX 2
00158 # define OPEN_MP_SHARED_IDX 3
00159 # define OPEN_MP_FIRSTPRIVATE_IDX 4
00160 # define OPEN_MP_DEFAULT_IDX 5
00161 # define OPEN_MP_COPYIN_IDX 6
00162 # define OPEN_MP_REDUCTION_OPR_IDX 7
00163 # define OPEN_MP_REDUCTION_LIST_IDX 8
00164 # define OPEN_MP_LASTPRIVATE_IDX 9
00165 # define OPEN_MP_ORDERED_IDX 10
00166 # define OPEN_MP_SCHEDULE_TYPE_IDX 11
00167 # define OPEN_MP_SCHEDULE_CHUNK_IDX 12
00168 # define OPEN_MP_AFFINITY_IDX 13
00169 # define OPEN_MP_IS_THREAD_IDX 14
00170 # define OPEN_MP_THREAD_DATA_IDX 15
00171 # define OPEN_MP_ONTO_IDX 16
00172 # define OPEN_MP_NEST_IDX 17
00173 # define OPEN_MP_COPYPRIVATE_IDX 18
00174
00175
00176
00177
00178
00179 # define MP_DIR_LIST_CNT 14
00180
00181 # define MP_DIR_IF_IDX 0
00182 # define MP_DIR_SHARE_IDX 1
00183 # define MP_DIR_LASTLOCAL_IDX 2
00184 # define MP_DIR_REDUCTION_IDX 3
00185 # define MP_DIR_MP_SCHEDTYPE_IDX 4
00186 # define MP_DIR_CHUNK_IDX 5
00187 # define MP_DIR_AFFINITY_IDX 6
00188 # define MP_DIR_IS_THREAD_IDX 7
00189 # define MP_DIR_THREAD_DATA_IDX 8
00190 # define MP_DIR_LOCAL_IDX 9
00191 # define MP_DIR_ONTO_IDX 10
00192 # define MP_DIR_NEST_IDX 11
00193 # define MP_DIR_LASTTHREAD_IDX 12
00194 # define MP_DIR_ORDERED_IDX 13
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206 # define OPEN_MP_DEFAULT_NONE 1
00207 # define OPEN_MP_DEFAULT_SHARED 2
00208 # define OPEN_MP_DEFAULT_PRIVATE 3
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222 # define MP_SCHEDTYPE_RUNTIME 1
00223 # define MP_SCHEDTYPE_SIMPLE 2
00224 # define MP_SCHEDTYPE_INTERLEAVED 3
00225 # define MP_SCHEDTYPE_DYNAMIC 4
00226 # define MP_SCHEDTYPE_GUIDED 5
00227
00228 # define OPEN_MP_SCHEDULE_RUNTIME 1
00229 # define OPEN_MP_SCHEDULE_STATIC 2
00230 # define OPEN_MP_SCHEDULE_DYNAMIC 4
00231 # define OPEN_MP_SCHEDULE_GUIDED 5
00232
00233 # define DOPREFER_SERIAL 1
00234 # define DOPREFER_CONCURRENT 2
00235 # define DOPREFER_VECTOR 3
00236
00237 # define ASSERT_ARGUMENTALIASING 1
00238 # define ASSERT_NOARGUMENTALIASING 2
00239 # define ASSERT_BOUNDSVIOLATIONS 3
00240 # define ASSERT_NOBOUNDSVIOLATIONS 4
00241 # define ASSERT_CONCURRENTCALL 5
00242 # define ASSERT_NOCONCURRENTCALL 6
00243 # define ASSERT_NORECURRENCE 7
00244 # define ASSERT_DOPREFER 8
00245 # define ASSERT_EQUIVALENCEHAZARD 9
00246 # define ASSERT_NOEQUIVALENCEHAZARD 10
00247 # define ASSERT_LASTVALUENEEDED 11
00248 # define ASSERT_LASTVALUESNEEDED 12
00249 # define ASSERT_NOLASTVALUENEEDED 13
00250 # define ASSERT_NOLASTVALUESNEEDED 14
00251 # define ASSERT_PERMUTATION 15
00252 # define ASSERT_RELATION 16
00253 # define ASSERT_NOSYNC 17
00254 # define ASSERT_TEMPORARIESFORCONSTANTARGUMENTS 18
00255 # define ASSERT_NOTEMPORARIESFORCONSTANTARGUMENTS 19
00256 # define ASSERT_DO 20
00257 # define ASSERT_BENIGN 21
00258 # define ASSERT_DEPENDENCE 22
00259 # define ASSERT_FREQUENCY 23
00260 # define ASSERT_IGNOREANYDEPENDENCES 24
00261 # define ASSERT_IGNOREANYDEPENDENCE 25
00262 # define ASSERT_IGNOREASSUMEDDEPENDENCES 26
00263 # define ASSERT_IGNOREASSUMEDDEPENDENCE 27
00264 # define ASSERT_NOINTERCHANGE 28
00265 # define ASSERT_USECOMPRESS 29
00266 # define ASSERT_USEEXPAND 30
00267 # define ASSERT_USECONTROLLEDSTORE 31
00268 # define ASSERT_USEGATHER 32
00269 # define ASSERT_USESCATTER 33
00270
00271
00272
00273
00274
00275 # define INIT_OPND_TYPE {0,0,0,0,0,NO_Tbl_Idx,0}
00276
00277
00278
00279
00280
00281
00282 # define COMPILER_INFO_TABLE_TYPE 026
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293 # if (defined(_TARGET_OS_IRIX) || defined(_TARGET_OS_LINUX) || defined(_TARGET_OS_DARWIN))
00294
00295 # define DALIGN_TEST_CONDITION(TYPE_IDX) \
00296 TYP_LINEAR(TYPE_IDX) == Integer_8 || \
00297 TYP_LINEAR(TYPE_IDX) == Logical_8 || \
00298 TYP_LINEAR(TYPE_IDX) == Real_8 || \
00299 TYP_LINEAR(TYPE_IDX) == Real_16 || \
00300 TYP_LINEAR(TYPE_IDX) == Complex_8 || \
00301 TYP_LINEAR(TYPE_IDX) == Complex_16 || \
00302 TYP_LINEAR(TYPE_IDX) == Typeless_8 || \
00303 TYP_LINEAR(TYPE_IDX) == Long_Typeless || \
00304 (cmd_line_flags.s_pointer8 && \
00305 (TYP_LINEAR(TYPE_IDX) == CRI_Ptr_8 || \
00306 TYP_LINEAR(TYPE_IDX) == CRI_Ch_Ptr_8)) || \
00307 (TYP_TYPE(TYPE_IDX) == Structure && \
00308 ATT_DALIGN_ME(TYP_IDX(TYPE_IDX)))
00309 # else
00310
00311 # define DALIGN_TEST_CONDITION(TYPE_IDX) \
00312 TYP_LINEAR(TYPE_IDX) == Integer_8 || \
00313 TYP_LINEAR(TYPE_IDX) == Logical_8 || \
00314 TYP_LINEAR(TYPE_IDX) == Real_8 || \
00315 TYP_LINEAR(TYPE_IDX) == Real_16 || \
00316 TYP_LINEAR(TYPE_IDX) == Complex_4 || \
00317 TYP_LINEAR(TYPE_IDX) == Complex_8 || \
00318 TYP_LINEAR(TYPE_IDX) == Complex_16 || \
00319 TYP_LINEAR(TYPE_IDX) == Typeless_8 || \
00320 TYP_LINEAR(TYPE_IDX) == Long_Typeless || \
00321 (TYP_TYPE(TYPE_IDX) == Structure && \
00322 ATT_DALIGN_ME(TYP_IDX(TYPE_IDX)))
00323 # endif
00324
00325
00326 # define PACK_HALF_WORD_TEST_CONDITION(TYPE_IDX) \
00327 TARGET_MAX_HALF_WORD_STORAGE_TYPE(TYPE_IDX) || \
00328 (TYP_TYPE(TYPE_IDX) == Structure && \
00329 ATT_ALIGNMENT(TYP_IDX(TYPE_IDX))== Align_32)
00330
00331 # define PACK_8_BIT_TEST_CONDITION(TYPE_IDX) \
00332 (TYP_LINEAR(TYPE_IDX) == Integer_1 || \
00333 TYP_LINEAR(TYPE_IDX) == Logical_1 || \
00334 (TYP_TYPE(TYPE_IDX) == Structure && \
00335 ATT_ALIGNMENT(TYP_IDX(TYPE_IDX)) == Align_8))
00336
00337 # define PACK_16_BIT_TEST_CONDITION(TYPE_IDX) \
00338 (TYP_LINEAR(TYPE_IDX) == Integer_1 || \
00339 TYP_LINEAR(TYPE_IDX) == Logical_1 || \
00340 TYP_LINEAR(TYPE_IDX) == Integer_2 || \
00341 TYP_LINEAR(TYPE_IDX) == Logical_2 || \
00342 (TYP_TYPE(TYPE_IDX) == Structure && \
00343 (ATT_ALIGNMENT(TYP_IDX(TYPE_IDX)) == Align_8 ||\
00344 ATT_ALIGNMENT(TYP_IDX(TYPE_IDX)) == Align_16)))
00345
00346
00347
00348
00349
00350 # define DATE_TIME_STR_SIZE 27
00351 # define RELEASE_LEVEL_LEN 24
00352
00353
00354
00355
00356
00357
00358 # define MAX_CONST_OPT_LENGTH 16
00359 # define MAX_CIITEM_NAME_LENGTH 16
00360 # define MAX_NUM_EXP_FORMS 2
00361 # define MAX_NUM_ALLOWED_TYPES 3
00362 # define MAX_NUM_CONST_OPTS 5
00363 # define NUM_IO_STMT_TYPES 8
00364 # define MAX_NUM_CIITEM 25
00365
00366
00367
00368
00369
00370
00371
00372 # define ALLOCATE_LIB_ENTRY "_ALLOCATE"
00373 # define ALLOCATE_NAME_LEN 9
00374
00375 # if defined(_TARGET_OS_UNICOS)
00376 # define ARGCHCK_LIB_ENTRY "$ARGCHCK"
00377 # else
00378 # define ARGCHCK_LIB_ENTRY "_ARGCHCK"
00379 # endif
00380 # define ARGCHCK_NAME_LEN 8
00381
00382 # define DEALLOCATE_LIB_ENTRY "_DEALLOCATE"
00383 # define DEALLOCATE_NAME_LEN 11
00384
00385
00386 # define DEALLOC_LIB_ENTRY "_DEALLOC"
00387 # define DEALLOC_NAME_LEN 8
00388
00389 # define REALLOC_LIB_ENTRY "_REALLOC"
00390 # define REALLOC_NAME_LEN 8
00391
00392 # define BACKSPACE_LIB_ENTRY "_BACK"
00393 # define BACKSPACE_NAME_LEN 5
00394
00395 # if defined(_TARGET_OS_MAX)
00396 # define END_LIB_ENTRY "$END"
00397 # else
00398 # define END_LIB_ENTRY "_END"
00399 # endif
00400 # define END_NAME_LEN 4
00401
00402 # define ENDFILE_LIB_ENTRY "_EOFW"
00403 # define ENDFILE_NAME_LEN 5
00404
00405 # define INQUIRE_LIB_ENTRY "_INQUIRE"
00406 # define INQUIRE_NAME_LEN 8
00407
00408 # define OPEN_LIB_ENTRY "_OPEN"
00409 # define OPEN_NAME_LEN 5
00410
00411 # define CLOSE_LIB_ENTRY "_CLOSE"
00412 # define CLOSE_NAME_LEN 6
00413
00414 # define BUFFER_IN_LIB_ENTRY "_BUFFERIN"
00415 # define BUFFER_IN_NAME_LEN 9
00416
00417 # define BUFFER_OUT_LIB_ENTRY "_BUFFEROUT"
00418 # define BUFFER_OUT_NAME_LEN 10
00419
00420 # define REWIND_LIB_ENTRY "_REWF"
00421 # define REWIND_NAME_LEN 5
00422
00423 # if (defined(_TARGET_OS_IRIX) || defined(_TARGET_OS_LINUX) || defined(_TARGET_OS_DARWIN))
00424 # define PAUSE_LIB_ENTRY "_F90_PAUSE"
00425 # define PAUSE_NAME_LEN 10
00426
00427 # define STOP_LIB_ENTRY "_F90_STOP"
00428 # define STOP_NAME_LEN 9
00429 # else
00430 # define PAUSE_LIB_ENTRY "_PAUSE"
00431 # define PAUSE_NAME_LEN 6
00432
00433 # define STOP_LIB_ENTRY "_STOP"
00434 # define STOP_NAME_LEN 5
00435 # endif
00436
00437 # define STOP_ALL_LIB_ENTRY "STOP_ALL"
00438 # define STOP_ALL_NAME_LEN 8
00439
00440 # define CONFORM_LIB_ENTRY "_CONFORM_ERROR"
00441 # define CONFORM_NAME_LEN 14
00442
00443 # define BOUNDS_LIB_ENTRY "_BOUNDS_ERROR"
00444 # define BOUNDS_NAME_LEN 13
00445
00446 # define RBOUNDS_LIB_ENTRY "_RBOUNDS_ERROR"
00447 # define RBOUNDS_NAME_LEN 14
00448
00449 # define SBOUNDS_LIB_ENTRY "_SBOUNDS_ERROR"
00450 # define SBOUNDS_NAME_LEN 14
00451
00452 # define PTR_CHK_LIB_ENTRY "_POINTER_ERROR"
00453 # define PTR_CHK_NAME_LEN 14
00454
00455 # if defined(_TARGET_OS_UNICOS)
00456 # define START_PES_LIB_ENTRY "START_PES"
00457 # define START_PES_NAME_LEN 9
00458 # else
00459 # define START_PES_LIB_ENTRY "start_pes_"
00460 # define START_PES_NAME_LEN 10
00461 # endif
00462
00463 # define SET_NUMTHREADS_ENTRY "mp_set_numthreads_"
00464 # define SET_NUMTHREADS_NAME_LEN 18
00465
00466
00467 #ifdef KEY
00468
00469 # define COPYIN_ENTRY "_Copyin"
00470 #ifdef PATHSCALE_MERGE
00471 # define COPYIN_NAME_LEN ((sizeof COPYIN_ENTRY) - 1)
00472 #endif
00473 # define COPYOUT_ENTRY "_Copyout"
00474 #ifdef PATHSCALE_MERGE
00475 # define COPYOUT_NAME_LEN ((sizeof COPYOUT_ENTRY) - 1)
00476 #endif
00477 #endif
00478 #ifdef KEY
00479
00480
00481
00482 # define IEEE_SAVE_ENTRY "_Ieee_save"
00483 # define IEEE_RESTORE_ENTRY "_Ieee_restore"
00484
00485 #ifdef _LINUX_LINUX
00486 # if (defined(TARG_X8664) || defined(TARG_IA64))
00487
00488
00489
00490
00491
00492 # define IEEE_SAVE_SIZE 32
00493 # elif defined(TARG_MIPS)
00494 # define IEEE_SAVE_SIZE 4
00495 # endif
00496 #endif
00497 #ifdef _DARWIN_DARWIN
00498
00499
00500 # define IEEE_SAVE_SIZE 32
00501 #endif
00502
00503 #if !defined(IEEE_SAVE_SIZE)
00504 # error "Need IEEE_SAVE_SIZE"
00505 #endif
00506
00507 #endif
00508 #ifdef KEY
00509 # define ASSIGN_ALLOCATABLE_ENTRY "_ASSIGN_ALLOCATABLE"
00510
00511
00512 # define OPND_LINE_NUM(OPND) ((OPND).line_num)
00513 # define OPND_COL_NUM(OPND) ((OPND).col_num)
00514 # define OPND_FLD(OPND) ((OPND).fld)
00515 # define OPND_IDX(OPND) ((OPND).idx)
00516 # define OPND_LIST_CNT(OPND) ((OPND).line_num)
00517 #else
00518
00519 # define OPND_LINE_NUM(OPND) OPND.line_num
00520 # define OPND_COL_NUM(OPND) OPND.col_num
00521 # define OPND_FLD(OPND) OPND.fld
00522 # define OPND_IDX(OPND) OPND.idx
00523 # define OPND_LIST_CNT(OPND) OPND.line_num
00524 #endif
00525
00526
00527
00528
00529
00530
00531 # define CMIC_WORK_DIST_SINGLE 1
00532 # define CMIC_WORK_DIST_VECTOR 2
00533 # define CMIC_WORK_DIST_GUIDED 3
00534 # define CMIC_WORK_DIST_NUMCHUNKS 4
00535 # define CMIC_WORK_DIST_CHUNKSIZE 5
00536 # define CMIC_WORK_DIST_NCPUS_CHUNKS 8
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561 # define RC_OKAY 0
00562
00563 # if (defined(_HOST_OS_IRIX) || defined(_HOST_OS_LINUX) || defined(_HOST_OS_DARWIN))
00564
00565 # define RC_INTERNAL_ERROR 1
00566 # define RC_USER_ERROR 2
00567
00568
00569 # else
00570
00571 # define RC_USER_ERROR 1
00572
00573 # define RC_INTERNAL_ERROR 2
00574
00575 # endif
00576
00577
00578
00579
00580
00581
00582 # define EQUAL_STRS(S1,S2) (strcmp (S1, S2) == IDENTICAL)
00583
00584
00585
00586
00587
00588
00589
00590
00591 # define CREATE_ID(ID, STR, LEN) \
00592 { int _idx; \
00593 for (_idx = 0; _idx < NUM_ID_WDS; _idx++) { \
00594 ID.words[_idx] = 0; \
00595 } \
00596 for (_idx = 0; _idx < LEN; _idx++) { \
00597 ID.string[_idx] = STR[_idx]; \
00598 } \
00599 }
00600
00601
00602 # define MEM_ALLOC(PTR, TYPE, SIZE) \
00603 PTR = (TYPE *) malloc ((SIZE)*sizeof(TYPE)); \
00604 MALLOC_CHECK(0); \
00605 if (PTR == NULL) { \
00606 char _struct_name[20]; \
00607 strncpy (_struct_name, #PTR, 20); \
00608 PRINTMSG (stmt_start_line, 14, Limit, 0, _struct_name); \
00609 } \
00610 MEM_TRACE(Mem_Alloc,PTR,NULL,((SIZE)*(long)sizeof(TYPE)), SIZE)
00611
00612
00613
00614 # define MEM_FREE(PTR) \
00615 MALLOC_CHECK(0); \
00616 free (PTR); \
00617 MEM_TRACE (Mem_Free, PTR, NULL, 0, 0) \
00618 PTR = NULL_IDX;
00619
00620 # define TBL_FREE(STRUCT) \
00621 if (STRUCT != NULL) { \
00622 MEM_REPORT(STRUCT); \
00623 CLEAR_LARGEST_IDX(STRUCT); \
00624 MEM_FREE(STRUCT); \
00625 STRUCT##_idx = 0; \
00626 STRUCT##_size = 0; \
00627 }
00628
00629
00630
00631
00632
00633
00634 # ifdef _DEBUG
00635 # define MEM_REALLOC(PTR, TYPE, NEW_SIZE) \
00636 { void *_optr = PTR; \
00637 MALLOC_CHECK(0); \
00638 PTR = (TYPE *) realloc ((char *) PTR, (NEW_SIZE)*sizeof(TYPE));\
00639 if (PTR == NULL) { \
00640 char _struct_name[20]; \
00641 strncpy (_struct_name, #PTR, 20); \
00642 PRINTMSG (stmt_start_line, 14, Limit, 0, _struct_name); \
00643 } \
00644 MEM_TRACE (Mem_Realloc, PTR, _optr, \
00645 ((NEW_SIZE)*(long)sizeof(TYPE)), NEW_SIZE); \
00646 }
00647 # else
00648 # define MEM_REALLOC(PTR, TYPE, NEW_SIZE) \
00649 { MALLOC_CHECK(0); \
00650 PTR = (TYPE *) realloc ((char *) PTR, (NEW_SIZE)*sizeof(TYPE));\
00651 if (PTR == NULL) { \
00652 char _struct_name[20]; \
00653 strncpy (_struct_name, #PTR, 20); \
00654 PRINTMSG (stmt_start_line, 14, Limit, 0, _struct_name); \
00655 } \
00656 }
00657 # endif
00658
00659
00660 # define CHECK_INITIAL_ALLOC(STRUCT, STRUCT_INIT_IDX) \
00661 if (STRUCT##_size == 0) { \
00662 STRUCT##_size = STRUCT##_init_size; \
00663 TBL_ALLOC (STRUCT); \
00664 } \
00665 else if (STRUCT##_size > STRUCT##_init_size){ \
00666 MEM_REPORT(STRUCT); \
00667 MEM_FREE(STRUCT); \
00668 STRUCT##_size = STRUCT##_init_size; \
00669 TBL_ALLOC (STRUCT); \
00670 } \
00671 SET_LARGEST_IDX(STRUCT, NULL_IDX, STRUCT_INIT_IDX); \
00672 STRUCT##_idx = STRUCT_INIT_IDX;
00673
00674
00675
00676
00677
00678
00679 # define CHECK_TBL_ALLOC_SIZE(STRUCT, STRUCT_NEW_SIZE) \
00680 SET_LARGEST_IDX(STRUCT, STRUCT_NEW_SIZE, STRUCT_NEW_SIZE); \
00681 if (STRUCT##_size == 0) { \
00682 STRUCT##_size = STRUCT_NEW_SIZE + 1; \
00683 STRUCT##_init_size = STRUCT##_size; \
00684 TBL_ALLOC (STRUCT); \
00685 } \
00686 else if (STRUCT##_size <= STRUCT_NEW_SIZE){ \
00687 STRUCT##_size = STRUCT_NEW_SIZE + 1; \
00688 if (STRUCT##_size > STRUCT##_limit) { \
00689 char _struct_name[20]; \
00690 strncpy (_struct_name, #STRUCT, 20); \
00691 PRINTMSG(stmt_start_line, 237, Limit, 0, _struct_name); \
00692 } \
00693 MEM_REALLOC (STRUCT, STRUCT##_type, STRUCT##_size); \
00694 }
00695
00696
00697
00698
00699 # ifdef _DEBUG
00700 # define MEM_TRACE(TRACE_TYPE, NPTR, OPTR, BYTE_SIZE, NUM_ENTRIES) \
00701 if (dump_flags.mtrace_info) { \
00702 char _struct_name[20]; \
00703 strncpy (_struct_name, #NPTR, 20); \
00704 dump_mem_trace_info (TRACE_TYPE, _struct_name, NPTR, \
00705 OPTR, BYTE_SIZE, NUM_ENTRIES); \
00706 }
00707 # else
00708 # define MEM_TRACE(ARG1, ARG2, ARG3, ARG4, ARG5)
00709 # endif
00710
00711 # ifdef _DEBUG
00712 # define MEM_REPORT(STRUCT) \
00713 if (dump_flags.mem_report) { \
00714 char _struct_name[20]; \
00715 strncpy (_struct_name, #STRUCT, 20); \
00716 print_mem_usage_report(_struct_name, \
00717 STRUCT##_size, \
00718 STRUCT##_largest_idx); \
00719 }
00720 # else
00721 # define MEM_REPORT(STRUCT)
00722 # endif
00723
00724 # ifdef _DEBUG
00725 # define SET_LARGEST_IDX(STRUCT, CHECK_IDX, NEW_IDX) \
00726 if (STRUCT##_largest_idx < CHECK_IDX) { \
00727 STRUCT##_largest_idx = NEW_IDX; \
00728 }
00729 # define CLEAR_LARGEST_IDX(STRUCT) \
00730 STRUCT##_largest_idx = NULL_IDX;
00731 # else
00732 # define SET_LARGEST_IDX(STRUCT, CHECK_IDX, NEW_IDX)
00733 # define CLEAR_LARGEST_IDX(STRUCT)
00734 # endif
00735
00736 # if _DEBUG && ((defined _HOST_OS_UNICOS) || defined(_HOST_OS_MAX))
00737 # define MALLOC_CHECK(NUM) \
00738 if (malloc_check(NUM)) { \
00739 PRINTMSG (stmt_start_line, 514, Internal, 0); \
00740 }
00741 # else
00742 # define MALLOC_CHECK(NUM)
00743 # endif
00744
00745 #define NEXT_LA_CH \
00746 (*get_char)()
00747
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757 # define TBL_ALLOC(PTR) \
00758 MEM_ALLOC (PTR, PTR##_type, PTR##_size);
00759
00760 # define TBL_REALLOC_CK(PTR, NUM_ENTRIES) \
00761 PTR##_idx += (NUM_ENTRIES); \
00762 SET_LARGEST_IDX(PTR, PTR##_idx, PTR##_idx); \
00763 if (PTR##_idx >= PTR##_size) { \
00764 PTR##_size += (PTR##_inc > (NUM_ENTRIES)) ? \
00765 PTR##_inc : (NUM_ENTRIES); \
00766 if (PTR##_size > PTR##_limit) { \
00767 char _struct_name[20]; \
00768 strncpy (_struct_name, #PTR, 20); \
00769 PRINTMSG(stmt_start_line, 237, Limit, 0, _struct_name); \
00770 } \
00771 MEM_REALLOC (PTR, PTR##_type, PTR##_size); \
00772 }
00773
00774
00775
00776
00777 # define GLOBAL_LINE_TO_FILE_LINE(LINE, IDX, ACT_LINE) \
00778 for (IDX = 1; IDX <= global_line_tbl_idx; IDX++) { \
00779 if (GL_GLOBAL_LINE(IDX) > LINE) { \
00780 break; \
00781 } \
00782 } \
00783 IDX--; \
00784 ACT_LINE = LINE - GL_GLOBAL_LINE(IDX) + GL_FILE_LINE(IDX);
00785
00786 #ifdef KEY
00787
00788 # define COPY_OPND(OPND_T, OPND_S) \
00789 ((OPND_T) = (OPND_S))
00790 #else
00791 # define COPY_OPND(OPND_T, OPND_S) \
00792 OPND_T = OPND_S;
00793 #endif
00794
00795 # define SET_MESSAGE_TBL(TBL, MSG_NUM) \
00796 {int _shift, _idx; \
00797 _idx = MSG_NUM / HOST_BITS_PER_WORD; \
00798 _shift = HOST_BITS_PER_WORD - ((MSG_NUM%HOST_BITS_PER_WORD)+1);\
00799 TBL[_idx] |= 1 << _shift; \
00800 }
00801
00802 # define GET_MESSAGE_TBL(TBL, MSG_NUM) \
00803 (TBL[MSG_NUM/HOST_BITS_PER_WORD] & \
00804 1L << (HOST_BITS_PER_WORD-((MSG_NUM % HOST_BITS_PER_WORD)+1)))
00805
00806 # if defined(_TARGET32) && !defined(_USE_FOLD_DOT_f)
00807 # define SHIFT_ARITH_ARG(VAR, TYPE) \
00808 if (TYPE == Integer_1 || \
00809 TYPE == Integer_2 || \
00810 TYPE == Integer_4 || \
00811 TYPE == Typeless_1 || \
00812 TYPE == Typeless_2 || \
00813 TYPE == Typeless_4 || \
00814 TYPE == Short_Typeless_Const || \
00815 TYPE == Short_Char_Const || \
00816 TYPE == Logical_1 || \
00817 TYPE == Logical_2 || \
00818 TYPE == Logical_4 || \
00819 TYPE == Real_4) { \
00820 VAR[1] = VAR[0]; \
00821 VAR[0] = 0; \
00822 }
00823
00824 # define SHIFT_ARITH_RESULT(VAR, TYPE) \
00825 if (TYPE == Integer_1 || \
00826 TYPE == Integer_2 || \
00827 TYPE == Integer_4 || \
00828 TYPE == Typeless_1 || \
00829 TYPE == Typeless_2 || \
00830 TYPE == Typeless_4 || \
00831 TYPE == Short_Typeless_Const || \
00832 TYPE == Short_Char_Const || \
00833 TYPE == Logical_1 || \
00834 TYPE == Logical_2 || \
00835 TYPE == Logical_4 || \
00836 TYPE == Real_4) { \
00837 VAR[0] = VAR[1]; \
00838 }
00839
00840 # elif defined(_TARGET_LITTLE_ENDIAN) && defined(_TARGET32) && defined(_USE_FOLD_DOT_f)
00841 # define SHIFT_ARITH_ARG(VAR,TYPE) \
00842 if (TYPE == Integer_1 || \
00843 TYPE == Integer_2 || \
00844 TYPE == Integer_4 || \
00845 TYPE == Typeless_1 || \
00846 TYPE == Typeless_2 || \
00847 TYPE == Typeless_4 || \
00848 TYPE == Short_Typeless_Const || \
00849 TYPE == Short_Char_Const || \
00850 TYPE == Logical_1 || \
00851 TYPE == Logical_2 || \
00852 TYPE == Logical_4 || \
00853 TYPE == Real_4){ \
00854 VAR[1] = 0; \
00855 }
00856 # define SHIFT_ARITH_RESULT(VAR, TYPE)
00857 # else
00858
00859
00860
00861
00862
00863 # define SHIFT_ARITH_ARG(VAR, TYPE)
00864
00865 # define SHIFT_ARITH_RESULT(VAR, TYPE)
00866 # endif
00867
00868
00869
00870
00871
00872
00873 # define ADD_TMP_TO_SHARED_LIST(ATTR_IDX) \
00874 if (cdir_switches.parallel_region && \
00875 cdir_switches.shared_list_idx != NULL_IDX && \
00876 comp_phase == Pass2_Semantics && \
00877 AT_OBJ_CLASS(ATTR_IDX) == Data_Obj && \
00878 ATD_CLASS(ATTR_IDX) == Compiler_Tmp && \
00879 ! ATD_TASK_PRIVATE(ATTR_IDX) && \
00880 ! ATD_TASK_SHARED(ATTR_IDX)) { \
00881 int _list_idx; \
00882 NTR_IR_LIST_TBL(_list_idx); \
00883 IL_NEXT_LIST_IDX(_list_idx) = IL_IDX(cdir_switches.shared_list_idx); \
00884 if (IL_IDX(cdir_switches.shared_list_idx) != NULL_IDX) { \
00885 IL_PREV_LIST_IDX(IL_IDX(cdir_switches.shared_list_idx)) = _list_idx; \
00886 } \
00887 IL_IDX(cdir_switches.shared_list_idx) = _list_idx; \
00888 IL_FLD(cdir_switches.shared_list_idx) = IL_Tbl_Idx; \
00889 IL_LIST_CNT(cdir_switches.shared_list_idx)++; \
00890 IL_FLD(_list_idx) = AT_Tbl_Idx; \
00891 IL_IDX(_list_idx) = ATTR_IDX; \
00892 ATD_TASK_SHARED(ATTR_IDX) = TRUE; \
00893 }
00894
00895 # define ADD_TMP_TO_PRIVATE_LIST(ATTR_IDX) \
00896 if (cdir_switches.parallel_region && \
00897 cdir_switches.private_list_idx != NULL_IDX && \
00898 comp_phase == Pass2_Semantics && \
00899 AT_OBJ_CLASS(ATTR_IDX) == Data_Obj && \
00900 ATD_CLASS(ATTR_IDX) == Compiler_Tmp && \
00901 ! ATD_TASK_PRIVATE(ATTR_IDX) && \
00902 ! ATD_TASK_SHARED(ATTR_IDX)) { \
00903 int _list_idx; \
00904 NTR_IR_LIST_TBL(_list_idx); \
00905 IL_NEXT_LIST_IDX(_list_idx) = IL_IDX(cdir_switches.private_list_idx); \
00906 if (IL_IDX(cdir_switches.private_list_idx) != NULL_IDX) { \
00907 IL_PREV_LIST_IDX(IL_IDX(cdir_switches.private_list_idx)) = _list_idx; \
00908 } \
00909 IL_IDX(cdir_switches.private_list_idx) = _list_idx; \
00910 IL_FLD(cdir_switches.private_list_idx) = IL_Tbl_Idx; \
00911 IL_LIST_CNT(cdir_switches.private_list_idx)++; \
00912 IL_FLD(_list_idx) = AT_Tbl_Idx; \
00913 IL_IDX(_list_idx) = ATTR_IDX; \
00914 ATD_TASK_PRIVATE(ATTR_IDX) = TRUE; \
00915 }
00916
00917 # define ADD_VAR_TO_SHARED_LIST(ATTR_IDX) \
00918 if (cdir_switches.parallel_region && \
00919 comp_phase == Pass2_Semantics && \
00920 cdir_switches.shared_list_idx != NULL_IDX && \
00921 AT_OBJ_CLASS(ATTR_IDX) == Data_Obj && \
00922 ! ATD_TASK_PRIVATE(ATTR_IDX) && \
00923 ! ATD_TASK_SHARED(ATTR_IDX)) { \
00924 int _list_idx; \
00925 NTR_IR_LIST_TBL(_list_idx); \
00926 IL_NEXT_LIST_IDX(_list_idx) = IL_IDX(cdir_switches.shared_list_idx); \
00927 if (IL_IDX(cdir_switches.shared_list_idx) != NULL_IDX) { \
00928 IL_PREV_LIST_IDX(IL_IDX(cdir_switches.shared_list_idx)) = _list_idx; \
00929 } \
00930 IL_IDX(cdir_switches.shared_list_idx) = _list_idx; \
00931 IL_FLD(cdir_switches.shared_list_idx) = IL_Tbl_Idx; \
00932 IL_LIST_CNT(cdir_switches.shared_list_idx)++; \
00933 IL_FLD(_list_idx) = AT_Tbl_Idx; \
00934 IL_IDX(_list_idx) = ATTR_IDX; \
00935 ATD_TASK_SHARED(ATTR_IDX) = TRUE; \
00936 ATD_WAS_SCOPED(ATTR_IDX) = TRUE; \
00937 }
00938
00939 # define ADD_VAR_TO_PRIVATE_LIST(ATTR_IDX) \
00940 if (cdir_switches.parallel_region && \
00941 cdir_switches.private_list_idx != NULL_IDX && \
00942 comp_phase == Pass2_Semantics && \
00943 AT_OBJ_CLASS(ATTR_IDX) == Data_Obj && \
00944 ! ATD_TASK_PRIVATE(ATTR_IDX) && \
00945 ! ATD_TASK_SHARED(ATTR_IDX)) { \
00946 int _list_idx; \
00947 NTR_IR_LIST_TBL(_list_idx); \
00948 IL_NEXT_LIST_IDX(_list_idx) = IL_IDX(cdir_switches.private_list_idx); \
00949 if (IL_IDX(cdir_switches.private_list_idx) != NULL_IDX) { \
00950 IL_PREV_LIST_IDX(IL_IDX(cdir_switches.private_list_idx)) = _list_idx; \
00951 } \
00952 IL_IDX(cdir_switches.private_list_idx) = _list_idx; \
00953 IL_FLD(cdir_switches.private_list_idx) = IL_Tbl_Idx; \
00954 IL_LIST_CNT(cdir_switches.private_list_idx)++; \
00955 IL_FLD(_list_idx) = AT_Tbl_Idx; \
00956 IL_IDX(_list_idx) = ATTR_IDX; \
00957 ATD_TASK_PRIVATE(ATTR_IDX) = TRUE; \
00958 ATD_WAS_SCOPED(ATTR_IDX) = TRUE; \
00959 }
00960
00961 # define GEN_MAX_ZERO_IR(MAX_IDX, THE_OPND, LINE, COL) \
00962 { int _list_idx; \
00963 NTR_IR_TBL(MAX_IDX); \
00964 IR_OPR(MAX_IDX) = Max_Opr; \
00965 IR_TYPE_IDX(MAX_IDX) = CG_INTEGER_DEFAULT_TYPE; \
00966 IR_LINE_NUM(MAX_IDX) = LINE; \
00967 IR_COL_NUM(MAX_IDX) = COL; \
00968 NTR_IR_LIST_TBL(_list_idx); \
00969 IR_FLD_L(MAX_IDX) = IL_Tbl_Idx; \
00970 IR_LIST_CNT_L(MAX_IDX) = 2; \
00971 IR_IDX_L(MAX_IDX) = _list_idx; \
00972 IL_FLD(_list_idx) = CN_Tbl_Idx; \
00973 IL_IDX(_list_idx) = CN_INTEGER_ZERO_IDX; \
00974 IL_LINE_NUM(_list_idx) = LINE; \
00975 IL_COL_NUM(_list_idx) = COL; \
00976 NTR_IR_LIST_TBL(IL_NEXT_LIST_IDX(_list_idx)); \
00977 IL_PREV_LIST_IDX(IL_NEXT_LIST_IDX(_list_idx)) = _list_idx; \
00978 _list_idx = IL_NEXT_LIST_IDX(_list_idx); \
00979 COPY_OPND(IL_OPND(_list_idx), (THE_OPND)); \
00980 IL_LINE_NUM(_list_idx) = LINE; \
00981 IL_COL_NUM(_list_idx) = COL; \
00982 }
00983
00984
00985 #ifdef KEY
00986 # define FUNCTION_MUST_BE_SUBROUTINE(FCN_IDX,RSLT_IDX) \
00987 (TYP_TYPE(ATD_TYPE_IDX(RSLT_IDX)) == Character || \
00988 (TYP_TYPE(ATD_TYPE_IDX(RSLT_IDX)) == Structure \
00989 && ! c_ptr_abi_trouble(TYP_IDX(ATD_TYPE_IDX(RSLT_IDX)))) || \
00990 ATD_ARRAY_IDX(RSLT_IDX) != NULL_IDX || \
00991 ATD_IM_A_DOPE(RSLT_IDX) || \
00992 special_case_fcn_to_sub(FCN_IDX))
00993 #else
00994 # define FUNCTION_MUST_BE_SUBROUTINE(ATTR_IDX) \
00995 (TYP_TYPE(ATD_TYPE_IDX(ATTR_IDX)) == Character || \
00996 TYP_TYPE(ATD_TYPE_IDX(ATTR_IDX)) == Structure || \
00997 ATD_ARRAY_IDX(ATTR_IDX) != NULL_IDX || \
00998 ATD_IM_A_DOPE(ATTR_IDX))
00999 #endif
01000
01001
01002
01003
01004
01005
01006 # define STMT_EXPAND_BEFORE_START_SH(IDX) \
01007 IL_IDX(IR_IDX_R(IDX))
01008
01009 # define STMT_EXPAND_BEFORE_END_SH(IDX) \
01010 IL_IDX(IL_NEXT_LIST_IDX(IR_IDX_R(IDX)))
01011
01012 # define STMT_EXPAND_AFTER_START_SH(IDX) \
01013 IL_IDX(IL_NEXT_LIST_IDX(IL_NEXT_LIST_IDX(IR_IDX_R(IDX))))
01014
01015 # define STMT_EXPAND_AFTER_END_SH(IDX) \
01016 IL_IDX(IL_NEXT_LIST_IDX(IL_NEXT_LIST_IDX(IL_NEXT_LIST_IDX(IR_IDX_R(IDX)))))
01017
01018 # define PUSH_CURR_STMT \
01019 { int _list_idx; \
01020 NTR_IR_LIST_TBL(_list_idx); \
01021 IL_FLD(_list_idx) = SH_Tbl_Idx; \
01022 IL_IDX(_list_idx) = curr_stmt_sh_idx; \
01023 if (curr_stmt_stk_il_idx == NULL_IDX) { \
01024 curr_stmt_stk_il_idx = _list_idx; \
01025 } else { \
01026 IL_NEXT_LIST_IDX(_list_idx) = curr_stmt_stk_il_idx; \
01027 curr_stmt_stk_il_idx = _list_idx; \
01028 } \
01029 }
01030
01031 # define POP_CURR_STMT \
01032 if (curr_stmt_stk_il_idx) { int _save_list_idx; \
01033 curr_stmt_sh_idx = IL_IDX(curr_stmt_stk_il_idx); \
01034 _save_list_idx = curr_stmt_stk_il_idx; \
01035 curr_stmt_stk_il_idx = IL_NEXT_LIST_IDX(curr_stmt_stk_il_idx); \
01036 FREE_IR_LIST_NODE(_save_list_idx); \
01037 }
01038
01039
01040
01041
01042
01043 # define INCREMENT_STATEMENT_NUMBER \
01044 prev_statement_number++; \
01045 statement_number = prev_statement_number;