diff options
author | David Edelsohn <dje.gcc@gmail.com> | 2013-02-01 14:14:05 +0000 |
---|---|---|
committer | David Edelsohn <dje@gcc.gnu.org> | 2013-02-01 09:14:05 -0500 |
commit | 14d52b90934e332f57abab4a38b7d6088601b4e4 (patch) | |
tree | cc6fa27ab5925ee493d7a2b9764d1cc9ef7c937d /gcc/config | |
parent | bed8d8a6922900f3b92652f5b21ba01b583b2b1d (diff) | |
download | gcc-14d52b90934e332f57abab4a38b7d6088601b4e4.zip gcc-14d52b90934e332f57abab4a38b7d6088601b4e4.tar.gz gcc-14d52b90934e332f57abab4a38b7d6088601b4e4.tar.bz2 |
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
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/rs6000/xcoff.h | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/gcc/config/rs6000/xcoff.h b/gcc/config/rs6000/xcoff.h index bde208f..512bcb5 100644 --- a/gcc/config/rs6000/xcoff.h +++ b/gcc/config/rs6000/xcoff.h @@ -283,7 +283,7 @@ RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \ if ((ALIGN) > 32) \ 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) \ fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",3\n", (SIZE)); \ else \ @@ -292,12 +292,30 @@ /* This says how to output an assembler line 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 for 64-bit mode. */ #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) \ do { fputs (LOCAL_COMMON_ASM_OP, (FILE)); \ RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \ |