Author: zhuqing Date: 2011-08-31 05:16:46 -0400 (Wed, 31 Aug 2011) New Revision: 3728
Modified: trunk/osprey/be/com/stblock.cxx trunk/osprey/common/com/symtab_idx.h trunk/osprey/wgen/wgen_spin_symbol.cxx Log: Fix bug832, add user defined align info to ty_idx. Code Review: Sun Chan. Modified: trunk/osprey/be/com/stblock.cxx =================================================================== --- trunk/osprey/be/com/stblock.cxx 2011-08-25 02:01:39 UTC (rev 3727) +++ trunk/osprey/be/com/stblock.cxx 2011-08-31 09:16:46 UTC (rev 3728) @@ -129,6 +129,11 @@ return align; } + if (TY_is_user_align(ty_idx)) + { + return align; + } + switch(ST_sclass(sym)) { case SCLASS_AUTO: Modified: trunk/osprey/common/com/symtab_idx.h =================================================================== --- trunk/osprey/common/com/symtab_idx.h 2011-08-25 02:01:39 UTC (rev 3727) +++ trunk/osprey/common/com/symtab_idx.h 2011-08-31 09:16:46 UTC (rev 3728) @@ -219,13 +219,15 @@ // UINT _restrict : 1; // UINT _volatile : 1; // UINT _const : 1; -// UINT _align : 5; +// UINT _user_align : 1; +// UINT _align : 4; // }; const UINT32 TY_RESTRICT = 0x00000080; // restrict type qualifier const UINT32 TY_VOLATILE = 0x00000040; // volatile type qualifier const UINT32 TY_CONST = 0x00000020; // const type qualifier -const UINT32 TY_ALIGN = 0x0000001f; // bit mask for alignment field +const UINT32 TY_USER_ALIGN = 0x00000010; // user defined align flag +const UINT32 TY_ALIGN = 0x0000000f; // bit mask for alignment field inline UINT32 TY_IDX_index (TY_IDX ty_idx) { return ty_idx >> 8; } inline void Set_TY_IDX_index (TY_IDX &ty_idx, UINT32 index) @@ -248,6 +250,10 @@ inline void Set_TY_is_restrict (TY_IDX &ty_idx) { ty_idx |= TY_RESTRICT; } inline void Clear_TY_is_restrict (TY_IDX &ty_idx){ ty_idx &= ~TY_RESTRICT; } +inline BOOL TY_is_user_align (TY_IDX ty_idx) { return ty_idx & TY_USER_ALIGN;} +inline void Set_TY_is_user_align (TY_IDX &ty_idx) { ty_idx |= TY_USER_ALIGN; } +inline void Clear_TY_is_user_align (TY_IDX &ty_idx){ ty_idx &= ~TY_USER_ALIGN; } + // TY_align_exp returns the exponent part of the alignment. That is, the // true alignment in bytes is 2 to the power of TY_align_exp () inline UINT TY_align_exp (TY_IDX ty_idx) { return ty_idx & TY_ALIGN; } Modified: trunk/osprey/wgen/wgen_spin_symbol.cxx =================================================================== --- trunk/osprey/wgen/wgen_spin_symbol.cxx 2011-08-25 02:01:39 UTC (rev 3727) +++ trunk/osprey/wgen/wgen_spin_symbol.cxx 2011-08-31 09:16:46 UTC (rev 3728) @@ -1915,6 +1915,9 @@ if (gs_tree_this_volatile(decl_node)) Set_TY_is_volatile (ty_idx); else Clear_TY_is_volatile (ty_idx); + if (gs_decl_user_align (decl_node)) + Set_TY_is_user_align(ty_idx); + else Clear_TY_is_user_align(ty_idx); #ifdef KEY // Handle aligned attribute (bug 7331) if (gs_decl_user_align (decl_node)) ------------------------------------------------------------------------------ Special Offer -- Download ArcSight Logger for FREE! Finally, a world-class log management solution at an even better price-free! And you'll get a free "Love Thy Logs" t-shirt when you download Logger. Secure your free ArcSight Logger TODAY! http://p.sf.net/sfu/arcsisghtdev2dev _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel