This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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."


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]