OSDN Git Service

* config/m68k/m68k.md (tablejump+2): Don't sign extend an address
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 28 Jan 2003 22:17:21 +0000 (22:17 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 28 Jan 2003 22:17:21 +0000 (22:17 +0000)
        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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@62030 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/m68k/coff.h
gcc/config/m68k/linux.h
gcc/config/m68k/m68k.md
gcc/config/m68k/m68kelf.h
gcc/config/m68k/mot3300.h
gcc/config/m68k/netbsd-elf.h
gcc/config/m68k/pbb.h

index bc46965..8082fcd 100644 (file)
@@ -1,3 +1,15 @@
+2003-01-28  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.
+
 2003-01-28  Richard Sandiford  <rsandifo@redhat.com>
 
        * combine.c (nonzero_bits): Fix check for negative divide operands.
index 88720d7..13cb4ae 100644 (file)
@@ -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 bf80cea..7693af1 100644 (file)
@@ -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 67b0992..2812cd5 100644 (file)
@@ -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.
 #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
     {
 #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 7866a23..e5145c9 100644 (file)
@@ -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 6304e53..abdf1dd 100644 (file)
@@ -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.
@@ -423,12 +423,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 62f67ef..7061501 100644 (file)
@@ -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,
@@ -217,15 +217,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 6eef2ac..68c8d09 100644 (file)
@@ -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.
 
@@ -109,12 +109,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