This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: 3.1 m68k/coldfire code gen problem!!
Joel Sherrill <joel.sherrill@OARcorp.com> writes:
|> Thanks Andreas!!! I can now confirm that with this patch,
|> RTEMS compiles for the Coldfire.
This is strange, because I didn't work for me in this form in a cross
compiler. Moreover, I think we can leave out the sign extension for an
address register altogether, since address registers are always
automatically sign extended when written in word mode.
Andreas.
2002-05-09 Andreas Schwab <schwab@suse.de>
* config/m68k/m68k.md (tablejump+2): Don't sign extend an address
register.
* config/m68k/apollo68.h (ASM_RETURN_CASE_JUMP): Likewise.
* config/m68k/coff.h (ASM_RETURN_CASE_JUMP): Likewise.
* config/m68k/linux.h (ASM_RETURN_CASE_JUMP): Likewise.
* config/m68k/m68kelf.h (ASM_RETURN_CASE_JUMP): Likewise.
* config/m68k/mot3300.h (ASM_RETURN_CASE_JUMP): Likewise.
* config/m68k/netbsd-elf.h (ASM_RETURN_CASE_JUMP): Likewise.
* config/m68k/pbb.h (ASM_RETURN_CASE_JUMP): Likewise.
Index: apollo68.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/m68k/apollo68.h,v
retrieving revision 1.6
diff -u -p -a -r1.6 apollo68.h
--- apollo68.h 4 Nov 2001 22:37:45 -0000 1.6
+++ apollo68.h 9 May 2002 14:32:23 -0000
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler. Apollo 680X0 version.
- Copyright (C) 1989, 1992, 1996, 1997, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1992, 1996, 1997, 1999, 2002 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -177,12 +177,17 @@ Boston, MA 02111-1307, USA. */
/* config/m68k.md has an explicit reference to the program counter,
prefix this by the register prefix. */
-#define ASM_RETURN_CASE_JUMP \
- do { \
- if (TARGET_5200) \
- return "ext%.l %0\n\tjmp %%pc@(2,%0:l)"; \
- else \
- return "jmp %%pc@(2,%0:w)"; \
+#define ASM_RETURN_CASE_JUMP \
+ do { \
+ if (TARGET_5200) \
+ { \
+ if (ADDRESS_REG_P (operands[0])) \
+ return "jmp %%pc@(2,%0:l)"; \
+ else \
+ return "ext%.l %0\n\tjmp %%pc@(2,%0:l)"; \
+ } \
+ else \
+ return "jmp %%pc@(2,%0:w)"; \
} while (0)
/* Here are the new register names. */
Index: coff.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/m68k/coff.h,v
retrieving revision 1.7
diff -u -p -a -r1.7 coff.h
--- coff.h 15 Nov 2001 17:55:27 -0000 1.7
+++ coff.h 9 May 2002 14:32:23 -0000
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler.
m68k series COFF object files and debugging, version.
- Copyright (C) 1994, 1996, 1997, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1994, 1996, 1997, 2000, 2002 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -55,12 +55,17 @@ Boston, MA 02111-1307, USA. */
/* config/m68k.md has an explicit reference to the program counter,
prefix this by the register prefix. */
-#define ASM_RETURN_CASE_JUMP \
- do { \
- if (TARGET_5200) \
- return "ext%.l %0\n\tjmp %%pc@(2,%0:l)"; \
- else \
- return "jmp %%pc@(2,%0:w)"; \
+#define ASM_RETURN_CASE_JUMP \
+ do { \
+ if (TARGET_5200) \
+ { \
+ if (ADDRESS_REG_P (operands[0])) \
+ return "jmp %%pc@(2,%0:l)"; \
+ else \
+ return "ext%.l %0\n\tjmp %%pc@(2,%0:l)"; \
+ } \
+ else \
+ return "jmp %%pc@(2,%0:w)"; \
} while (0)
/* Here are the new register names. */
Index: linux.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/m68k/linux.h,v
retrieving revision 1.19.8.2
diff -u -p -a -r1.19.8.2 linux.h
--- linux.h 15 Apr 2002 20:27:31 -0000 1.19.8.2
+++ linux.h 9 May 2002 14:32:23 -0000
@@ -194,12 +194,17 @@ Boston, MA 02111-1307, USA. */
/* Use the default action for outputting the case label. */
#undef ASM_OUTPUT_CASE_LABEL
-#define ASM_RETURN_CASE_JUMP \
- do { \
- if (TARGET_5200) \
- return "ext%.l %0\n\tjmp %%pc@(2,%0:l)"; \
- else \
- return "jmp %%pc@(2,%0:w)"; \
+#define ASM_RETURN_CASE_JUMP \
+ do { \
+ if (TARGET_5200) \
+ { \
+ if (ADDRESS_REG_P (operands[0])) \
+ return "jmp %%pc@(2,%0:l)"; \
+ else \
+ return "ext%.l %0\n\tjmp %%pc@(2,%0:l)"; \
+ } \
+ else \
+ return "jmp %%pc@(2,%0:w)"; \
} while (0)
/* This is how to output an assembler line that says to advance the
Index: m68k.md
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/m68k/m68k.md,v
retrieving revision 1.48.8.1
diff -u -p -a -r1.48.8.1 m68k.md
--- m68k.md 2 Apr 2002 08:14:14 -0000 1.48.8.1
+++ m68k.md 9 May 2002 14:32:24 -0000
@@ -1,5 +1,5 @@
;;- Machine description for GNU compiler, Motorola 68000 Version
-;; Copyright (C) 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001
+;; Copyright (C) 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
;; Free Software Foundation, Inc.
;; This file is part of GNU CC.
@@ -6943,17 +6943,33 @@
#ifdef SGS
#ifdef ASM_OUTPUT_CASE_LABEL
if (TARGET_5200)
- return \"ext%.l %0\;jmp 6(%%pc,%0.l)\";
+ {
+ if (ADDRESS_REG_P (operands[0]))
+ return \"jmp 6(%%pc,%0.l)\";
+ else
+ return \"ext%.l %0\;jmp 6(%%pc,%0.l)\";
+ }
else
return \"jmp 6(%%pc,%0.w)\";
#else
if (TARGET_5200)
{
+ if (ADDRESS_REG_P (operands[0]))
+ {
+#ifdef CRDS
+ return \"jmp 2(pc,%0.l)\";
+#else
+ return \"jmp 2(%%pc,%0.l)\";
+#endif /* end !CRDS */
+ }
+ else
+ {
#ifdef CRDS
- return \"ext%.l %0\;jmp 2(pc,%0.l)\";
+ return \"ext%.l %0\;jmp 2(pc,%0.l)\";
#else
- return \"extl %0\;jmp 2(%%pc,%0.l)\";
+ return \"extl %0\;jmp 2(%%pc,%0.l)\";
#endif /* end !CRDS */
+ }
}
else
{
@@ -6967,11 +6983,22 @@
#else /* not SGS */
if (TARGET_5200)
{
+ if (ADDRESS_REG_P (operands[0]))
+ {
#ifdef MOTOROLA
- return \"ext%.l %0\;jmp (2,pc,%0.l)\";
+ return \"jmp (2,pc,%0.l)\";
#else
- return \"extl %0\;jmp pc@(2,%0:l)\";
+ return \"jmp pc@(2,%0:l)\";
#endif
+ }
+ else
+ {
+#ifdef MOTOROLA
+ return \"ext%.l %0\;jmp (2,pc,%0.l)\";
+#else
+ return \"extl %0\;jmp pc@(2,%0:l)\";
+#endif
+ }
}
else
{
Index: m68kelf.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/m68k/m68kelf.h,v
retrieving revision 1.14
diff -u -p -a -r1.14 m68kelf.h
--- m68kelf.h 17 Dec 2001 15:05:34 -0000 1.14
+++ m68kelf.h 9 May 2002 14:32:24 -0000
@@ -1,7 +1,7 @@
/* m68kelf support, derived from m68kv4.h */
/* Target definitions for GNU compiler for mc680x0 running System V.4
- Copyright (C) 1991, 1993, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1991, 1993, 2000, 2002 Free Software Foundation, Inc.
Written by Ron Guilmette (rfg@netcom.com) and Fred Fish (fnf@cygnus.com).
@@ -73,12 +73,17 @@ Boston, MA 02111-1307, USA. */
/* config/m68k.md has an explicit reference to the program counter,
prefix this by the register prefix. */
-#define ASM_RETURN_CASE_JUMP \
- do { \
- if (TARGET_5200) \
- return "ext%.l %0\n\tjmp %%pc@(2,%0:l)"; \
- else \
- return "jmp %%pc@(2,%0:w)"; \
+#define ASM_RETURN_CASE_JUMP \
+ do { \
+ if (TARGET_5200) \
+ { \
+ if (ADDRESS_REG_P (operands[0])) \
+ return "jmp %%pc@(2,%0:l)"; \
+ else \
+ return "ext%.l %0\n\tjmp %%pc@(2,%0:l)"; \
+ } \
+ else \
+ return "jmp %%pc@(2,%0:w)"; \
} while (0)
/* How to refer to registers in assembler output.
Index: mot3300.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/m68k/mot3300.h,v
retrieving revision 1.24
diff -u -p -a -r1.24 mot3300.h
--- mot3300.h 20 Dec 2001 17:36:36 -0000 1.24
+++ mot3300.h 9 May 2002 14:32:24 -0000
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler,
SysV68 Motorola 3300 Delta Series.
- Copyright (C) 1987, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
+ Copyright (C) 1987, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002
Free Software Foundation, Inc.
Contributed by Abramo and Roberto Bagnara (bagnara@dipisa.di.unipi.it)
based on Alex Crain's 3B1 definitions.
@@ -441,12 +441,17 @@ Boston, MA 02111-1307, USA. */
#define ASM_OUTPUT_CASE_FETCH(file, labelno, regname)\
asm_fprintf (file, "12(%Rpc,%s.", regname)
-#define ASM_RETURN_CASE_JUMP \
- do { \
- if (TARGET_5200) \
- return "ext%.l %0\n\tjmp 8(%%pc,%0.l)"; \
- else \
- return "jmp 8(%%pc,%0.w)"; \
+#define ASM_RETURN_CASE_JUMP \
+ do { \
+ if (TARGET_5200) \
+ { \
+ if (ADDRESS_REG_P (operands[0])) \
+ return "jmp 8(%%pc,%0.l)"; \
+ else \
+ return "ext%.l %0\n\tjmp 8(%%pc,%0.l)"; \
+ } \
+ else \
+ return "jmp 8(%%pc,%0.w)"; \
} while (0)
#else /* USE_GAS */
Index: netbsd-elf.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/m68k/netbsd-elf.h,v
retrieving revision 1.2
diff -u -p -a -r1.2 netbsd-elf.h
--- netbsd-elf.h 5 Feb 2002 19:01:52 -0000 1.2
+++ netbsd-elf.h 9 May 2002 14:32:24 -0000
@@ -11,7 +11,7 @@ This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 1, or (at your option)
+the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU CC is distributed in the hope that it will be useful,
@@ -226,15 +226,18 @@ while (0)
/* Use the default action for outputting the case label. */
#undef ASM_OUTPUT_CASE_LABEL
-#define ASM_RETURN_CASE_JUMP \
-do \
- { \
- if (TARGET_5200) \
- return "ext%.l %0\n\tjmp %%pc@(2,%0:l)"; \
- else \
- return "jmp %%pc@(2,%0:w)"; \
- } \
-while (0)
+#define ASM_RETURN_CASE_JUMP \
+ do { \
+ if (TARGET_5200) \
+ { \
+ if (ADDRESS_REG_P (operands[0])) \
+ return "jmp %%pc@(2,%0:l)"; \
+ else \
+ return "ext%.l %0\n\tjmp %%pc@(2,%0:l)"; \
+ } \
+ else \
+ return "jmp %%pc@(2,%0:w)"; \
+ } while (0)
/* This is how to output an assembler line that says to advance the
Index: pbb.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/m68k/pbb.h,v
retrieving revision 1.5
diff -u -p -a -r1.5 pbb.h
--- pbb.h 1 Nov 2001 14:49:33 -0000 1.5
+++ pbb.h 9 May 2002 14:32:24 -0000
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler.
Citicorp/TTI Unicom PBB version (using GAS with a %-register prefix)
- Copyright (C) 1987, 1988, 1990, 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1988, 1990, 1996, 1997, 2002 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -113,12 +113,17 @@ Boston, MA 02111-1307, USA. */
&& ! find_equiv_reg (0, get_last_insn (), 0, 0, 0, 8, Pmode)) \
asm_fprintf (FILE, "\tmovl %Rd0,%Ra0\n"); }
-#define ASM_RETURN_CASE_JUMP \
- do { \
- if (TARGET_5200) \
- return "ext%.l %0\n\tjmp %%pc@(2,%0:l)"; \
- else \
- return "jmp %%pc@(2,%0:w)"; \
+#define ASM_RETURN_CASE_JUMP \
+ do { \
+ if (TARGET_5200) \
+ { \
+ if (ADDRESS_REG_P (operands[0])) \
+ return "jmp %%pc@(2,%0:l)"; \
+ else \
+ return "ext%.l %0\n\tjmp %%pc@(2,%0:l)"; \
+ } \
+ else \
+ return "jmp %%pc@(2,%0:w)"; \
} while (0)
/* Although the gas we use can create .ctor and .dtor sections from N_SETT
--
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE GmbH, Deutschherrnstr. 15-19, D-90429 Nürnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."