This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[SPARC] Fix PR target/31100
- From: Eric Botcazou <ebotcazou at adacore dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Sat, 20 Nov 2010 23:04:28 +0100
- Subject: [SPARC] Fix PR target/31100
The filler pattern defined for the .align directive on the SPARC (0x1000000)
is valid for Sun as but not for GNU as; in fact, GNU as already knows how to
do the filling on its own.
Bootstrapped/regtested on SPARC64/Solaris 9 and SPARC/Solaris 10, applied on
the mainline and 4.5 branch.
2010-11-20 Eric Botcazou <ebotcazou@adacore.com>
PR target/31100
* config/sparc/sparc.h (ASM_OUTPUT_ALIGN_WITH_NOP): Move to...
* config/sparc/sol2.h (ASM_OUTPUT_ALIGN_WITH_NOP): ...here.
* config/sparc/sol2-gas.h (ASM_OUTPUT_ALIGN_WITH_NOP): Undefine.
2010-11-20 Eric Botcazou <ebotcazou@adacore.com>
* gcc.target/sparc/sparc-align-1.c: New test.
--
Eric Botcazou
Index: config/sparc/sol2-gas.h
===================================================================
--- config/sparc/sol2-gas.h (revision 166973)
+++ config/sparc/sol2-gas.h (working copy)
@@ -23,6 +23,9 @@ a copy of the GCC Runtime Library Except
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
+/* Undefine this as the filler pattern doesn't work with GNU as. */
+#undef ASM_OUTPUT_ALIGN_WITH_NOP
+
/* Undefine this so that BNSYM/ENSYM pairs are emitted by STABS+. */
#undef NO_DBX_BNSYM_ENSYM
Index: config/sparc/sparc.h
===================================================================
--- config/sparc/sparc.h (revision 166973)
+++ config/sparc/sparc.h (working copy)
@@ -2013,13 +2013,6 @@ do { \
if ((LOG) != 0) \
fprintf (FILE, "\t.align %d\n", (1<<(LOG)))
-/* This is how to output an assembler line that says to advance
- the location counter to a multiple of 2**LOG bytes using the
- "nop" instruction as padding. */
-#define ASM_OUTPUT_ALIGN_WITH_NOP(FILE,LOG) \
- if ((LOG) != 0) \
- fprintf (FILE, "\t.align %d,0x1000000\n", (1<<(LOG)))
-
#define ASM_OUTPUT_SKIP(FILE,SIZE) \
fprintf (FILE, "\t.skip "HOST_WIDE_INT_PRINT_UNSIGNED"\n", (SIZE))
Index: config/sparc/sol2.h
===================================================================
--- config/sparc/sol2.h (revision 166973)
+++ config/sparc/sol2.h (working copy)
@@ -177,6 +177,13 @@ along with GCC; see the file COPYING3.
} \
while (0)
+/* This is how to output an assembler line that says to advance
+ the location counter to a multiple of 2**LOG bytes using the
+ NOP instruction as padding. */
+#define ASM_OUTPUT_ALIGN_WITH_NOP(FILE,LOG) \
+ if ((LOG) != 0) \
+ fprintf (FILE, "\t.align %d,0x1000000\n", (1<<(LOG)))
+
/* Use Solaris ELF section syntax. */
#undef TARGET_ASM_NAMED_SECTION
#define TARGET_ASM_NAMED_SECTION sparc_solaris_elf_asm_named_section
/* PR target/31100 */
/* Reported by Erwin Unruh <Erwin.Unruh@fujitsu-siemens.com> */
/* { dg-do run } */
/* { dg-options "-falign-labels=16" } */
extern void abort(void);
int f(int i)
{
int res;
switch (i)
{
case 5:
res = i - i;
break;
default:
res = i * 2;
break;
}
return res;
}
int main(void)
{
if (f(2) != 4)
abort ();
return 0;
}