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 00036 /* -*-Mode: c++;-*- (Tell emacs to use c++ mode) */ 00037 00038 // These functions are defined to be compatible with the old symbol table 00039 // format. They are defined to ease the transition to the new symbol table. 00040 // Once the transition is over, this file will be removed. 00041 00042 00043 #ifndef symtab_compatible_INCLUDED 00044 #define symtab_compatible_INCLUDED 00045 00046 #define SYMTAB_COMPATIBLE_DEVWARN_LIMIT 2 00047 00048 // access functions for ST 00049 00050 inline STR_IDX 00051 ST_name_idx (const ST* s) { return s->u1.name_idx; } 00052 inline void 00053 Set_ST_name_idx (ST* s, STR_IDX idx) { s->u1.name_idx = idx; } 00054 inline char * 00055 ST_name (const ST* s) { return &Str_Table[ST_name_idx (s)]; } 00056 #define Set_ST_name(s,idx) Set_ST_name_idx(s,idx) 00057 00058 inline TCON_IDX 00059 ST_tcon (const ST* s) { return s->u1.tcon; } 00060 inline void 00061 Set_ST_tcon (ST* s, TCON_IDX tcon) { s->u1.tcon = tcon; } 00062 00063 inline ST_CLASS 00064 ST_sym_class (const ST* s) { return s->sym_class; } 00065 00066 inline ST_CLASS // for compatibility 00067 ST_class (const ST* s) { return ST_sym_class (s); } 00068 00069 inline ST_CLASS // for compatibility 00070 ST_class (const ST& s) { return ST_sym_class (s); } 00071 00072 inline void 00073 Set_ST_class (ST* s, ST_CLASS c) { s->sym_class = c; } 00074 00075 inline ST_SCLASS 00076 ST_sclass (const ST* s) { return s->storage_class; } 00077 00078 inline void 00079 Set_ST_sclass (ST* s, ST_SCLASS sc) { s->storage_class = sc; } 00080 00081 inline ST_EXPORT 00082 ST_export (const ST* s) { return s->export_class; } 00083 inline void 00084 Set_ST_export (ST* s, ST_EXPORT export_class) 00085 { 00086 #ifdef Is_True_On 00087 ST_Verify_Sclass_Export (ST_sclass (s), export_class, s); 00088 #endif 00089 s->export_class = export_class; 00090 } 00091 00092 inline TY_IDX 00093 ST_type (const ST* s) { 00094 #ifdef Is_True_On 00095 switch (s->sym_class) { 00096 default: 00097 Fail_FmtAssertion ("Invalid argument for ST_type ()"); 00098 case CLASS_VAR: 00099 case CLASS_CONST: 00100 case CLASS_PREG: 00101 case CLASS_NAME: 00102 case CLASS_TYPE: 00103 case CLASS_PARAMETER: 00104 return s->u2.type; 00105 case CLASS_FUNC: 00106 Lmt_DevWarn (SYMTAB_COMPATIBLE_DEVWARN_LIMIT, 00107 ("Should use ST_pu_type instead")); 00108 return PU_prototype (Pu_Table[s->u2.pu]); 00109 } 00110 #else 00111 if (s->sym_class == CLASS_FUNC) { 00112 Lmt_DevWarn (SYMTAB_COMPATIBLE_DEVWARN_LIMIT, 00113 ("Should use ST_pu_type instead")); 00114 return PU_prototype (Pu_Table[s->u2.pu]); 00115 } else { 00116 return s->u2.type; 00117 } 00118 #endif // Is_True_On 00119 } 00120 inline void 00121 Set_ST_type (ST* s, TY_IDX t) { 00122 #ifdef Is_True_On 00123 switch (s->sym_class) { 00124 default: 00125 Fail_FmtAssertion ("Invalid argument for ST_type ()"); 00126 case CLASS_VAR: 00127 case CLASS_CONST: 00128 case CLASS_PREG: 00129 case CLASS_NAME: 00130 case CLASS_TYPE: 00131 case CLASS_PARAMETER: 00132 s->u2.type = t; 00133 } 00134 #else 00135 s->u2.type = t; 00136 #endif // Is_True_On 00137 } 00138 00139 inline TY_IDX 00140 ST_pu_type (const ST_IDX s) { 00141 Is_True (St_Table[s].sym_class == CLASS_FUNC, ("Invalid argument for ST_pu")); 00142 return PU_prototype (Pu_Table[ST_pu (St_Table[s])]); 00143 } 00144 00145 inline PU_IDX 00146 ST_pu (const ST* s) { 00147 Is_True (s->sym_class == CLASS_FUNC || 00148 (s->sym_class == CLASS_NAME && 00149 ST_asm_function_st(*s)), 00150 ("Invalid argument for ST_pu")); 00151 return s->u2.pu; 00152 } 00153 inline void 00154 Set_ST_pu (ST* s, PU_IDX pu) 00155 { 00156 Is_True (s->sym_class == CLASS_FUNC || 00157 (s->sym_class == CLASS_NAME && 00158 ST_asm_function_st(*s)), 00159 ("Invalid argument for ST_pu")); 00160 s->u2.pu = pu; 00161 } 00162 00163 inline BLK_IDX 00164 ST_blk (const ST* s) { 00165 Is_True (s->sym_class == CLASS_BLOCK, ("Invalid argument for ST_blk")); 00166 return s->u2.blk; 00167 } 00168 inline void 00169 Set_ST_blk (ST* s, BLK_IDX b) 00170 { 00171 Is_True (s->sym_class == CLASS_BLOCK, ("Invalid argument for ST_blk")); 00172 s->u2.blk = b; 00173 } 00174 00175 inline ST_IDX 00176 ST_st_idx (const ST* s) 00177 { return (s != NULL? s->st_idx : (ST_IDX) 0); } 00178 inline void 00179 Set_ST_st_idx (ST* s, ST_IDX idx) { s->st_idx = idx; } 00180 00181 inline BOOL 00182 ST_is_weak_symbol (const ST* s) { return s->flags & ST_IS_WEAK_SYMBOL;} 00183 inline void 00184 Set_ST_is_weak_symbol (ST* s) { s->flags |= ST_IS_WEAK_SYMBOL; } 00185 inline void 00186 Clear_ST_is_weak_symbol (ST* s) { s->flags &= ~ST_IS_WEAK_SYMBOL; } 00187 00188 inline BOOL 00189 ST_is_split_common (const ST* s) { return s->flags & ST_IS_SPLIT_COMMON;} 00190 inline void 00191 Set_ST_is_split_common (ST* s) { s->flags |= ST_IS_SPLIT_COMMON; } 00192 inline void 00193 Clear_ST_is_split_common (ST* s) { s->flags &= ~ST_IS_SPLIT_COMMON; } 00194 00195 inline ST_IDX 00196 ST_base_idx (const ST* s) 00197 { 00198 if (ST_is_split_common (s)) 00199 // return s->st_idx; 00200 return s->base_idx; 00201 else if (ST_is_weak_symbol (s) && ST_sclass(s) == SCLASS_EXTERN) 00202 return s->st_idx; 00203 else 00204 return s->base_idx; 00205 } 00206 inline void 00207 Set_ST_base_idx (ST* s, ST_IDX base) 00208 { 00209 if (ST_is_split_common (s)) 00210 Lmt_DevWarn (SYMTAB_COMPATIBLE_DEVWARN_LIMIT, 00211 ("Shouldn't set base when split")); 00212 if (ST_is_weak_symbol(s) && ST_sclass(s) == SCLASS_EXTERN) 00213 Lmt_DevWarn (SYMTAB_COMPATIBLE_DEVWARN_LIMIT, 00214 ("Shouldn't set base when weak")); 00215 s->base_idx = base; 00216 } 00217 inline ST* 00218 ST_base (const ST* s) { return &St_Table[ST_base_idx (s)]; } 00219 inline void 00220 Set_ST_base (ST* s, ST* base) { Set_ST_base_idx(s, ST_st_idx(base)); } 00221 00222 inline UINT64 00223 ST_ofst (const ST* s) { return s->offset; } 00224 inline void 00225 Set_ST_ofst (ST* s, UINT64 offset) { s->offset = offset; } 00226 00227 // ST flags 00228 00229 inline BOOL 00230 ST_is_not_used (const ST* s) { return s->flags & ST_IS_NOT_USED;} 00231 inline void 00232 Set_ST_is_not_used (ST* s) { s->flags |= ST_IS_NOT_USED; } 00233 inline void 00234 Clear_ST_is_not_used (ST* s) { s->flags &= ~ST_IS_NOT_USED; } 00235 00236 inline BOOL 00237 ST_is_initialized (const ST* s) { return s->flags & ST_IS_INITIALIZED;} 00238 inline void 00239 Set_ST_is_initialized (ST* s) { s->flags |= ST_IS_INITIALIZED; } 00240 inline void 00241 Clear_ST_is_initialized (ST* s) { s->flags &= ~ST_IS_INITIALIZED; } 00242 00243 inline BOOL 00244 ST_is_return_var (const ST* s) { return s->flags & ST_IS_RETURN_VAR;} 00245 inline void 00246 Set_ST_is_return_var (ST* s) { s->flags |= ST_IS_RETURN_VAR; } 00247 inline void 00248 Clear_ST_is_return_var (ST* s) { s->flags &= ~ST_IS_RETURN_VAR; } 00249 00250 inline BOOL 00251 ST_is_private (const ST* s) { return s->flags & ST_IS_PRIVATE;} 00252 inline void 00253 Set_ST_is_private (ST* s) { s->flags |= ST_IS_PRIVATE; } 00254 inline void 00255 Clear_ST_is_private (ST* s) { s->flags &= ~ST_IS_PRIVATE; } 00256 00257 00258 inline BOOL 00259 ST_is_value_parm (const ST* s) { return s->flags & ST_IS_VALUE_PARM;} 00260 inline void 00261 Set_ST_is_value_parm (ST* s) { s->flags |= ST_IS_VALUE_PARM; } 00262 inline void 00263 Clear_ST_is_value_parm (ST* s) { s->flags &= ~ST_IS_VALUE_PARM; } 00264 00265 inline BOOL 00266 ST_promote_parm (const ST* s) { return s->flags & ST_PROMOTE_PARM;} 00267 inline void 00268 Set_ST_promote_parm (ST* s) { s->flags |= ST_PROMOTE_PARM; } 00269 inline void 00270 Clear_ST_promote_parm (ST* s) { s->flags &= ~ST_PROMOTE_PARM; } 00271 00272 inline BOOL 00273 ST_keep_name_w2f (const ST* s) { return s->flags & ST_KEEP_NAME_W2F;} 00274 inline void 00275 Set_ST_keep_name_w2f (ST* s) { s->flags |= ST_KEEP_NAME_W2F; } 00276 inline void 00277 Clear_ST_keep_name_w2f (ST* s) { s->flags &= ~ST_KEEP_NAME_W2F; } 00278 00279 inline BOOL 00280 ST_is_datapool (const ST* s) { return s->flags & ST_IS_DATAPOOL;} 00281 inline void 00282 Set_ST_is_datapool (ST* s) { s->flags |= ST_IS_DATAPOOL; } 00283 inline void 00284 Clear_ST_is_datapool (ST* s) { s->flags &= ~ST_IS_DATAPOOL; } 00285 00286 inline BOOL 00287 ST_is_reshaped (const ST* s) { return s->flags & ST_IS_RESHAPED;} 00288 inline void 00289 Set_ST_is_reshaped (ST* s) { s->flags |= ST_IS_RESHAPED; } 00290 inline void 00291 Clear_ST_is_reshaped (ST* s) { s->flags &= ~ST_IS_RESHAPED; } 00292 00293 inline BOOL 00294 ST_is_deleted (const ST* s) { return s->flags_ext & ST_IS_DELETED;} 00295 inline void 00296 Set_ST_is_deleted (ST* s) { s->flags_ext |= ST_IS_DELETED; } 00297 inline void 00298 Clear_ST_is_deleted (ST* s) { s->flags_ext &= ~ST_IS_DELETED; } 00299 00300 inline BOOL 00301 ST_emit_symbol (const ST* s) { return s->flags & ST_EMIT_SYMBOL;} 00302 inline void 00303 Set_ST_emit_symbol (ST* s) { s->flags |= ST_EMIT_SYMBOL; } 00304 inline void 00305 Clear_ST_emit_symbol (ST* s) { s->flags &= ~ST_EMIT_SYMBOL; } 00306 00307 inline BOOL 00308 ST_has_nested_ref (const ST* s) { return s->flags & ST_HAS_NESTED_REF;} 00309 inline void 00310 Set_ST_has_nested_ref (ST* s) { s->flags |= ST_HAS_NESTED_REF; } 00311 inline void 00312 Clear_ST_has_nested_ref (ST* s) { s->flags &= ~ST_HAS_NESTED_REF; } 00313 00314 inline BOOL 00315 ST_init_value_zero (const ST* s) { return s->flags & ST_INIT_VALUE_ZERO;} 00316 inline void 00317 Set_ST_init_value_zero (ST* s) { s->flags |= ST_INIT_VALUE_ZERO; } 00318 inline void 00319 Clear_ST_init_value_zero (ST* s) { s->flags &= ~ST_INIT_VALUE_ZERO; } 00320 00321 inline BOOL 00322 ST_gprel (const ST* s) { return s->flags & ST_GPREL;} 00323 inline void 00324 Set_ST_gprel (ST* s) { s->flags |= ST_GPREL; } 00325 inline void 00326 Clear_ST_gprel (ST* s) { s->flags &= ~ST_GPREL; } 00327 00328 inline BOOL 00329 ST_not_gprel (const ST* s) { return s->flags & ST_NOT_GPREL;} 00330 inline void 00331 Set_ST_not_gprel (ST* s) { s->flags |= ST_NOT_GPREL; } 00332 inline void 00333 Clear_ST_not_gprel (ST* s) { s->flags &= ~ST_NOT_GPREL; } 00334 00335 inline BOOL 00336 ST_is_namelist (const ST* s) { return s->flags & ST_IS_NAMELIST;} 00337 inline void 00338 Set_ST_is_namelist (ST* s) { s->flags |= ST_IS_NAMELIST; } 00339 inline void 00340 Clear_ST_is_namelist (ST* s) { s->flags &= ~ST_IS_NAMELIST; } 00341 00342 inline BOOL 00343 ST_is_f90_target (const ST* s) { return s->flags & ST_IS_F90_TARGET;} 00344 inline void 00345 Set_ST_is_f90_target (ST* s) { s->flags |= ST_IS_F90_TARGET; } 00346 inline void 00347 Clear_ST_is_f90_target (ST* s) { s->flags &= ~ST_IS_F90_TARGET; } 00348 00349 inline BOOL 00350 ST_is_my_pointer (const ST* s) { return s->flags_ext & ST_IS_POINTER;} 00351 inline void 00352 Set_ST_is_my_pointer (ST* s) { s->flags_ext |= ST_IS_POINTER; } 00353 inline void 00354 Clear_ST_is_my_pointer (ST* s) { s->flags_ext &= ~ST_IS_POINTER; } 00355 00356 inline BOOL 00357 ST_is_in_module (const ST* s) { return s->flags_ext & ST_IS_IN_MODULE;} 00358 inline void 00359 Set_ST_is_in_module (ST* s) { s->flags_ext |= ST_IS_IN_MODULE; } 00360 inline void 00361 Clear_ST_is_in_module (ST* s) { s->flags_ext &= ~ST_IS_IN_MODULE; } 00362 00363 inline BOOL 00364 ST_is_block_data (const ST* s) { return s->flags_ext & ST_IS_BLOCK_DATA;} 00365 inline void 00366 Set_ST_is_block_data (ST* s) { s->flags_ext |= ST_IS_BLOCK_DATA; } 00367 inline void 00368 Clear_ST_is_block_data (ST* s) { s->flags_ext &= ~ST_IS_BLOCK_DATA; } 00369 00370 00371 inline BOOL 00372 ST_is_external (const ST* s) { return s->flags_ext & ST_IS_EXTERNAL;} 00373 inline void 00374 Set_ST_is_external (ST* s) { s->flags_ext |= ST_IS_EXTERNAL; } 00375 inline void 00376 Clear_ST_is_external (ST* s) { s->flags_ext &= ~ST_IS_EXTERNAL; } 00377 00378 inline BOOL 00379 ST_is_coarray_concurrent (const ST* s) { return s->flags_ext & ST_IS_COARRAY_CONCURRENT;} 00380 inline void 00381 Set_ST_is_coarray_concurrent (ST* s) { s->flags_ext |= ST_IS_COARRAY_CONCURRENT; } 00382 inline void 00383 Clear_ST_is_coarray_concurrent (ST* s) { s->flags_ext &= ~ST_IS_COARRAY_CONCURRENT; } 00384 00385 inline BOOL 00386 ST_is_M_imported (const ST* s) { return s->flags_ext & ST_IS_M_IMPORTED;} 00387 inline void 00388 Set_ST_is_M_imported (ST* s) { s->flags_ext |= ST_IS_M_IMPORTED; } 00389 inline void 00390 Clear_ST_is_M_imported (ST* s) { s->flags_ext &= ~ST_IS_M_IMPORTED; } 00391 00392 00393 inline BOOL 00394 ST_is_allocatable (const ST* s) { return s->flags_ext & ST_IS_ALLOCATABLE;} 00395 inline void 00396 Set_ST_is_allocatable (ST* s) { s->flags_ext |= ST_IS_ALLOCATABLE; } 00397 inline void 00398 Clear_ST_is_allocatable (ST* s) { s->flags_ext &= ~ST_IS_ALLOCATABLE; } 00399 00400 00401 00402 inline BOOL 00403 ST_declared_static (const ST* s) { return s->flags & ST_DECLARED_STATIC;} 00404 inline void 00405 Set_ST_declared_static (ST* s) { s->flags |= ST_DECLARED_STATIC; } 00406 inline void 00407 Clear_ST_declared_static (ST* s) { s->flags &= ~ST_DECLARED_STATIC; } 00408 00409 inline BOOL 00410 ST_is_equivalenced (const ST* s) { return s->flags & ST_IS_EQUIVALENCED;} 00411 inline void 00412 Set_ST_is_equivalenced (ST* s) { s->flags |= ST_IS_EQUIVALENCED; } 00413 inline void 00414 Clear_ST_is_equivalenced (ST* s) { s->flags &= ~ST_IS_EQUIVALENCED; } 00415 00416 inline BOOL 00417 ST_is_fill_align (const ST* s) { return s->flags & ST_IS_FILL_ALIGN;} 00418 inline void 00419 Set_ST_is_fill_align (ST* s) { s->flags |= ST_IS_FILL_ALIGN; } 00420 inline void 00421 Clear_ST_is_fill_align (ST* s) { s->flags &= ~ST_IS_FILL_ALIGN; } 00422 00423 inline BOOL 00424 ST_is_optional_argument (const ST* s) { return s->flags & ST_IS_OPTIONAL_ARGUMENT;} 00425 inline void 00426 Set_ST_is_optional_argument (ST* s) { s->flags |= ST_IS_OPTIONAL_ARGUMENT; } 00427 inline void 00428 Clear_ST_is_optional_argument (ST* s) { s->flags &= ~ST_IS_OPTIONAL_ARGUMENT; } 00429 00430 inline BOOL 00431 ST_is_intent_in_argument (const ST* s) { return s->flags_ext & ST_IS_INTENT_IN_ARGUMENT;} 00432 inline void 00433 Set_ST_is_intent_in_argument (ST* s) { s->flags_ext |= ST_IS_INTENT_IN_ARGUMENT; } 00434 inline void 00435 Clear_ST_is_intent_in_argument (ST* s) { s->flags_ext &= ~ST_IS_INTENT_IN_ARGUMENT; } 00436 00437 inline BOOL 00438 ST_is_intent_out_argument (const ST* s) { return s->flags_ext & ST_IS_INTENT_OUT_ARGUMENT;} 00439 inline void 00440 Set_ST_is_intent_out_argument (ST* s) { s->flags_ext |= ST_IS_INTENT_OUT_ARGUMENT; } 00441 inline void 00442 Clear_ST_is_intent_out_argument (ST* s) { s->flags_ext &= ~ST_IS_INTENT_OUT_ARGUMENT; } 00443 00444 inline BOOL 00445 ST_is_assign_interface (const ST* s) { return s->flags_ext & ST_IS_ASSIGN_INTERFACE;} 00446 inline void 00447 Set_ST_is_assign_interface (ST* s) { s->flags_ext |= ST_IS_ASSIGN_INTERFACE; } 00448 inline void 00449 Clear_ST_is_assign_interface (ST* s) { s->flags_ext &= ~ST_IS_ASSIGN_INTERFACE; } 00450 00451 inline BOOL 00452 ST_is_operator_interface (const ST* s) { return s->flags_ext & ST_IS_OPERATOR_INTERFACE;} 00453 inline void 00454 Set_ST_is_operator_interface (ST* s) { s->flags_ext |= ST_IS_OPERATOR_INTERFACE; } 00455 inline void 00456 Clear_ST_is_operator_interface (ST* s) { s->flags_ext &= ~ST_IS_OPERATOR_INTERFACE; } 00457 00458 inline BOOL 00459 ST_is_u_operator_interface (const ST* s) { return s->flags_ext & ST_IS_U_OPERATOR_INTERFACE;} 00460 inline void 00461 Set_ST_is_u_operator_interface (ST* s) { s->flags_ext |= ST_IS_U_OPERATOR_INTERFACE; } 00462 inline void 00463 Clear_ST_is_u_operator_interface (ST* s) { s->flags_ext &= ~ST_IS_U_OPERATOR_INTERFACE; } 00464 00465 inline BOOL 00466 ST_is_parameter (const ST* s) { return s->flags_ext & ST_IS_PARAMETER;} 00467 inline void 00468 Set_ST_is_parameter (ST* s) { s->flags_ext |= ST_IS_PARAMETER; } 00469 inline void 00470 Clear_ST_is_parameter (ST* s) { s->flags_ext &= ~ST_IS_PARAMETER; } 00471 00472 inline BOOL 00473 ST_keep_in_openad(const ST* s) { return s->flags_ext & ST_KEEP_IN_OPENAD;} 00474 inline void 00475 Set_ST_keep_in_openad(ST* s) { s->flags_ext |= ST_KEEP_IN_OPENAD; } 00476 inline void 00477 Clear_ST_keep_in_openad(ST* s) { s->flags_ext &= ~ST_KEEP_IN_OPENAD; } 00478 00479 inline BOOL 00480 ST_is_temp_var (const ST* s) { return s->flags & ST_IS_TEMP_VAR;} 00481 inline void 00482 Set_ST_is_temp_var (ST* s) { s->flags |= ST_IS_TEMP_VAR; } 00483 inline void 00484 Clear_ST_is_temp_var (ST* s) { s->flags &= ~ST_IS_TEMP_VAR; } 00485 00486 inline BOOL 00487 ST_is_const_var (const ST* s) { return s->flags & ST_IS_CONST_VAR;} 00488 inline void 00489 Set_ST_is_const_var (ST* s) { s->flags |= ST_IS_CONST_VAR; } 00490 inline void 00491 Clear_ST_is_const_var (ST* s) { s->flags &= ~ST_IS_CONST_VAR; } 00492 00493 inline BOOL 00494 ST_addr_saved (const ST* s) { return s->flags & ST_ADDR_SAVED;} 00495 inline void 00496 Set_ST_addr_saved (ST* s) { s->flags |= ST_ADDR_SAVED; } 00497 inline void 00498 Clear_ST_addr_saved (ST* s) { s->flags &= ~ST_ADDR_SAVED; } 00499 00500 inline BOOL 00501 ST_addr_passed (const ST* s) { return s->flags & ST_ADDR_PASSED;} 00502 inline void 00503 Set_ST_addr_passed (ST* s) { s->flags |= ST_ADDR_PASSED; } 00504 inline void 00505 Clear_ST_addr_passed (ST* s) { s->flags &= ~ST_ADDR_PASSED; } 00506 00507 // Please stop using the following functions (*ST_addr_not_*). They 00508 // are going away *soon*! 00509 inline BOOL 00510 ST_addr_not_saved(const ST &s) { return !(s.flags & ST_ADDR_SAVED); } 00511 inline void 00512 Set_ST_addr_not_saved(ST &s) { s.flags &= ~ST_ADDR_SAVED; } 00513 inline void 00514 Clear_ST_addr_not_saved(ST &s) { s.flags |= ST_ADDR_SAVED; } 00515 00516 inline BOOL 00517 ST_addr_not_passed(const ST &s) { return !(s.flags & ST_ADDR_PASSED); } 00518 inline void 00519 Set_ST_addr_not_passed(ST &s) { s.flags &= ~ST_ADDR_PASSED; } 00520 inline void 00521 Clear_ST_addr_not_passed(ST &s) { s.flags |= ST_ADDR_PASSED; } 00522 00523 inline BOOL 00524 ST_addr_not_saved (const ST* s) { return !(s->flags & ST_ADDR_SAVED); } 00525 inline void 00526 Set_ST_addr_not_saved (ST* s) { s->flags &= ~ST_ADDR_SAVED; } 00527 inline void 00528 Clear_ST_addr_not_saved (ST* s) { s->flags |= ST_ADDR_SAVED; } 00529 00530 inline BOOL 00531 ST_addr_not_passed (const ST* s) { return !(s->flags & ST_ADDR_PASSED);} 00532 inline void 00533 Set_ST_addr_not_passed (ST* s) { s->flags &= ~ST_ADDR_PASSED; } 00534 inline void 00535 Clear_ST_addr_not_passed (ST* s) { s->flags |= ST_ADDR_PASSED; } 00536 00537 inline BOOL 00538 ST_is_thread_private (const ST* s) { return s->flags & ST_IS_THREAD_PRIVATE;} 00539 inline void 00540 Set_ST_is_thread_private (ST* s) { s->flags |= ST_IS_THREAD_PRIVATE; } 00541 inline void 00542 Clear_ST_is_thread_private (ST* s) { s->flags &= ~ST_IS_THREAD_PRIVATE; } 00543 00544 inline BOOL 00545 ST_pt_to_unique_mem (const ST* s) { return s->flags & ST_PT_TO_UNIQUE_MEM;} 00546 inline void 00547 Set_ST_pt_to_unique_mem (ST* s) { s->flags |= ST_PT_TO_UNIQUE_MEM; } 00548 inline void 00549 Clear_ST_pt_to_unique_mem (ST* s) { s->flags &= ~ST_PT_TO_UNIQUE_MEM; } 00550 00551 inline BOOL 00552 ST_pt_to_compiler_generated_mem (const ST* s) 00553 { return s->flags & ST_PT_TO_COMPILER_GENERATED_MEM;} 00554 inline void 00555 Set_ST_pt_to_compiler_generated_mem (ST* s) 00556 { s->flags |= ST_PT_TO_COMPILER_GENERATED_MEM; } 00557 inline void 00558 Clear_ST_pt_to_compiler_generated_mem (ST* s) 00559 { s->flags &= ~ST_PT_TO_COMPILER_GENERATED_MEM; } 00560 00561 inline BOOL 00562 ST_assigned_to_dedicated_preg (const ST* s) 00563 { return s->flags & ST_ASSIGNED_TO_DEDICATED_PREG;} 00564 inline void 00565 Set_ST_assigned_to_dedicated_preg (ST* s) 00566 { s->flags |= ST_ASSIGNED_TO_DEDICATED_PREG; } 00567 inline void 00568 Clear_ST_assigned_to_dedicated_preg (ST* s) 00569 { s->flags &= ~ST_ASSIGNED_TO_DEDICATED_PREG; } 00570 00571 inline BOOL 00572 ST_addr_taken (const ST* s) 00573 { 00574 return ST_addr_saved(s) || ST_addr_passed(s); 00575 } 00576 00577 inline ST* 00578 ST_full (const ST* s) { 00579 FmtAssert (ST_is_split_common (s), ("Expecting a split common")); 00580 return &St_Table[s->base_idx]; 00581 } 00582 inline ST* 00583 ST_strong (const ST* s) { 00584 FmtAssert (ST_is_weak_symbol (s), ("Expecting a weak symbol")); 00585 return &St_Table[s->base_idx]; 00586 } 00587 00588 inline TCON& 00589 STC_val (const ST* s) { return Tcon_Table[ST_tcon (s)]; } 00590 00591 inline void 00592 Print_ST (FILE *f, const ST* st, BOOL) { st->Print (f); } 00593 00594 // TY 00595 00596 inline UINT 00597 TY_id (TY_IDX ty) { return TY_IDX_index (ty); } 00598 00599 inline FLD_HANDLE 00600 TY_flist (const TY& ty) { return TY_fld (ty); } 00601 00602 // 00603 // TY flags 00604 // 00605 00606 // TY pu_flags 00607 00608 inline void Print_TY (FILE* f, TY_IDX tyi) { 00609 Ty_Table[tyi].Print (f); 00610 } 00611 00612 // 00613 // TYLIST 00614 // 00615 00616 inline TY_IDX 00617 TYLIST_item (const TYLIST_IDX tli) { return TYLIST_type(tli); } 00618 inline TYLIST_IDX 00619 TYLIST_next (const TYLIST_IDX tli) { return tli+1; } 00620 00621 // 00622 // FLD 00623 // 00624 00625 inline FLD_HANDLE 00626 FLD_next (FLD_HANDLE f) 00627 { 00628 if (FLD_last_field (f)) 00629 return FLD_HANDLE(); 00630 else 00631 return FLD_HANDLE (f.Idx() + 1); 00632 } 00633 00634 00635 // 00636 // TY_AR 00637 // 00638 00639 inline BOOL 00640 TY_AR_const_lbnd (const TY& ty, INT32 i) 00641 { 00642 return ARB_const_lbnd (TY_arb(ty)[i]); 00643 } 00644 00645 inline void 00646 Set_TY_AR_const_lbnd (const TY& ty, INT32 i) 00647 { 00648 Set_ARB_const_lbnd (TY_arb(ty)[i]); 00649 } 00650 00651 inline void 00652 Clear_TY_AR_const_lbnd (const TY& ty, INT32 i) 00653 { 00654 Clear_ARB_const_lbnd (TY_arb(ty)[i]); 00655 } 00656 00657 inline BOOL 00658 TY_AR_const_ubnd (const TY& ty, INT32 i) 00659 { 00660 return ARB_const_ubnd(TY_arb(ty)[i]); 00661 } 00662 00663 inline void 00664 Set_TY_AR_const_ubnd (const TY& ty, INT32 i) 00665 { 00666 Set_ARB_const_ubnd (TY_arb(ty)[i]); 00667 } 00668 00669 inline void 00670 Clear_TY_AR_const_ubnd (const TY& ty, INT32 i) 00671 { 00672 Clear_ARB_const_ubnd (TY_arb(ty)[i]); 00673 } 00674 00675 inline BOOL 00676 TY_AR_const_stride (const TY& ty, INT32 i) 00677 { 00678 return ARB_const_stride(TY_arb(ty)[i]); 00679 } 00680 00681 inline void 00682 Set_TY_AR_const_stride (const TY& ty, INT32 i) 00683 { 00684 Set_ARB_const_stride (TY_arb(ty)[i]); 00685 } 00686 00687 inline void 00688 Clear_TY_AR_const_stride (const TY& ty, INT32 i) 00689 { 00690 Clear_ARB_const_stride (TY_arb(ty)[i]); 00691 } 00692 00693 inline BOOL 00694 TY_AR_empty_lbnd (const TY& ty, INT32 i) 00695 { 00696 return ARB_empty_lbnd (TY_arb(ty)[i]); 00697 } 00698 00699 inline void 00700 Set_TY_AR_empty_lbnd (const TY& ty, INT32 i) 00701 { 00702 Set_ARB_empty_lbnd (TY_arb(ty)[i]); 00703 } 00704 00705 inline void 00706 Clear_TY_AR_empty_lbnd (const TY& ty, INT32 i) 00707 { 00708 Clear_ARB_const_lbnd (TY_arb(ty)[i]); 00709 } 00710 00711 inline BOOL 00712 TY_AR_empty_ubnd (const TY& ty, INT32 i) 00713 { 00714 return ARB_empty_ubnd(TY_arb(ty)[i]); 00715 } 00716 00717 inline void 00718 Set_TY_AR_empty_ubnd (const TY& ty, INT32 i) 00719 { 00720 Set_ARB_empty_ubnd (TY_arb(ty)[i]); 00721 } 00722 00723 inline void 00724 Clear_TY_AR_empty_ubnd (const TY& ty, INT32 i) 00725 { 00726 Clear_ARB_empty_ubnd (TY_arb(ty)[i]); 00727 } 00728 00729 inline BOOL 00730 TY_AR_star_ubnd (const TY& ty, INT32 i) 00731 { 00732 return ARB_star_ubnd(TY_arb(ty)[i]); 00733 } 00734 00735 inline void 00736 Set_TY_AR_star_ubnd (const TY& ty, INT32 i) 00737 { 00738 Set_ARB_star_ubnd (TY_arb(ty)[i]); 00739 } 00740 00741 inline void 00742 Clear_TY_AR_star_ubnd (const TY& ty, INT32 i) 00743 { 00744 Clear_ARB_star_ubnd (TY_arb(ty)[i]); 00745 } 00746 inline BOOL 00747 TY_AR_empty_stride (const TY& ty, INT32 i) 00748 { 00749 return ARB_empty_stride(TY_arb(ty)[i]); 00750 } 00751 00752 inline void 00753 Set_TY_AR_empty_stride (const TY& ty, INT32 i) 00754 { 00755 Set_ARB_empty_stride (TY_arb(ty)[i]); 00756 } 00757 00758 inline void 00759 Clear_TY_AR_empty_stride (const TY& ty, INT32 i) 00760 { 00761 Clear_ARB_empty_stride (TY_arb(ty)[i]); 00762 } 00763 00764 00765 00766 inline BOOL 00767 TY_AR_last_dimen (const TY& ty, INT32 i) 00768 { 00769 return ARB_last_dimen(TY_arb(ty)[i]); 00770 } 00771 00772 inline INT64 00773 TY_AR_lbnd_val (const TY& ty, INT32 i) 00774 { 00775 return ARB_lbnd_val(TY_arb(ty)[i]); 00776 } 00777 00778 inline void 00779 Set_TY_AR_lbnd_val (const TY& ty, INT32 i, INT64 v) 00780 { 00781 Set_ARB_lbnd_val (TY_arb(ty)[i], v); 00782 } 00783 00784 inline ST_IDX 00785 TY_AR_lbnd_var (const TY& ty, INT32 i) 00786 { 00787 return ARB_lbnd_var(TY_arb(ty)[i]); 00788 } 00789 00790 inline void 00791 Set_TY_AR_lbnd_var (const TY& ty, INT32 i, ST_IDX s) 00792 { 00793 Set_ARB_lbnd_var (TY_arb(ty)[i], s); 00794 } 00795 00796 inline INT64 00797 TY_AR_ubnd_val (const TY& ty, INT32 i) 00798 { 00799 return ARB_ubnd_val(TY_arb(ty)[i]); 00800 } 00801 00802 inline void 00803 Set_TY_AR_ubnd_val (const TY& ty, INT32 i, INT64 v) 00804 { 00805 Set_ARB_ubnd_val (TY_arb(ty)[i], v); 00806 } 00807 00808 inline ST_IDX 00809 TY_AR_ubnd_var (const TY& ty, INT32 i) 00810 { 00811 return ARB_ubnd_var(TY_arb(ty)[i]); 00812 } 00813 00814 inline void 00815 Set_TY_AR_ubnd_var (const TY& ty, INT32 i, ST_IDX s) 00816 { 00817 Set_ARB_ubnd_var (TY_arb(ty)[i], s); 00818 } 00819 00820 inline INT64 00821 TY_AR_stride_val (const TY& ty, INT32 i) 00822 { 00823 return ARB_stride_val(TY_arb(ty)[i]); 00824 } 00825 00826 inline void 00827 Set_TY_AR_stride_val (const TY& ty, INT32 i, INT64 v) 00828 { 00829 Set_ARB_stride_val (TY_arb(ty)[i], v); 00830 } 00831 00832 inline ST_IDX 00833 TY_AR_stride_var (const TY& ty, INT32 i) 00834 { 00835 return ARB_stride_var(TY_arb(ty)[i]); 00836 } 00837 00838 inline void 00839 Set_TY_AR_stride_var (const TY& ty, INT32 i, ST_IDX s) 00840 { 00841 Set_ARB_stride_var (TY_arb(ty)[i], s); 00842 } 00843 00844 inline TY_IDX 00845 TY_AR_etype (const TY& ty) { return TY_etype (ty); } 00846 00847 inline INT32 00848 TY_AR_ndims (const TY& ty) 00849 { 00850 return ARB_dimension (TY_arb (ty)); 00851 } 00852 00853 00854 // TY_AR with TY_IDX 00855 00856 inline BOOL 00857 TY_AR_const_lbnd (const TY_IDX ty_idx, INT32 i) 00858 { 00859 return TY_AR_const_lbnd (Ty_Table[ty_idx], i); 00860 } 00861 00862 inline void 00863 Set_TY_AR_const_lbnd (const TY_IDX ty_idx, INT32 i) 00864 { 00865 Set_TY_AR_const_lbnd (Ty_Table[ty_idx], i); 00866 } 00867 00868 inline void 00869 Clear_TY_AR_const_lbnd (const TY_IDX ty_idx, INT32 i) 00870 { 00871 Clear_TY_AR_const_lbnd (Ty_Table[ty_idx], i); 00872 } 00873 00874 inline BOOL 00875 TY_AR_const_ubnd (const TY_IDX ty_idx, INT32 i) 00876 { 00877 return TY_AR_const_ubnd (Ty_Table[ty_idx], i); 00878 } 00879 00880 inline void 00881 Set_TY_AR_const_ubnd (const TY_IDX ty_idx, INT32 i) 00882 { 00883 Set_TY_AR_const_ubnd (Ty_Table[ty_idx], i); 00884 } 00885 00886 inline void 00887 Clear_TY_AR_const_ubnd (const TY_IDX ty_idx, INT32 i) 00888 { 00889 Clear_TY_AR_const_ubnd (Ty_Table[ty_idx], i); 00890 } 00891 00892 inline BOOL 00893 TY_AR_const_stride (const TY_IDX ty_idx, INT32 i) 00894 { 00895 return TY_AR_const_stride(Ty_Table[ty_idx], i); 00896 } 00897 00898 inline void 00899 Set_TY_AR_const_stride (const TY_IDX ty_idx, INT32 i) 00900 { 00901 Set_TY_AR_const_stride (Ty_Table[ty_idx], i); 00902 } 00903 00904 inline void 00905 Clear_TY_AR_const_stride (const TY_IDX ty_idx, INT32 i) 00906 { 00907 Clear_TY_AR_const_stride (Ty_Table[ty_idx], i); 00908 } 00909 00910 inline BOOL 00911 TY_AR_last_dimen (const TY_IDX ty_idx, INT32 i) 00912 { 00913 return TY_AR_last_dimen(Ty_Table[ty_idx], i); 00914 } 00915 00916 inline INT64 00917 TY_AR_lbnd_val (const TY_IDX ty_idx, INT32 i) 00918 { 00919 return TY_AR_lbnd_val(Ty_Table[ty_idx], i); 00920 } 00921 00922 inline void 00923 Set_TY_AR_lbnd_val (const TY_IDX ty_idx, INT32 i, INT64 v) 00924 { 00925 Set_TY_AR_lbnd_val (Ty_Table[ty_idx], i, v); 00926 } 00927 00928 inline ST_IDX 00929 TY_AR_lbnd_var (const TY_IDX ty_idx, INT32 i) 00930 { 00931 return TY_AR_lbnd_var(Ty_Table[ty_idx], i); 00932 } 00933 00934 inline void 00935 Set_TY_AR_lbnd_var (const TY_IDX ty_idx, INT32 i, ST_IDX s) 00936 { 00937 Set_TY_AR_lbnd_var (Ty_Table[ty_idx], i, s); 00938 } 00939 00940 inline INT64 00941 TY_AR_ubnd_val (const TY_IDX ty_idx, INT32 i) 00942 { 00943 return TY_AR_ubnd_val(Ty_Table[ty_idx], i); 00944 } 00945 00946 inline void 00947 Set_TY_AR_ubnd_val (const TY_IDX ty_idx, INT32 i, INT64 v) 00948 { 00949 Set_TY_AR_ubnd_val (Ty_Table[ty_idx], i, v); 00950 } 00951 00952 inline ST_IDX 00953 TY_AR_ubnd_var (const TY_IDX ty_idx, INT32 i) 00954 { 00955 return TY_AR_ubnd_var(Ty_Table[ty_idx], i); 00956 } 00957 00958 inline void 00959 Set_TY_AR_ubnd_var (const TY_IDX ty_idx, INT32 i, ST_IDX s) 00960 { 00961 Set_TY_AR_ubnd_var (Ty_Table[ty_idx], i, s); 00962 } 00963 00964 inline INT64 00965 TY_AR_stride_val (const TY_IDX ty_idx, INT32 i) 00966 { 00967 return TY_AR_stride_val(Ty_Table[ty_idx], i); 00968 } 00969 00970 inline void 00971 Set_TY_AR_stride_val (const TY_IDX ty_idx, INT32 i, INT64 v) 00972 { 00973 Set_TY_AR_stride_val (Ty_Table[ty_idx], i, v); 00974 } 00975 00976 inline ST_IDX 00977 TY_AR_stride_var (const TY_IDX ty_idx, INT32 i) 00978 { 00979 return TY_AR_stride_var(Ty_Table[ty_idx], i); 00980 } 00981 00982 inline void 00983 Set_TY_AR_stride_var (const TY_IDX ty_idx, INT32 i, ST_IDX s) 00984 { 00985 Set_TY_AR_stride_var (Ty_Table[ty_idx], i, s); 00986 } 00987 00988 inline TY_IDX 00989 TY_AR_etype (const TY_IDX ty_idx) { return TY_AR_etype (Ty_Table[ty_idx]); } 00990 00991 inline INT32 00992 TY_AR_ndims (const TY_IDX ty_idx) 00993 { 00994 return ARB_dimension (TY_arb (Ty_Table[ty_idx])); 00995 } 00996 00997 // PU 00998 00999 inline SYMTAB_IDX 01000 PU_lexical_level (const PU_IDX pui) { return Pu_Table[pui].lexical_level; } 01001 01002 inline BOOL 01003 PU_has_exc_scopes (const PU_IDX pui) { return Pu_Table[pui].flags & PU_HAS_EXC_SCOPES; } 01004 01005 inline BOOL 01006 PU_in_elf_section (const PU_IDX pui) { return Pu_Table[pui].flags & PU_IN_ELF_SECTION; } 01007 01008 inline BOOL 01009 PU_is_mainpu (const PU_IDX pui) { return Pu_Table[pui].flags & PU_IS_MAINPU; } 01010 01011 inline UINT64 01012 PU_src_lang (const PU_IDX pui) { return Pu_Table[pui].src_lang; } 01013 01014 // decrement the symtab/scope level 01015 #define SYMTAB_parent(s) (s-1) 01016 01017 // LABEL 01018 01019 inline STR_IDX 01020 LABEL_name_idx (const LABEL_IDX idx) { return Label_Table[idx].name_idx; } 01021 01022 #define Set_LABEL_kind(l,k) Set_LABEL_KIND(l,k) 01023 01024 inline BOOL 01025 LABEL_begin_eh_range (const LABEL_IDX lbi) 01026 { 01027 return (LABEL_kind(Label_Table[lbi]) == LKIND_BEGIN_EH_RANGE); 01028 } 01029 inline void 01030 Set_LABEL_begin_eh_range (LABEL_IDX lbi) 01031 { 01032 Set_LABEL_kind(Label_Table[lbi], LKIND_BEGIN_EH_RANGE); 01033 } 01034 inline BOOL 01035 LABEL_end_eh_range (const LABEL_IDX lbi) 01036 { 01037 return (LABEL_kind(Label_Table[lbi]) == LKIND_END_EH_RANGE); 01038 } 01039 inline void 01040 Set_LABEL_end_eh_range (LABEL_IDX lbi) 01041 { 01042 Set_LABEL_kind(Label_Table[lbi], LKIND_END_EH_RANGE); 01043 } 01044 inline BOOL 01045 LABEL_target_of_goto_outer_block (const LABEL_IDX lbi) 01046 { 01047 return (LABEL_target_of_goto_outer_block(Label_Table[lbi])); 01048 } 01049 inline void 01050 Set_LABEL_target_of_goto_outer_block (const LABEL_IDX lbi) 01051 { 01052 Set_LABEL_target_of_goto_outer_block(Label_Table[lbi]); 01053 } 01054 inline void 01055 Clear_LABEL_target_of_goto_outer_block (const LABEL_IDX lbi) 01056 { 01057 Clear_LABEL_target_of_goto_outer_block(Label_Table[lbi]); 01058 } 01059 inline BOOL 01060 LABEL_addr_saved (const LABEL_IDX lbi) 01061 { 01062 return (LABEL_addr_saved(Label_Table[lbi])); 01063 } 01064 inline void 01065 Set_LABEL_addr_saved (const LABEL_IDX lbi) 01066 { 01067 Set_LABEL_addr_saved(Label_Table[lbi]); 01068 } 01069 inline void 01070 Clear_LABEL_addr_saved (const LABEL_IDX lbi) 01071 { 01072 Clear_LABEL_addr_saved(Label_Table[lbi]); 01073 } 01074 inline BOOL 01075 LABEL_addr_passed (const LABEL_IDX lbi) 01076 { 01077 return (LABEL_addr_passed(Label_Table[lbi])); 01078 } 01079 inline void 01080 Set_LABEL_addr_passed (const LABEL_IDX lbi) 01081 { 01082 Set_LABEL_addr_passed(Label_Table[lbi]); 01083 } 01084 inline void 01085 Clear_LABEL_addr_passed (const LABEL_IDX lbi) 01086 { 01087 Clear_LABEL_addr_passed(Label_Table[lbi]); 01088 } 01089 01090 // PREG 01091 /* 01092 inline void 01093 Set_Preg_Name(PREG_NUM preg_num, const char *const name) 01094 { 01095 Is_True(preg_num > Last_Dedicated_Preg_Offset, 01096 ("Set_Preg_Name: Cannot set name of dedicated PREG")); 01097 Set_PREG_name(Preg_Table[preg_num - Last_Dedicated_Preg_Offset], name); 01098 } 01099 */ 01100 #endif // symtab_compatible_INCLUDED