From: Andreas Schwab Date: Tue, 28 Jan 2003 22:17:21 +0000 (+0000) Subject: m68k.md (tablejump+2): Don't sign extend an address register. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c1c1d12306906a61f3c0f9f5956723a1d0f407dd;p=gcc.git m68k.md (tablejump+2): Don't sign extend an address register. * 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. From-SVN: r62030 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bc469656054..8082fcde6a2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2003-01-28 Andreas Schwab + + * 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 * combine.c (nonzero_bits): Fix check for negative divide operands. diff --git a/gcc/config/m68k/coff.h b/gcc/config/m68k/coff.h index 88720d78157..13cb4ae5c55 100644 --- a/gcc/config/m68k/coff.h +++ b/gcc/config/m68k/coff.h @@ -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. */ diff --git a/gcc/config/m68k/linux.h b/gcc/config/m68k/linux.h index bf80cea9f9c..7693af1815a 100644 --- a/gcc/config/m68k/linux.h +++ b/gcc/config/m68k/linux.h @@ -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 diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md index 67b099218d8..2812cd57c86 100644 --- a/gcc/config/m68k/m68k.md +++ b/gcc/config/m68k/m68k.md @@ -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. @@ -6973,17 +6973,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 { @@ -6997,11 +7013,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 { diff --git a/gcc/config/m68k/m68kelf.h b/gcc/config/m68k/m68kelf.h index 7866a239209..e5145c9d70c 100644 --- a/gcc/config/m68k/m68kelf.h +++ b/gcc/config/m68k/m68kelf.h @@ -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. diff --git a/gcc/config/m68k/mot3300.h b/gcc/config/m68k/mot3300.h index 6304e531dea..abdf1dddad8 100644 --- a/gcc/config/m68k/mot3300.h +++ b/gcc/config/m68k/mot3300.h @@ -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 */ diff --git a/gcc/config/m68k/netbsd-elf.h b/gcc/config/m68k/netbsd-elf.h index 62f67ef534d..70615013052 100644 --- a/gcc/config/m68k/netbsd-elf.h +++ b/gcc/config/m68k/netbsd-elf.h @@ -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 diff --git a/gcc/config/m68k/pbb.h b/gcc/config/m68k/pbb.h index 6eef2acaf47..68c8d09ead5 100644 --- a/gcc/config/m68k/pbb.h +++ b/gcc/config/m68k/pbb.h @@ -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