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 #ifndef symtab_INCLUDED
00043 #define symtab_INCLUDED
00044
00045
00046
00047
00048 #include <ext/slist>
00049
00050 #ifndef segmented_array_INCLUDED
00051 #include "segmented_array.h"
00052 #endif
00053
00054 #ifndef cmplr_segmented_array_INCLUDED
00055 #include "cmplr_segmented_array.h"
00056 #endif
00057
00058 #ifndef symtab_idx_INCLUDED
00059 #include "symtab_idx.h"
00060 #endif
00061
00062 #ifndef mtypes_INCLUDED
00063 #include "mtypes.h"
00064 #endif
00065
00066 #ifndef targ_const_INCLUDED
00067 #include "targ_const.h"
00068 #endif
00069
00070 #ifndef strtab_INCLUDED
00071 #include "strtab.h"
00072 #endif
00073
00074 #ifndef irbdata_defs_INCLUDED
00075 #include "irbdata_defs.h"
00076 #endif
00077
00078 #include "symtab_defs.h"
00079 #include "symtab_verify.h"
00080 #include "symtab_access.h"
00081 #include "symtab_utils.h"
00082 #include "symtab_compatible.h"
00083
00084
00085
00086
00087
00088
00089
00090 inline ST*
00091 New_ST (SYMTAB_IDX level)
00092 {
00093 UINT idx;
00094 ST& s = Scope_tab[level].st_tab->New_entry (idx);
00095
00096
00097 memset(&s, 0, sizeof(ST));
00098 Set_ST_st_idx (s, make_ST_IDX (idx, level));
00099 return &s;
00100 }
00101
00102 inline ST *
00103 New_ST () { return New_ST (CURRENT_SYMTAB); }
00104
00105
00106 inline void
00107 ST_Init (ST* st, STR_IDX n, ST_CLASS sc, ST_SCLASS stc, ST_EXPORT exp,
00108 TY_IDX t)
00109 {
00110 st->u1.name_idx = n;
00111 st->sym_class = sc;
00112 st->storage_class = stc;
00113 st->export_class = exp;
00114 st->u2.type = t;
00115 st->base_idx = st->st_idx;
00116 st->offset = 0;
00117 st->flags = 0;
00118 st->flags_ext = 0;
00119 #ifdef KEY
00120
00121 st->pad = 0;
00122 #endif
00123 }
00124
00125 inline void
00126 Set_ST_classes (ST* s, ST_CLASS c, ST_SCLASS sc)
00127 {
00128 #ifdef Is_True_On
00129 ST_Verify_Class_Sclass (c, sc);
00130 #endif
00131 s->sym_class = c;
00132 s->storage_class = sc;
00133 }
00134
00135
00136 inline UINT32
00137 ST_Table_Size (SYMTAB_IDX level) {
00138 return Scope_tab[level].st_tab->Size ();
00139 }
00140
00141
00142 inline char *
00143 ST_name (ST_IDX idx) { return ST_name (St_Table[idx]); }
00144
00145 inline ST_CLASS
00146 ST_class (const ST_IDX s) { return ST_class (St_Table[s]); }
00147
00148 inline ST_SCLASS
00149 ST_sclass (const ST_IDX s) { return ST_sclass(St_Table[s]); }
00150
00151 inline TY_IDX
00152 ST_type (const ST_IDX s) { return ST_type(St_Table[s]); }
00153
00154 inline TYPE_ID
00155 ST_mtype (const ST* s) {
00156 return TY_mtype (Ty_Table[ST_type (s)]);
00157 }
00158 inline TYPE_ID
00159 ST_btype (const ST* s) { return ST_mtype(s); }
00160
00161 inline void
00162 Set_ST_base (ST& s, ST& base) { s.base_idx = ST_st_idx(base); }
00163
00164 inline ST&
00165 ST_base (const ST& s) { return St_Table[ST_base_idx (s)]; }
00166
00167 inline ST&
00168 ST_strong (const ST& s) {
00169 FmtAssert (ST_is_weak_symbol (s), ("Expecting a weak symbol"));
00170 return St_Table[s.base_idx];
00171 }
00172
00173 inline ST&
00174 ST_full (const ST& s) {
00175 FmtAssert (ST_is_split_common (s), ("Expecting a split common"));
00176 return St_Table[s.base_idx];
00177 }
00178
00179 inline TCON&
00180 ST_tcon_val (const ST* s) { return Tcon_Table[ST_tcon (s)]; }
00181
00182
00183 inline BOOL
00184 ST_is_preemptible (const ST* s) {
00185 return (ST_export (s) == EXPORT_PREEMPTIBLE ||
00186 ST_export (s) == EXPORT_OPTIONAL);
00187 }
00188
00189 inline BOOL
00190 ST_is_export_local (const ST *s)
00191 {
00192
00193 return (ST_export(s) == EXPORT_LOCAL ||
00194 ST_export(s) == EXPORT_LOCAL_INTERNAL);
00195 }
00196
00197
00198 inline BOOL
00199 ST_is_export_hidden (const ST *s)
00200 {
00201 return (ST_export(s) == EXPORT_HIDDEN);
00202 }
00203
00204 inline TY_IDX
00205 ST_pu_type (const ST* s)
00206 {
00207 Is_True (s->sym_class == CLASS_FUNC ||
00208 (ST_sym_class (s) == CLASS_NAME &&
00209 (ST_asm_function_st (*s))),
00210 ("Invalid argument for ST_pu_type"));
00211 return PU_prototype (Pu_Table[ST_pu (s)]);
00212 }
00213
00214 inline SYMTAB_IDX
00215 ST_level (const ST* s) { return ST_IDX_level(ST_st_idx(s)); }
00216 inline UINT32
00217 ST_index (const ST* s) { return ST_IDX_index(ST_st_idx(s)); }
00218
00219 inline BOOL
00220 Has_Base_Block (const ST* s) {
00221 return ST_base_idx (s) != ST_st_idx (s);
00222 }
00223
00224 inline BOOL
00225 Has_Strong_Symbol (const ST* s) {
00226 return ST_is_weak_symbol(s) && (ST_sclass(s) == SCLASS_EXTERN)
00227 && (ST_strong(s) != s);
00228 }
00229
00230
00231
00232
00233 inline UINT
00234 INITO_Table_Size (SYMTAB_IDX level) {
00235 return Scope_tab[level].inito_tab->Size();
00236 }
00237
00238
00239
00240
00241 inline UINT
00242 INITV_Table_Size () { return Initv_Table.Size();}
00243
00244
00245
00246
00247
00248
00249 inline PU&
00250 New_PU (PU_IDX& pu) { return Pu_Table.New_entry (pu); }
00251
00252 inline void
00253 PU_Init (PU& pu, TY_IDX prototype, SYMTAB_IDX level)
00254 {
00255 pu.target_idx = TARGET_INFO_IDX_ZERO;
00256 pu.prototype = prototype;
00257 Is_True (level > GLOBAL_SYMTAB, ("lexical level of a PU must be > 1"));
00258 pu.base_class = TY_IDX_ZERO;
00259 pu.lexical_level = level;
00260 #ifdef TARG_NVISA
00261 pu.thread_limit = 0;
00262 pu.block_limit = 0;
00263 #endif
00264 pu.gp_group = 0;
00265 pu.src_lang = PU_UNKNOWN_LANG;
00266 pu.misc = 0;
00267 pu.unused = 0;
00268 pu.flags = 0;
00269 }
00270
00271 inline UINT
00272 PU_Table_Size () { return Pu_Table.Size(); }
00273
00274 inline BOOL
00275 PU_has_nested (const PU& pu) { return (PU_uplevel(pu) ||
00276 PU_has_mp(pu)); }
00277
00278 inline BOOL
00279 PU_ftn_lang (const PU& pu) { return (PU_f90_lang(pu) ||
00280 PU_f77_lang(pu)); }
00281
00282 inline SYMTAB_IDX
00283 PU_lexical_level (const ST* st)
00284 {
00285 Is_True (ST_sym_class (st) == CLASS_FUNC ||
00286 (ST_sym_class (st) == CLASS_NAME &&
00287 (ST_asm_function_st (*st))),
00288 ("Symbol is not a function"));
00289 return PU_lexical_level (Pu_Table[ST_pu (st)]);
00290 }
00291
00292 inline ST *
00293 Get_Current_PU_ST ()
00294 {
00295 return Scope_tab[CURRENT_SYMTAB].st;
00296 }
00297
00298 inline PU &
00299 Get_Current_PU ()
00300 {
00301 #ifdef FRONT_END
00302 return Pu_Table[ST_pu (Scope_tab[CURRENT_SYMTAB].st)];
00303 #else
00304 return *Current_pu;
00305 #endif
00306 }
00307
00308
00309 inline PU &
00310 Get_Scope_PU (UINT level)
00311 {
00312 return Pu_Table[ST_pu (Scope_tab[level].st)];
00313 }
00314
00315
00316
00317
00318
00319 inline TY&
00320 New_TY (TY_IDX& ty_idx)
00321 {
00322 UINT idx;
00323 TY& ty = Ty_tab.New_entry (idx);
00324 ty_idx = make_TY_IDX (idx);
00325 return ty;
00326 }
00327
00328 inline void
00329 TY_Init (TY& ty, UINT64 s, TY_KIND k, TYPE_ID t, STR_IDX n)
00330 {
00331 #ifdef Is_True_On
00332 if (k == KIND_FUNCTION)
00333 TY_Verify_Kind_Function(k,s,t);
00334
00335 TY_Verify_Kind_Mtype (k, t);
00336 #endif
00337
00338 ty.size = s;
00339 ty.kind = k;
00340 ty.mtype = t;
00341 ty.flags = 0;
00342 ty.u1.fld = 0;
00343 ty.name_idx = n;
00344 ty.u2.etype = 0;
00345 }
00346
00347 inline UINT32
00348 TY_Table_Size () { return Ty_tab.Size (); }
00349
00350 inline UINT64
00351 TY_size (TY_IDX ty_idx) { return TY_size (Ty_Table[ty_idx]); }
00352
00353 inline TY_KIND
00354 TY_kind (TY_IDX ty_idx) { return TY_kind (Ty_Table[ty_idx]); }
00355
00356 inline TYPE_ID
00357 TY_mtype (TY_IDX ty_idx) { return Ty_Table[ty_idx].mtype; }
00358
00359 inline char *
00360 TY_name (TY_IDX ty_idx) { return TY_name (Ty_Table[ty_idx]); }
00361
00362 inline TY_IDX
00363 TY_ret_type (const TY& ty) {
00364 Is_True (TY_kind (ty) == KIND_FUNCTION, ("TY_kind is not KIND_FUNCTION"));
00365 return Tylist_Table[TY_tylist (ty)];
00366 }
00367 inline TY_IDX
00368 TY_ret_type (const TY_IDX ty_idx) { return TY_ret_type(Ty_Table[ty_idx]);}
00369
00370 inline TYLIST_IDX
00371 TY_parms (const TY& ty) {
00372 Is_True (TY_kind (ty) == KIND_FUNCTION, ("TY_kind is not KIND_FUNCTION"));
00373 return TY_tylist (ty) + 1;
00374 }
00375 inline TYLIST_IDX
00376 TY_parms (const TY_IDX ty_idx) { return TY_parms(Ty_Table[ty_idx]); }
00377
00378 inline BOOL
00379 Is_Simple_Type (const TY& ty)
00380 {
00381 switch (TY_kind (ty)) {
00382 case KIND_SCALAR:
00383 case KIND_POINTER:
00384 case KIND_VOID:
00385 return TRUE;
00386 default:
00387 return FALSE;
00388 }
00389 }
00390 inline BOOL
00391 Is_Simple_Type (TY_IDX ty) { return Is_Simple_Type (Ty_Table[ty]); }
00392
00393
00394 inline BOOL
00395 Is_Structure_Type (const TY& ty)
00396 {
00397 return TY_kind (ty) == KIND_STRUCT;
00398 }
00399 inline BOOL
00400 Is_Structure_Type (TY_IDX ty) { return Is_Structure_Type (Ty_Table[ty]); }
00401
00402
00403 inline BOOL
00404 Is_Composite_Type (const TY& ty)
00405 {
00406 switch (TY_kind (ty)) {
00407 case KIND_STRUCT:
00408 case KIND_ARRAY:
00409 return TRUE;
00410 default:
00411 return FALSE;
00412 }
00413 }
00414 inline BOOL
00415 Is_Composite_Type (TY_IDX ty) { return Is_Composite_Type (Ty_Table[ty]); }
00416
00417
00418
00419
00420 inline FLD_HANDLE
00421 New_FLD ()
00422 {
00423 FLD_IDX fld_idx;
00424 FLD& fld = Fld_Table.New_entry (fld_idx);
00425 return FLD_HANDLE (&fld, fld_idx);
00426 }
00427
00428 inline void
00429 FLD_Init (FLD_HANDLE f, STR_IDX _name, TY_IDX _type, UINT64 _ofst)
00430 {
00431 FLD* fld = f.Entry ();
00432 fld->name_idx = _name;
00433 fld->type = _type;
00434 fld->ofst = _ofst;
00435 fld->flags = 0;
00436 fld->bsize = fld->bofst = 0;
00437 fld->st = 0;
00438 }
00439
00440 inline UINT
00441 FLD_Table_Size () { return Fld_Table.Size(); }
00442
00443
00444
00445
00446
00447 inline ARB_HANDLE
00448 New_ARB ()
00449 {
00450 ARB_IDX arb_idx;
00451 ARB& arb = Arb_Table.New_entry(arb_idx);
00452 return ARB_HANDLE(&arb,arb_idx);
00453 }
00454
00455 inline void
00456 ARB_Init (ARB_HANDLE arb_h, INT64 lbnd, INT64 ubnd, INT64 stride)
00457 {
00458 ARB * arb = arb_h.Entry();
00459 arb->flags = ARB_CONST_LBND | ARB_CONST_UBND | ARB_CONST_STRIDE;
00460 arb->dimension = 1;
00461 arb->unused = 0;
00462 arb->u1.lbnd_val = lbnd;
00463 arb->u2.ubnd_val = ubnd;
00464 arb->u3.stride_val = stride;
00465 }
00466
00467 inline UINT
00468 ARB_Table_Size () { return Arb_Table.Size(); }
00469
00470
00471
00472
00473 inline TYLIST&
00474 New_TYLIST (TYLIST_IDX& tylist) { return Tylist_Table.New_entry (tylist); }
00475
00476 inline UINT32
00477 TYLIST_Table_Size () { return Tylist_Table.Size (); }
00478
00479
00480
00481
00482 inline LABEL&
00483 New_LABEL (SYMTAB_IDX scope, LABEL_IDX& label_idx)
00484 {
00485 LABEL& label = Scope_tab[scope].label_tab->New_entry (label_idx);
00486 Set_LABEL_name_idx (label, 0);
00487 Set_LABEL_KIND (label, LKIND_DEFAULT);
00488 label.flags = 0;
00489 label_idx = make_LABEL_IDX(label_idx, scope);
00490 return label;
00491 }
00492
00493 inline void
00494 LABEL_Init (LABEL& label, STR_IDX name_idx, LABEL_KIND kind)
00495 {
00496 label.name_idx = name_idx;
00497 label.kind = kind;
00498 label.flags = 0;
00499 }
00500
00501 inline UINT32
00502 LABEL_Table_Size (SYMTAB_IDX level)
00503 {
00504 return Scope_tab[level].label_tab->Size ();
00505 }
00506
00507
00508 inline char *
00509 LABEL_name (LABEL_IDX idx) { return LABEL_name(Label_Table[idx]);}
00510
00511
00512
00513
00514 inline PREG&
00515 New_PREG_explicit (SCOPE *scope_tab, SYMTAB_IDX scope, PREG_IDX& p)
00516 {
00517 return scope_tab[scope].preg_tab->New_entry (p);
00518 }
00519
00520 inline PREG&
00521 New_PREG (SYMTAB_IDX scope, PREG_IDX& p)
00522 {
00523 return New_PREG_explicit(Scope_tab, scope, p);
00524 }
00525
00526 inline UINT32
00527 PREG_Table_Size_explicit (SCOPE *scope_tab, SYMTAB_IDX level) {
00528 return scope_tab[level].preg_tab->Size();
00529 }
00530
00531 inline UINT32
00532 PREG_Table_Size (SYMTAB_IDX level) {
00533 return PREG_Table_Size_explicit(Scope_tab, level);
00534 }
00535
00536 inline void
00537 Reset_PREG_Table_Size_explicit (SCOPE *scope_tab, SYMTAB_IDX level, UINT32 size)
00538 {
00539 INT32 diff = PREG_Table_Size_explicit (scope_tab, level) - size;
00540 Is_True (diff >= 0, ("Deleting too many entries"));
00541 scope_tab[level].preg_tab->Delete_last (diff);
00542 }
00543
00544 inline void
00545 Reset_PREG_Table_Size (SYMTAB_IDX level, UINT32 size)
00546 {
00547 Reset_PREG_Table_Size_explicit(Scope_tab, level, size);
00548 }
00549
00550
00551
00552
00553 inline ST_ATTR&
00554 New_ST_ATTR_explicit (SCOPE *scope_tab, SYMTAB_IDX scope, ST_ATTR_IDX& p)
00555 {
00556 return scope_tab[scope].st_attr_tab->New_entry (p);
00557 }
00558
00559 inline ST_ATTR&
00560 New_ST_ATTR (SYMTAB_IDX scope, ST_ATTR_IDX& p)
00561 {
00562 return New_ST_ATTR_explicit(Scope_tab, scope, p);
00563 }
00564
00565 inline void
00566 ST_ATTR_Init (ST_ATTR& st_attr, ST_IDX st_idx, ST_ATTR_KIND akind, UINT64 val)
00567 {
00568 st_attr.st_idx = st_idx;
00569 st_attr.kind = akind;
00570 st_attr.Set_u (val);
00571 }
00572
00573 inline UINT32
00574 ST_ATTR_Table_Size_explicit (SCOPE *scope_tab, SYMTAB_IDX level) {
00575 return scope_tab[level].st_attr_tab->Size();
00576 }
00577
00578 inline UINT32
00579 ST_ATTR_Table_Size (SYMTAB_IDX level) {
00580 return ST_ATTR_Table_Size_explicit(Scope_tab, level);
00581 }
00582
00583 inline void
00584 Reset_ST_ATTR_Table_Size_explicit (SCOPE *scope_tab, SYMTAB_IDX level, UINT32 size)
00585 {
00586 INT32 diff = ST_ATTR_Table_Size_explicit (scope_tab, level) - size;
00587 Is_True (diff >= 0, ("Deleting too many entries"));
00588 scope_tab[level].st_attr_tab->Delete_last (diff);
00589 }
00590
00591 inline void
00592 Reset_ST_ATTR_Table_Size (SYMTAB_IDX level, UINT32 size)
00593 {
00594 Reset_ST_ATTR_Table_Size_explicit(Scope_tab, level, size);
00595 }
00596
00597
00598
00599
00600 const UINT32 MAX_PREDEFINED_TCON_IDX = 2;
00601
00602 TCON_IDX
00603 Enter_tcon (const TCON& tcon);
00604
00605 void Init_Constab (void);
00606
00607 inline UINT32
00608 TCON_Table_Size () { return Tcon_Table.Size (); }
00609
00610
00611
00612
00613
00614
00615 inline BOOL
00616 Is_Global_Symbol (const ST* s) { return ST_level(s) <= GLOBAL_SYMTAB; }
00617
00618 inline BOOL
00619 Is_Local_Symbol (const ST* s) { return ST_level(s) == CURRENT_SYMTAB; }
00620
00621
00622
00623
00624
00625 inline BLK&
00626 New_BLK (BLK_IDX& blk_idx)
00627 {
00628 BLK& blk = Blk_Table.New_entry(blk_idx);
00629 blk.Init ();
00630 return blk;
00631 }
00632
00633
00634 inline UINT64
00635 STB_size (const ST *s) {
00636 return Blk_Table[ST_blk(s)].Size();
00637 }
00638 inline void
00639 Set_STB_size (ST *s, UINT64 size) {
00640 Blk_Table[ST_blk(s)].Set_size(size);
00641 }
00642 inline UINT
00643 STB_align (const ST *s) {
00644 UINT16 align = Blk_Table[ST_blk(s)].Align();
00645
00646
00647
00648
00649
00650
00651 Is_True ((align == 0xffff) ||
00652 ((align & ~TY_ALIGN) == 0),
00653 ("STB_align unacceptably large (%d)\n", align));
00654 if (align == 0xffff) return 0;
00655 return (1 << align);
00656 }
00657 inline void
00658 Set_STB_align (ST *s, UINT align) {
00659 UINT16 packed_align;
00660 extern UINT32 TY_log_base2 (UINT32 align);
00661
00662 if (align == 0) {
00663
00664 packed_align = 0xffff;
00665 }
00666 else if (align & 0x3f) {
00667 packed_align = (align & 0x7) ? (align >> 1) : 3 + (align >> 4);
00668 } else {
00669 packed_align = TY_log_base2(align);
00670 }
00671
00672 Blk_Table[ST_blk(s)].Set_align(packed_align);
00673 }
00674 inline UINT16
00675 STB_section_idx (const ST *s) {
00676 return Blk_Table[ST_blk(s)].Section_idx();
00677 }
00678 inline void
00679 Set_STB_section_idx (ST *s, UINT16 sec) {
00680 Blk_Table[ST_blk(s)].Set_section_idx(sec);
00681 }
00682 inline UINT16
00683 STB_scninfo_idx (const ST *s) {
00684 return Blk_Table[ST_blk(s)].Scninfo_idx();
00685 }
00686 inline void
00687 Set_STB_scninfo_idx (ST *s, UINT16 scn) {
00688 Blk_Table[ST_blk(s)].Set_scninfo_idx(scn);
00689 }
00690 inline UINT16
00691 STB_flags (const ST *s) {
00692 return Blk_Table[ST_blk(s)].Flags();
00693 }
00694 inline BOOL
00695 STB_is_set (const ST* s, UINT16 flags) {
00696 return Blk_Table[ST_blk(s)].Is_set (flags);
00697 }
00698 inline void
00699 Set_STB_flags (ST* s, UINT16 flags) {
00700 Blk_Table[ST_blk(s)].Set_flags (flags);
00701 }
00702 inline void
00703 Reset_STB_flags (ST* s, UINT16 flags) {
00704 Blk_Table[ST_blk(s)].Clear_flags (flags);
00705 }
00706 #define STB_decrement(s) (STB_is_set (s, BLK_DECREMENT))
00707 #define Set_STB_decrement(s) (Set_STB_flags (s, BLK_DECREMENT))
00708 #define Reset_STB_decrement(s) (Reset_STB_flags (s, BLK_DECREMENT))
00709 #define STB_section(s) (STB_is_set (s, BLK_SECTION))
00710 #define Set_STB_section(s) (Set_STB_flags (s, BLK_SECTION))
00711 #define Reset_STB_section(s) (Reset_STB_flags (s, BLK_SECTION))
00712 #define STB_root_base(s) (STB_is_set (s, BLK_ROOT_BASE))
00713 #define Set_STB_root_base(s) (Set_STB_flags (s, BLK_ROOT_BASE))
00714 #define Reset_STB_root_base(s) (Reset_STB_flags (s, BLK_ROOT_BASE))
00715 #define STB_is_basereg(s) (STB_is_set (s, BLK_IS_BASEREG))
00716 #define Set_STB_is_basereg(s) (Set_STB_flags (s, BLK_IS_BASEREG))
00717 #define Reset_STB_is_basereg(s) (Reset_STB_flags (s, BLK_IS_BASEREG))
00718 #define STB_exec(s) (STB_is_set (s, BLK_EXEC))
00719 #define Set_STB_exec(s) (Set_STB_flags (s, BLK_EXEC))
00720 #define Reset_STB_exec(s) (Reset_STB_flags (s, BLK_EXEC))
00721 #define STB_nobits(s) (STB_is_set (s, BLK_NOBITS))
00722 #define Set_STB_nobits(s) (Set_STB_flags (s, BLK_NOBITS))
00723 #define Reset_STB_nobits(s) (Reset_STB_flags (s, BLK_NOBITS))
00724 #define STB_merge(s) (STB_is_set (s, BLK_MERGE))
00725 #define Set_STB_merge(s) (Set_STB_flags (s, BLK_MERGE))
00726 #define Reset_STB_merge(s) (Reset_STB_flags (s, BLK_MERGE))
00727 #define STB_compiler_layout(s) (STB_is_set (s, BLK_COMPILER_LAYOUT))
00728 #define Set_STB_compiler_layout(s) (Set_STB_flags (s, BLK_COMPILER_LAYOUT))
00729 #define Reset_STB_compiler_layout(s) (Reset_STB_flags (s, BLK_COMPILER_LAYOUT))
00730
00731 #endif
00732
00733