xcoff.h (ASM_OUTPUT_ALIGNED_COMMON): Use floor_log2.

* config/rs6000/xcoff.h (ASM_OUTPUT_ALIGNED_COMMON): Use floor_log2.
        (ASM_OUTPUT_ALIGNED_LOCAL): New.

From-SVN: r195660
This commit is contained in:
David Edelsohn 2013-02-01 14:14:05 +00:00 committed by David Edelsohn
parent bed8d8a692
commit 14d52b9093
2 changed files with 25 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2013-02-01 David Edelsohn <dje.gcc@gmail.com>
* config/rs6000/xcoff.h (ASM_OUTPUT_ALIGNED_COMMON): Use floor_log2.
(ASM_OUTPUT_ALIGNED_LOCAL): New.
2013-02-01 Richard Biener <rguenther@suse.de> 2013-02-01 Richard Biener <rguenther@suse.de>
PR tree-optimization/56113 PR tree-optimization/56113

View File

@ -283,7 +283,7 @@
RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \ RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \
if ((ALIGN) > 32) \ if ((ALIGN) > 32) \
fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%u\n", (SIZE), \ fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%u\n", (SIZE), \
exact_log2 ((ALIGN) / BITS_PER_UNIT)); \ floor_log2 ((ALIGN) / BITS_PER_UNIT)); \
else if ((SIZE) > 4) \ else if ((SIZE) > 4) \
fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",3\n", (SIZE)); \ fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",3\n", (SIZE)); \
else \ else \
@ -292,12 +292,30 @@
/* This says how to output an assembler line /* This says how to output an assembler line
to define a local common symbol. to define a local common symbol.
Alignment cannot be specified, but we can try to maintain The assembler in AIX 6.1 and later supports an alignment argument.
For earlier releases of AIX, we try to maintain
alignment after preceding TOC section if it was aligned alignment after preceding TOC section if it was aligned
for 64-bit mode. */ for 64-bit mode. */
#define LOCAL_COMMON_ASM_OP "\t.lcomm " #define LOCAL_COMMON_ASM_OP "\t.lcomm "
#if TARGET_AIX_VERSION >= 61
#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \
do { fputs (LOCAL_COMMON_ASM_OP, (FILE)); \
RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \
if ((ALIGN) > 32) \
fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%s,%u\n", \
(SIZE), xcoff_bss_section_name, \
floor_log2 ((ALIGN) / BITS_PER_UNIT)); \
else if ((SIZE) > 4) \
fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%s,3\n", \
(SIZE), xcoff_bss_section_name); \
else \
fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%s\n", \
(SIZE), xcoff_bss_section_name); \
} while (0)
#endif
#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \ #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
do { fputs (LOCAL_COMMON_ASM_OP, (FILE)); \ do { fputs (LOCAL_COMMON_ASM_OP, (FILE)); \
RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \ RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \