Open64 (mfef90, whirl2f, and IR tools)
TAG: version-openad; SVN changeset: 916
|
00001 /* 00002 00003 Copyright (C) 2000, 2001 Silicon Graphics, Inc. All Rights Reserved. 00004 00005 This program is free software; you can redistribute it and/or modify it 00006 under the terms of version 2 of the GNU General Public License as 00007 published by the Free Software Foundation. 00008 00009 This program is distributed in the hope that it would be useful, but 00010 WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00012 00013 Further, this software is distributed without any warranty that it is 00014 free of the rightful claim of any third person regarding infringement 00015 or the like. Any license provided herein, whether implied or 00016 otherwise, applies only to this software file. Patent licenses, if 00017 any, provided herein do not apply to combinations of this program with 00018 other software, or any other product whatsoever. 00019 00020 You should have received a copy of the GNU General Public License along 00021 with this program; if not, write the Free Software Foundation, Inc., 59 00022 Temple Place - Suite 330, Boston MA 02111-1307, USA. 00023 00024 Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pky, 00025 Mountain View, CA 94043, or: 00026 00027 http://www.sgi.com 00028 00029 For further information regarding this notice, see: 00030 00031 http://oss.sgi.com/projects/GenInfo/NoticeExplan 00032 00033 */ 00034 00035 static OPCODE Intconst_Opcode [4] = { 00036 OPC_I4INTCONST, OPC_U4INTCONST, OPC_I8INTCONST, OPC_U8INTCONST 00037 }; 00038 00039 #define ERR_OP -1 00040 00041 #define I4_OP 0 00042 #define U4_OP 1 00043 #define I8_OP 2 00044 #define U8_OP 3 00045 00046 #define F4_OP 0 00047 #define F8_OP 1 00048 #define FQ_OP 2 00049 00050 #define C4_OP 0 00051 #define C8_OP 1 00052 #define CQ_OP 2 00053 00054 00055 static const mINT8 op_form [MTYPE_LAST + 1] = { 00056 ERR_OP, /* MTYPE_UNKNOWN */ 00057 ERR_OP, /* MTYPE_B */ 00058 I4_OP, /* MTYPE_I1 */ 00059 I4_OP, /* MTYPE_I2 */ 00060 I4_OP, /* MTYPE_I4 */ 00061 I8_OP, /* MTYPE_I8 */ 00062 U4_OP, /* MTYPE_U1 */ 00063 U4_OP, /* MTYPE_U2 */ 00064 U4_OP, /* MTYPE_U4 */ 00065 U8_OP, /* MTYPE_U8 */ 00066 F4_OP, /* MTYPE_F4 */ 00067 F8_OP, /* MTYPE_F8 */ 00068 ERR_OP, /* MTYPE_F10 */ 00069 ERR_OP, /* MTYPE_F16 */ 00070 ERR_OP, /* MTYPE_STR */ 00071 FQ_OP, /* MTYPE_FQ */ 00072 ERR_OP, /* MTYPE_M */ 00073 C4_OP, /* MTYPE_C4 */ 00074 C8_OP, /* MTYPE_C8 */ 00075 CQ_OP, /* MTYPE_CQ */ 00076 ERR_OP, /* MTYPE_V */ 00077 }; 00078 00079 00080 static const OPCODE Const_Opcode [MTYPE_LAST + 1] = { 00081 OPCODE_UNKNOWN, /* MTYPE_UNKNOWN */ 00082 OPCODE_UNKNOWN, /* MTYPE_UNKNOWN */ 00083 OPC_I4INTCONST, /* MTYPE_I1 */ 00084 OPC_I4INTCONST, /* MTYPE_I2 */ 00085 OPC_I4INTCONST, /* MTYPE_I4 */ 00086 OPC_I8INTCONST, /* MTYPE_I8 */ 00087 OPC_U4INTCONST, /* MTYPE_U1 */ 00088 OPC_U4INTCONST, /* MTYPE_U2 */ 00089 OPC_U4INTCONST, /* MTYPE_U4 */ 00090 OPC_U8INTCONST, /* MTYPE_U8 */ 00091 OPC_F4CONST, /* MTYPE_F4 */ 00092 OPC_F8CONST, /* MTYPE_F8 */ 00093 OPCODE_UNKNOWN, /* MTYPE_F10 */ 00094 OPCODE_UNKNOWN, /* MTYPE_F16 */ 00095 OPCODE_UNKNOWN, /* MTYPE_STR */ 00096 OPC_FQCONST, /* MTYPE_FQ */ 00097 OPCODE_UNKNOWN, /* MTYPE_M */ 00098 OPC_C4CONST, /* MTYPE_C4 */ 00099 OPC_C8CONST, /* MTYPE_C8 */ 00100 OPC_CQCONST, /* MTYPE_CQ */ 00101 OPCODE_UNKNOWN, /* MTYPE_V */ 00102 }; 00103 00104 /* Given an OBJECT_SYM, return a ST_Class */ 00105 00106 static const ST_CLASS object_map[Name+1] = { 00107 CLASS_UNK, /* Unknown_Sym */ 00108 CLASS_VAR, /* User_Variable */ 00109 CLASS_VAR, /* Dummy_Arg */ 00110 CLASS_VAR, /* Function_Rslt */ 00111 CLASS_VAR, /* Compiler_Temp */ 00112 CLASS_VAR, /* CRI_Pointee */ 00113 CLASS_VAR, /* Component */ 00114 CLASS_UNK, /* Vector_Temp */ 00115 CLASS_UNK, /* Vector_Maskk */ 00116 CLASS_UNK, /* Vector_Iota */ 00117 CLASS_UNK, /* MPP_object */ 00118 CLASS_UNK, /* Call_Dummy */ 00119 CLASS_VAR, /* Dummy_Procedure */ 00120 CLASS_VAR, /* Hosted_User_Variable */ 00121 CLASS_VAR, /* Hosted_Dummy_Arg */ 00122 CLASS_UNK, /* Scratch_Symbol */ 00123 CLASS_VAR, /* Hosted_Dummy_Procedure */ 00124 CLASS_VAR, /* Hosted_Compiler_Temp */ 00125 CLASS_NAME, /* Name */ 00126 } ; 00127 00128 00129 /* Given an SEGMENT_TYPE return a ST_SCLASS */ 00130 00131 /* hack for based varbls - will fail in symtab verification */ 00132 /* unless ST_SCLASS is changed in fei_object */ 00133 00134 #define SCLASS_BASED SCLASS_COUNT 00135 00136 00137 static const ST_SCLASS segment_map[Seg_Coment+1] = { 00138 SCLASS_UNKNOWN, /* Seg_Unknown */ 00139 SCLASS_FSTATIC, /* Seg_Static */ 00140 SCLASS_AUTO, /* Seg_Stack */ 00141 SCLASS_FORMAL, /* Seg_Formal */ 00142 SCLASS_COMMON, /* Seg_Common */ 00143 SCLASS_EXTERN, /* Seg_Extern */ 00144 SCLASS_DGLOBAL, /* Seg_Exported */ 00145 SCLASS_UNKNOWN, /* Seg_Task_Common */ 00146 SCLASS_UGLOBAL, /* Seg_Soft_External */ 00147 SCLASS_UNKNOWN, /* Seg_Global_Breg */ 00148 SCLASS_UNKNOWN, /* Seg_Global_Treg */ 00149 SCLASS_PSTATIC, /* Seg_Static_Name */ 00150 SCLASS_BASED, /* Seg_Based */ 00151 SCLASS_UNKNOWN, /* Seg_Equivalenced */ 00152 SCLASS_UNKNOWN, /* Seg_Restricted */ 00153 SCLASS_FSTATIC, /* Seg_Distributed */ 00154 SCLASS_UNKNOWN, /* Seg_LM_Static */ 00155 SCLASS_UNKNOWN, /* Seg_LM_Common */ 00156 SCLASS_UNKNOWN, /* Seg_LM_Extern */ 00157 SCLASS_UNKNOWN, /* Seg_Auxiliary */ 00158 SCLASS_PSTATIC, /* Seg_Static_Local */ 00159 SCLASS_AUTO, /* Seg_Non_Local_Stack */ 00160 SCLASS_FORMAL, /* Seg_Non_Local_Formal */ 00161 SCLASS_AUTO, /* Seg_Hosted_Stack */ 00162 SCLASS_UNKNOWN, /*I don't why this case missed in original version,should be what??*/ 00163 SCLASS_UNKNOWN, /* Seg_Threadprivate */ 00164 SCLASS_MODULE, /* Seg_Module */ 00165 SCLASS_COMMENT, /* Seg_Coment */ 00166 } ; 00167 00168 /* 00169 ST of current (ie: last fei_proc_def) procedure - retained 00170 so entry points can be tacked on a LIST associated with the 00171 procedure. Also used in DST information, and to set PU flags. 00172 00173 The Alttemp_ST is used for entry points where the 00174 result is a pointer: eg: characters, arrays. It holds 00175 the ST of the first pointer seen. 00176 00177 The Altbase_ST is used for scalar entry points. If 00178 a CQ result, then we may need to create a temp, as 00179 CQs are passed by address, when Altaddress_ST is the 00180 original address. 00181 00182 Main ST is the ST of an EXTERNAL used for DST info in 00183 main programs with a name.. 00184 00185 00186 */ 00187 00188 ST * Procedure_ST ; 00189 static ST * Alttemp_ST ; 00190 static ST * Altbase_ST ; 00191 ST * Altaddress_ST ; 00192 static ST * Main_ST; 00193 static BOOL Has_nested_proc ; 00194 00195 #define NOT_IN_PU (CURRENT_SYMTAB == GLOBAL_SYMTAB) 00196 00197 /* a counter, so we initialize the symbol table correctly */ 00198 /* Alternate entry points bump the count. */ 00199 00200 static INT32 entry_point_count = 0 ; 00201 00202 /* 00203 list of entry point's STs with SCLASS_TEXT to be used 00204 for STs in function references, instead of generating 00205 an EXTERNAL. Essential for internal procedure calls. 00206 Saves duplicate DSTs, too. 00207 */ 00208 00209 static LIST * Top_Text = NULL ; 00210 00211 /* 00212 List of namelist items from fei_name to be added 00213 to a namelist struct in fei_namelist. 00214 */ 00215 00216 static LIST * Namelist ; 00217 00218 00219 /* 00220 list of items handed back to the interface from ST and TY 00221 creation routines. STB_pkt is defined in cwh_stab.h. 00222 The list allows deletion after each PU. (sole purpose). 00223 00224 FIX - memory pool? 00225 */ 00226 00227 static STB_pkt *STB_list ; 00228 00229 00230 /* 00231 array of ST's which appeared within an internal procedure 00232 as hosted variables. Allows search through these, not 00233 whole of host's SYMTAB. 00234 */ 00235 00236 #define HOST_ST_SIZE_CHANGE 512 00237 static INT32 Host_Current_Size = 0; 00238 static ST ** Host_STs = NULL; 00239 static INT32 Host_Top = -1 ; 00240 00241 /* 00242 A list of COMMONS or equivalence STs. The flds of the block 00243 have to be contiguous. Don't know how many there are, so we 00244 just accumulate them, and create the block later. 00245 00246 Equivalences are per PU. 00247 Hosted_Equivalences are per Host PU, seen within nested routines. 00248 Commons_Already_Seen are per file ie: COMMONS in the global symtab 00249 which are candidates for reuse. 00250 */ 00251 00252 static LIST * Equivalences; 00253 static LIST * Hosted_Equivalences; 00254 static LIST * Commons_Already_Seen; 00255 00256 00257 /* flags which control COMMON STs */ 00258 00259 BOOL FE_Partial_Split = TRUE ; 00260 00261 00262 /* 00263 Definitions used to split COMMON blocks. 00264 into 16K and 512K blocks These are lifted from edvar.c 00265 */ 00266 00267 static INT32 FE_Full_Split_Array_Limit = 16384; 00268 00269 static struct _full_split_st { 00270 INT64 rel_offset; 00271 int delta; 00272 } FE_Full_Split_Limits [] = { 00273 00274 16 * 1024, 819, 00275 512 * 1024, 26214 00276 }; 00277 00278 typedef struct { 00279 ST * fp ; 00280 INT32 prev_array_index; 00281 INT64 first_offset; 00282 INT64 last_offset; 00283 } FIELD_ITEM, *FIELDS; 00284 00285 00286 typedef struct renamings { 00287 const char * oldname; 00288 char * newname; 00289 } INTRIN_NAME; 00290 00291 #define NUM_INAMEMAP sizeof(Iname_Map)/sizeof(INTRIN_NAME) 00292 static const INTRIN_NAME Iname_Map[] = 00293 { 00294 {"AMAX0","AMAX"}, 00295 {"AMAX1","AMAX"}, 00296 {"AMIN0","AMIN"}, 00297 {"AMIN1","AMIN"}, 00298 {"ATAN2D","ATAN2"}, 00299 {"DATAN2D","DATAN2"}, 00300 {"DMAX1","DMAX"}, 00301 {"DMIN1","DMIN"}, 00302 {"MAX0","MAX"}, 00303 {"MAX1","MAX"}, 00304 {"MIN1","MIN"}, 00305 {"_ALL","ALL"}, 00306 {"_ALLOCATED","ALLOCATED"}, 00307 {"_ALL_1","ALL"}, 00308 {"_ALL_2","ALL"}, 00309 {"_ALL_4","ALL"}, 00310 {"_ANY","ANY"}, 00311 {"_ANY_1","ANY"}, 00312 {"_ANY_2","ANY"}, 00313 {"_ANY_4","ANY"}, 00314 {"_ASSOCIATED_4","ASSOCIATED"}, 00315 {"_ASSOCIATED_8","ASSOCIATED"}, 00316 {"_CLOCK","CLOCK"}, 00317 {"_COUNT","COUNT"}, 00318 {"_COUNT_1","COUNT"}, 00319 {"_COUNT_2","COUNT"}, 00320 {"_COUNT_4","COUNT"}, 00321 {"_CPU_TIME_16","CPU_TIME"}, 00322 {"_CPU_TIME_4","CPU_TIME"}, 00323 {"_CPU_TIME_8","CPU_TIME"}, 00324 {"_CSHIFT","CSHIFT"}, 00325 {"_DATE","DATE"}, 00326 {"_DATE_AND_TIME","DATE_AND_TIME"}, 00327 {"_DIM_","DIM"}, 00328 {"_DOT_C4C","DOT_PRODUCT"}, 00329 {"_DOT_C4C4","DOT_PRODUCT"}, 00330 {"_DOT_C4D","DOT_PRODUCT"}, 00331 {"_DOT_C4I1","DOT_PRODUCT"}, 00332 {"_DOT_C4I2","DOT_PRODUCT"}, 00333 {"_DOT_C4I4","DOT_PRODUCT"}, 00334 {"_DOT_C4J","DOT_PRODUCT"}, 00335 {"_DOT_C4S","DOT_PRODUCT"}, 00336 {"_DOT_C4S4","DOT_PRODUCT"}, 00337 {"_DOT_C4Z","DOT_PRODUCT"}, 00338 {"_DOT_CC","DOT_PRODUCT"}, 00339 {"_DOT_CC4","DOT_PRODUCT"}, 00340 {"_DOT_CD","DOT_PRODUCT"}, 00341 {"_DOT_CI1","DOT_PRODUCT"}, 00342 {"_DOT_CI2","DOT_PRODUCT"}, 00343 {"_DOT_CI4","DOT_PRODUCT"}, 00344 {"_DOT_CJ","DOT_PRODUCT"}, 00345 {"_DOT_CS","DOT_PRODUCT"}, 00346 {"_DOT_CS4","DOT_PRODUCT"}, 00347 {"_DOT_CZ","DOT_PRODUCT"}, 00348 {"_DOT_DC","DOT_PRODUCT"}, 00349 {"_DOT_DC4","DOT_PRODUCT"}, 00350 {"_DOT_DD","DOT_PRODUCT"}, 00351 {"_DOT_DI1","DOT_PRODUCT"}, 00352 {"_DOT_DI2","DOT_PRODUCT"}, 00353 {"_DOT_DI4","DOT_PRODUCT"}, 00354 {"_DOT_DJ","DOT_PRODUCT"}, 00355 {"_DOT_DS","DOT_PRODUCT"}, 00356 {"_DOT_DS4","DOT_PRODUCT"}, 00357 {"_DOT_DZ","DOT_PRODUCT"}, 00358 {"_DOT_I1C","DOT_PRODUCT"}, 00359 {"_DOT_I1C4","DOT_PRODUCT"}, 00360 {"_DOT_I1D","DOT_PRODUCT"}, 00361 {"_DOT_I1I1","DOT_PRODUCT"}, 00362 {"_DOT_I1I2","DOT_PRODUCT"}, 00363 {"_DOT_I1I4","DOT_PRODUCT"}, 00364 {"_DOT_I1J","DOT_PRODUCT"}, 00365 {"_DOT_I1S","DOT_PRODUCT"}, 00366 {"_DOT_I1S4","DOT_PRODUCT"}, 00367 {"_DOT_I1Z","DOT_PRODUCT"}, 00368 {"_DOT_I2C","DOT_PRODUCT"}, 00369 {"_DOT_I2C4","DOT_PRODUCT"}, 00370 {"_DOT_I2D","DOT_PRODUCT"}, 00371 {"_DOT_I2I1","DOT_PRODUCT"}, 00372 {"_DOT_I2I2","DOT_PRODUCT"}, 00373 {"_DOT_I2I4","DOT_PRODUCT"}, 00374 {"_DOT_I2J","DOT_PRODUCT"}, 00375 {"_DOT_I2S","DOT_PRODUCT"}, 00376 {"_DOT_I2S4","DOT_PRODUCT"}, 00377 {"_DOT_I2Z","DOT_PRODUCT"}, 00378 {"_DOT_I4C","DOT_PRODUCT"}, 00379 {"_DOT_I4C4","DOT_PRODUCT"}, 00380 {"_DOT_I4D","DOT_PRODUCT"}, 00381 {"_DOT_I4I1","DOT_PRODUCT"}, 00382 {"_DOT_I4I2","DOT_PRODUCT"}, 00383 {"_DOT_I4I4","DOT_PRODUCT"}, 00384 {"_DOT_I4J","DOT_PRODUCT"}, 00385 {"_DOT_I4S","DOT_PRODUCT"}, 00386 {"_DOT_I4S4","DOT_PRODUCT"}, 00387 {"_DOT_I4Z","DOT_PRODUCT"}, 00388 {"_DOT_JC","DOT_PRODUCT"}, 00389 {"_DOT_JC4","DOT_PRODUCT"}, 00390 {"_DOT_JD","DOT_PRODUCT"}, 00391 {"_DOT_JI1","DOT_PRODUCT"}, 00392 {"_DOT_JI2","DOT_PRODUCT"}, 00393 {"_DOT_JI4","DOT_PRODUCT"}, 00394 {"_DOT_JJ","DOT_PRODUCT"}, 00395 {"_DOT_JS","DOT_PRODUCT"}, 00396 {"_DOT_JS4","DOT_PRODUCT"}, 00397 {"_DOT_JZ","DOT_PRODUCT"}, 00398 {"_DOT_L1L","DOT_PRODUCT"}, 00399 {"_DOT_L1L1","DOT_PRODUCT"}, 00400 {"_DOT_L1L2","DOT_PRODUCT"}, 00401 {"_DOT_L1L4","DOT_PRODUCT"}, 00402 {"_DOT_L2L","DOT_PRODUCT"}, 00403 {"_DOT_L2L1","DOT_PRODUCT"}, 00404 {"_DOT_L2L2","DOT_PRODUCT"}, 00405 {"_DOT_L2L4","DOT_PRODUCT"}, 00406 {"_DOT_L4L","DOT_PRODUCT"}, 00407 {"_DOT_L4L1","DOT_PRODUCT"}, 00408 {"_DOT_L4L2","DOT_PRODUCT"}, 00409 {"_DOT_L4L4","DOT_PRODUCT"}, 00410 {"_DOT_LL","DOT_PRODUCT"}, 00411 {"_DOT_LL1","DOT_PRODUCT"}, 00412 {"_DOT_LL2","DOT_PRODUCT"}, 00413 {"_DOT_LL4","DOT_PRODUCT"}, 00414 {"_DOT_S4C","DOT_PRODUCT"}, 00415 {"_DOT_S4C4","DOT_PRODUCT"}, 00416 {"_DOT_S4D","DOT_PRODUCT"}, 00417 {"_DOT_S4I1","DOT_PRODUCT"}, 00418 {"_DOT_S4I2","DOT_PRODUCT"}, 00419 {"_DOT_S4I4","DOT_PRODUCT"}, 00420 {"_DOT_S4J","DOT_PRODUCT"}, 00421 {"_DOT_S4S","DOT_PRODUCT"}, 00422 {"_DOT_S4S4","DOT_PRODUCT"}, 00423 {"_DOT_S4Z","DOT_PRODUCT"}, 00424 {"_DOT_SC","DOT_PRODUCT"}, 00425 {"_DOT_SC4","DOT_PRODUCT"}, 00426 {"_DOT_SD","DOT_PRODUCT"}, 00427 {"_DOT_SI1","DOT_PRODUCT"}, 00428 {"_DOT_SI2","DOT_PRODUCT"}, 00429 {"_DOT_SI4","DOT_PRODUCT"}, 00430 {"_DOT_SJ","DOT_PRODUCT"}, 00431 {"_DOT_SS","DOT_PRODUCT"}, 00432 {"_DOT_SS4","DOT_PRODUCT"}, 00433 {"_DOT_SZ","DOT_PRODUCT"}, 00434 {"_DOT_ZC","DOT_PRODUCT"}, 00435 {"_DOT_ZC4","DOT_PRODUCT"}, 00436 {"_DOT_ZD","DOT_PRODUCT"}, 00437 {"_DOT_ZI1","DOT_PRODUCT"}, 00438 {"_DOT_ZI2","DOT_PRODUCT"}, 00439 {"_DOT_ZI4","DOT_PRODUCT"}, 00440 {"_DOT_ZJ","DOT_PRODUCT"}, 00441 {"_DOT_ZS","DOT_PRODUCT"}, 00442 {"_DOT_ZS4","DOT_PRODUCT"}, 00443 {"_DOT_ZZ","DOT_PRODUCT"}, 00444 {"_EOSHIFT","EOSHIFT"}, 00445 {"_F90_CLOCK_","F90_CLOCK"}, 00446 {"_F90_DATE_","F90_DATE"}, 00447 {"_F90_DATE_AND_TIME","DATE_AND_TIME"}, 00448 {"_F90_JDATE_","JDATE"}, 00449 {"_F90_REPEAT","REPEAT"}, 00450 {"_F90_TRIM","TRIM"}, 00451 {"_FREE_I4","FREE"}, 00452 {"_FREE_I8","FREE"}, 00453 {"_HDIM_","HDIM"}, 00454 {"_IDATE_I1","IDATE"}, 00455 {"_IDATE_I2","IDATE"}, 00456 {"_IDATE_I4","IDATE"}, 00457 {"_IDATE_I8","IDATE"}, 00458 {"_ILEN_I1_I1","ILEN"}, 00459 {"_ILEN_I2_I2","ILEN"}, 00460 {"_ILEN_I4_I4","ILEN"}, 00461 {"_ILEN_I8_I8","ILEN"}, 00462 {"_JDATE","JDATE"}, 00463 {"_LBOUND","LBOUND"}, 00464 {"_LBOUND0_4","LBOUND"}, 00465 {"_LBOUND0_8","LBOUND"}, 00466 {"_LIST_SYNC","LIST_SYNC"}, 00467 {"_MALLOC_I4_I4","MALLOC"}, 00468 {"_MALLOC_I4_I8","MALLOC"}, 00469 {"_MALLOC_I8_I4","MALLOC"}, 00470 {"_MALLOC_I8_I8","MALLOC"}, 00471 {"_MATMUL_C4C","MATMUL"}, 00472 {"_MATMUL_C4C4","MATMUL"}, 00473 {"_MATMUL_C4D","MATMUL"}, 00474 {"_MATMUL_C4I1","MATMUL"}, 00475 {"_MATMUL_C4I2","MATMUL"}, 00476 {"_MATMUL_C4I4","MATMUL"}, 00477 {"_MATMUL_C4J","MATMUL"}, 00478 {"_MATMUL_C4S","MATMUL"}, 00479 {"_MATMUL_C4S4","MATMUL"}, 00480 {"_MATMUL_C4Z","MATMUL"}, 00481 {"_MATMUL_CC","MATMUL"}, 00482 {"_MATMUL_CC4","MATMUL"}, 00483 {"_MATMUL_CD","MATMUL"}, 00484 {"_MATMUL_CI1","MATMUL"}, 00485 {"_MATMUL_CI2","MATMUL"}, 00486 {"_MATMUL_CI4","MATMUL"}, 00487 {"_MATMUL_CJ","MATMUL"}, 00488 {"_MATMUL_CS","MATMUL"}, 00489 {"_MATMUL_CS4","MATMUL"}, 00490 {"_MATMUL_CZ","MATMUL"}, 00491 {"_MATMUL_DC","MATMUL"}, 00492 {"_MATMUL_DC4","MATMUL"}, 00493 {"_MATMUL_DD","MATMUL"}, 00494 {"_MATMUL_DI1","MATMUL"}, 00495 {"_MATMUL_DI2","MATMUL"}, 00496 {"_MATMUL_DI4","MATMUL"}, 00497 {"_MATMUL_DJ","MATMUL"}, 00498 {"_MATMUL_DS","MATMUL"}, 00499 {"_MATMUL_DS4","MATMUL"}, 00500 {"_MATMUL_DZ","MATMUL"}, 00501 {"_MATMUL_I1C","MATMUL"}, 00502 {"_MATMUL_I1C4","MATMUL"}, 00503 {"_MATMUL_I1D","MATMUL"}, 00504 {"_MATMUL_I1I1","MATMUL"}, 00505 {"_MATMUL_I1I2","MATMUL"}, 00506 {"_MATMUL_I1I4","MATMUL"}, 00507 {"_MATMUL_I1J","MATMUL"}, 00508 {"_MATMUL_I1S","MATMUL"}, 00509 {"_MATMUL_I1S4","MATMUL"}, 00510 {"_MATMUL_I1Z","MATMUL"}, 00511 {"_MATMUL_I2C","MATMUL"}, 00512 {"_MATMUL_I2C4","MATMUL"}, 00513 {"_MATMUL_I2D","MATMUL"}, 00514 {"_MATMUL_I2I1","MATMUL"}, 00515 {"_MATMUL_I2I2","MATMUL"}, 00516 {"_MATMUL_I2I4","MATMUL"}, 00517 {"_MATMUL_I2J","MATMUL"}, 00518 {"_MATMUL_I2S","MATMUL"}, 00519 {"_MATMUL_I2S4","MATMUL"}, 00520 {"_MATMUL_I2Z","MATMUL"}, 00521 {"_MATMUL_I4C","MATMUL"}, 00522 {"_MATMUL_I4C4","MATMUL"}, 00523 {"_MATMUL_I4D","MATMUL"}, 00524 {"_MATMUL_I4I1","MATMUL"}, 00525 {"_MATMUL_I4I2","MATMUL"}, 00526 {"_MATMUL_I4I4","MATMUL"}, 00527 {"_MATMUL_I4J","MATMUL"}, 00528 {"_MATMUL_I4S","MATMUL"}, 00529 {"_MATMUL_I4S4","MATMUL"}, 00530 {"_MATMUL_I4Z","MATMUL"}, 00531 {"_MATMUL_JC","MATMUL"}, 00532 {"_MATMUL_JC4","MATMUL"}, 00533 {"_MATMUL_JD","MATMUL"}, 00534 {"_MATMUL_JI1","MATMUL"}, 00535 {"_MATMUL_JI2","MATMUL"}, 00536 {"_MATMUL_JI4","MATMUL"}, 00537 {"_MATMUL_JJ","MATMUL"}, 00538 {"_MATMUL_JS","MATMUL"}, 00539 {"_MATMUL_JS4","MATMUL"}, 00540 {"_MATMUL_JZ","MATMUL"}, 00541 {"_MATMUL_L1L","MATMUL"}, 00542 {"_MATMUL_L1L1","MATMUL"}, 00543 {"_MATMUL_L1L2","MATMUL"}, 00544 {"_MATMUL_L1L4","MATMUL"}, 00545 {"_MATMUL_L2L","MATMUL"}, 00546 {"_MATMUL_L2L1","MATMUL"}, 00547 {"_MATMUL_L2L2","MATMUL"}, 00548 {"_MATMUL_L2L4","MATMUL"}, 00549 {"_MATMUL_L4L","MATMUL"}, 00550 {"_MATMUL_L4L1","MATMUL"}, 00551 {"_MATMUL_L4L2","MATMUL"}, 00552 {"_MATMUL_L4L4","MATMUL"}, 00553 {"_MATMUL_LL","MATMUL"}, 00554 {"_MATMUL_LL1","MATMUL"}, 00555 {"_MATMUL_LL2","MATMUL"}, 00556 {"_MATMUL_LL4","MATMUL"}, 00557 {"_MATMUL_S4C","MATMUL"}, 00558 {"_MATMUL_S4C4","MATMUL"}, 00559 {"_MATMUL_S4D","MATMUL"}, 00560 {"_MATMUL_S4I1","MATMUL"}, 00561 {"_MATMUL_S4I2","MATMUL"}, 00562 {"_MATMUL_S4I4","MATMUL"}, 00563 {"_MATMUL_S4J","MATMUL"}, 00564 {"_MATMUL_S4S","MATMUL"}, 00565 {"_MATMUL_S4S4","MATMUL"}, 00566 {"_MATMUL_S4Z","MATMUL"}, 00567 {"_MATMUL_SC","MATMUL"}, 00568 {"_MATMUL_SC4","MATMUL"}, 00569 {"_MATMUL_SD","MATMUL"}, 00570 {"_MATMUL_SI1","MATMUL"}, 00571 {"_MATMUL_SI2","MATMUL"}, 00572 {"_MATMUL_SI4","MATMUL"}, 00573 {"_MATMUL_SJ","MATMUL"}, 00574 {"_MATMUL_SS","MATMUL"}, 00575 {"_MATMUL_SS4","MATMUL"}, 00576 {"_MATMUL_SZ","MATMUL"}, 00577 {"_MATMUL_ZC","MATMUL"}, 00578 {"_MATMUL_ZC4","MATMUL"}, 00579 {"_MATMUL_ZD","MATMUL"}, 00580 {"_MATMUL_ZI1","MATMUL"}, 00581 {"_MATMUL_ZI2","MATMUL"}, 00582 {"_MATMUL_ZI4","MATMUL"}, 00583 {"_MATMUL_ZJ","MATMUL"}, 00584 {"_MATMUL_ZS","MATMUL"}, 00585 {"_MATMUL_ZS4","MATMUL"}, 00586 {"_MATMUL_ZZ","MATMUL"}, 00587 {"_MAXLOC__D","MAXLOC"}, 00588 {"_MAXLOC__I1","MAXLOC"}, 00589 {"_MAXLOC__I2","MAXLOC"}, 00590 {"_MAXLOC__I4","MAXLOC"}, 00591 {"_MAXLOC__J","MAXLOC"}, 00592 {"_MAXLOC__S","MAXLOC"}, 00593 {"_MAXLOC__S4","MAXLOC"}, 00594 {"_MAXVAL0__D","MAXVAL"}, 00595 {"_MAXVAL0__I1","MAXVAL"}, 00596 {"_MAXVAL0__I2","MAXVAL"}, 00597 {"_MAXVAL0__I4","MAXVAL"}, 00598 {"_MAXVAL0__J","MAXVAL"}, 00599 {"_MAXVAL0__S","MAXVAL"}, 00600 {"_MAXVAL0__S4","MAXVAL"}, 00601 {"_MAXVAL__D","MAXVAL"}, 00602 {"_MAXVAL__I1","MAXVAL"}, 00603 {"_MAXVAL__I2","MAXVAL"}, 00604 {"_MAXVAL__I4","MAXVAL"}, 00605 {"_MAXVAL__J","MAXVAL"}, 00606 {"_MAXVAL__S","MAXVAL"}, 00607 {"_MAXVAL__S4","MAXVAL"}, 00608 {"_MINLOC__D","MINLOC"}, 00609 {"_MINLOC__I1","MINLOC"}, 00610 {"_MINLOC__I2","MINLOC"}, 00611 {"_MINLOC__I4","MINLOC"}, 00612 {"_MINLOC__J","MINLOC"}, 00613 {"_MINLOC__S","MINLOC"}, 00614 {"_MINLOC__S4","MINLOC"}, 00615 {"_MINVAL0__D","MINVAL"}, 00616 {"_MINVAL0__I1","MINVAL"}, 00617 {"_MINVAL0__I2","MINVAL"}, 00618 {"_MINVAL0__I4","MINVAL"}, 00619 {"_MINVAL0__J","MINVAL"}, 00620 {"_MINVAL0__S","MINVAL"}, 00621 {"_MINVAL0__S4","MINVAL"}, 00622 {"_MINVAL__D","MINVAL"}, 00623 {"_MINVAL__I1","MINVAL"}, 00624 {"_MINVAL__I2","MINVAL"}, 00625 {"_MINVAL__I4","MINVAL"}, 00626 {"_MINVAL__J","MINVAL"}, 00627 {"_MINVAL__S","MINVAL"}, 00628 {"_MINVAL__S4","MINVAL"}, 00629 {"_PACK","PACK"}, 00630 {"_PAIR_SYNC","PAIR_SYNC"}, 00631 {"_PROD0__C","PRODUCT"}, 00632 {"_PROD0__C4","PRODUCT"}, 00633 {"_PROD0__D","PRODUCT"}, 00634 {"_PROD0__I1","PRODUCT"}, 00635 {"_PROD0__I2","PRODUCT"}, 00636 {"_PROD0__I4","PRODUCT"}, 00637 {"_PROD0__J","PRODUCT"}, 00638 {"_PROD0__S","PRODUCT"}, 00639 {"_PROD0__S4","PRODUCT"}, 00640 {"_PROD__C","PRODUCT"}, 00641 {"_PROD__C4","PRODUCT"}, 00642 {"_PROD__D","PRODUCT"}, 00643 {"_PROD__I1","PRODUCT"}, 00644 {"_PROD__I2","PRODUCT"}, 00645 {"_PROD__I4","PRODUCT"}, 00646 {"_PROD__J","PRODUCT"}, 00647 {"_PROD__S","PRODUCT"}, 00648 {"_PROD__S4","PRODUCT"}, 00649 {"_PROD__Z","PRODUCT"}, 00650 {"_QSIGN","QSIGN"}, 00651 {"_REPEAT","REPEAT"}, 00652 {"_RESHAPE","RESHAPE"}, 00653 {"_SCAN_4","SCAN"}, 00654 {"_SCAN_8","SCAN"}, 00655 {"_SELECTED_REAL_KIND_4","SELECTED_REAL_KIND"}, 00656 {"_SELECTED_REAL_KIND_8","SELECTED_REAL_KIND"}, 00657 {"_SHAPE","SHAPE"}, 00658 {"_SIZEOF_4","SIZEOF"}, 00659 {"_SIZEOF_8","SIZEOF"}, 00660 {"_SIZE_4","SIZE"}, 00661 {"_SIZE_8","SIZE"}, 00662 {"_SPREAD","SPREAD"}, 00663 {"_SUM0__C","SUM"}, 00664 {"_SUM0__C4","SUM"}, 00665 {"_SUM0__D","SUM"}, 00666 {"_SUM0__I1","SUM"}, 00667 {"_SUM0__I2","SUM"}, 00668 {"_SUM0__I4","SUM"}, 00669 {"_SUM0__J","SUM"}, 00670 {"_SUM0__S","SUM"}, 00671 {"_SUM0__S4","SUM"}, 00672 {"_SUM__C","SUM"}, 00673 {"_SUM__C4","SUM"}, 00674 {"_SUM__D","SUM"}, 00675 {"_SUM__I1","SUM"}, 00676 {"_SUM__I2","SUM"}, 00677 {"_SUM__I4","SUM"}, 00678 {"_SUM__J","SUM"}, 00679 {"_SUM__S","SUM"}, 00680 {"_SUM__S4","SUM"}, 00681 {"_SUM__Z","SUM"}, 00682 {"_SYSTEM_CLOCK_4","SYSTEM_CLOCK"}, 00683 {"_SYSTEM_CLOCK_8","SYSTEM_CLOCK"}, 00684 {"_THIS_IMAGE0","THIS_IMAGE"}, 00685 {"_THIS_IMAGE2","THIS_IMAGE"}, 00686 {"_THIS_IMAGE3","THIS_IMAGE"}, 00687 {"shmem_n_pes","NUM_IMAGES"}, 00688 {"_TIME","TIME"}, 00689 {"_TRANS","TRANSPOSE"}, 00690 {"_TRANSFER","TRANSFER"}, 00691 {"_TRIM","TRIM"}, 00692 {"_UBOUND","UBOUND"}, 00693 {"_UBOUND0_4","UBOUND"}, 00694 {"_UBOUND0_8","UBOUND"}, 00695 {"_UNPACK","UNPACK"} 00696 }; 00697 00698 #define FIELDS_fp(i) (fp_table[i].fp) 00699 #define FIELDS_prev_array_index(i) (fp_table[i].prev_array_index) 00700 #define FIELDS_first_offset(i) (fp_table[i].first_offset) 00701 #define FIELDS_last_offset(i) (fp_table[i].last_offset) 00702 00703 static INT32 FE_Full_Split_Limits_Count = 2; 00704 00705 /* preg / temp used for distribute */ 00706 PREG_det preg_for_distribute; 00707 static ST *st_for_distribute_temp; 00708 00709 BOOL cwh_stab_pu_has_globals; /* Were any global symbols seen in the PU */ 00710 00711 00712 /* strings for default MAIN, used by BE/Cray FE */ 00713 00714 static char * const crayf90_def_main = "main___" ; 00715 static char * const def_main_u = "MAIN__" ; 00716 static char * const def_main = "MAIN_" ; 00717 00718 /* forward references */ 00719 00720 static ST * cwh_stab_earlier_hosted(const char * name); 00721 static void cwh_stab_enter_hosted(ST * st) ; 00722 static void cwh_stab_adjust_name(ST * st) ; 00723 static void cwh_stab_set_linenum(ST *st, INT32 lineno); 00724 static void cwh_stab_formal_ref(ST * st, BOOL host); 00725 static void cwh_stab_find_overlaps(FIELDS fp, INT32 nf); 00726 static BOOL cwh_stab_split_common(ST * c, FIELDS fp_table, INT32 nf) ; 00727 static BOOL need_to_split (INT64 cur_offset,INT64 base_offset, INT64 rel_offset,int delta ); 00728 static void cwh_stab_dump_FIELDS(FIELDS fp_table, INT32 ftom, INT32 to) ; 00729 static void cwh_stab_full_split(ST *c, enum list_name list = l_COMLIST) ; 00730 static void cwh_stab_emit_split(ST * c, FIELDS fp_table, INT32 from, INT32 to); 00731 static ST * cwh_stab_split_ST(ST * c, INT64 low_off, INT64 high_off) ; 00732 static ST * cwh_stab_common_ST(char *name,INT64 size,mUINT16 al); 00733 00734 static ST * cwh_stab_module_ST(char *name,INT64 size,mUINT16 al); 00735 00736 static void cwh_stab_altres_offset(ST *st,BOOL hosted) ; 00737 static void cwh_stab_altres_offset_comp(ST *st,BOOL allF4C4) ; 00738 static ST * cwh_stab_altentry_temp(char * name, BOOL hosted) ; 00739 static void cwh_stab_distrib_pragmas(ST * st); 00740 static void cwh_stab_mk_flds(ST *block,enum list_name list); 00741 static void cwh_stab_emit_list(LIST ** lp, enum list_name list, void (*fp) (ST *, enum list_name)) ; 00742 static void cwh_stab_to_list_of_equivs(ST *st, BOOL hosted) ; 00743 static ST* cwh_stab_earlier_common(char *name_string, BOOL is_dup); 00744 static ST* cwh_stab_seen_common_element(ST *c, INT64 offset,char * name) ; 00745 00746 static PU_IDX cwh_stab_mk_pu(TY_IDX pty, SYMTAB_IDX level); 00747 00748 static INTPTR fei_proc_parent ( char *name_string, 00749 INT32 lineno, 00750 INT32 sym_class, 00751 INT32 unused1, 00752 INT32 num_dum_args, 00753 INT32 parent_stx, 00754 INT32 first_st_idx, 00755 INT32 aux_idx, 00756 TYPE result_type, 00757 INTPTR st_idx, 00758 INT64 flags ); 00759 00760 static INTPTR fei_proc_def ( char *name_string, 00761 INT32 lineno, 00762 INT32 sym_class, 00763 INT32 Class, 00764 INT32 unused1, 00765 INT32 unused2, 00766 INT32 num_dum_args, 00767 INT32 parent_stx, 00768 INT32 first_st_idx, 00769 INT32 aux_idx, 00770 TYPE result_type, 00771 INT32 cmcs_node, 00772 INT32 st_idx, 00773 INT64 flags, 00774 INT32 coarray_concurrent ); 00775 00776 static INTPTR fei_proc_interface ( char *name_string, 00777 INT32 lineno, 00778 INT32 sym_class, 00779 INT32 Class, 00780 INT32 unused1, 00781 INT32 unused2, 00782 INT32 num_dum_args, 00783 INT32 parent_stx, 00784 INT32 first_st_idx, 00785 INT32 aux_idx, 00786 TYPE result_type, 00787 INT32 cmcs_node, 00788 INT32 st_idx, 00789 INT64 flags, 00790 INT32 coarray_concurrent); 00791 00792 00793 static INTPTR fei_proc_imp ( INT32 lineno, 00794 char *name_string, 00795 INT32 unused1, 00796 INT32 unused2, 00797 INT32 sclass, 00798 INT32 Class, 00799 TYPE result_type, 00800 INT64 flags, 00801 INT32 in_interface); 00802 00803 00804 static void cwh_stab_adjust_base_name(ST * st); 00805 00806 static INT32 interface_pu = 0;