Open64 (mfef90, whirl2f, and IR tools)  TAG: version-openad; SVN changeset: 916
cwh_stab.i
Go to the documentation of this file.
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;
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines