summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ"orn Rennecke <joern.rennecke@superh.com>2002-04-09 20:07:15 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2002-04-09 21:07:15 +0100
commit1951818c2f0d1786ee339c5875578f864a5d2ae9 (patch)
treec9258b87b28cb4ff5b18739fab18482fb5ad9d19
parent3429579991a67f01bb6339b92a7e1abc2ab08ea0 (diff)
downloadgcc-1951818c2f0d1786ee339c5875578f864a5d2ae9.tar.gz
config.gcc (sh-*-elf*): Use sh/embed-elf.h instead of sh/elf.h.
* config.gcc (sh-*-elf*): Use sh/embed-elf.h instead of sh/elf.h. (sh64-*-elf*, sh-*-rtemself*): Likewise. * config/sh/embed_bb.c: New file. * config/sh/embed-elf.h: New file. * sh.h (CPP_SPEC): Supply __SIZE_TYPE__ and __PTRDIFF_TYPE__ if -m[12345]* option is given. Don't use subtarget_cpp_ptr_spec. (CPP_DEFAULT_CPU_SPEC): Add settings for __SIZE_TYPE__ and __PTRDIFF_TYPE__ . (SUBTARGET_CPP_PTR_SPEC): Don't define. (EXTRA_SPECS): Remove subtarget_cpp_ptr_spec. Add subtarget_asm_endian_spec. (ASM_SPEC): Use subtarget_asm_endian_spec. (SUBTARGET_ASM_ENDIAN_SPEC): Define. (RETURN_ADDR_RTX): Use PR_MEDIA_REG for TARGET_SH5. (WCHAR_UNSIGNED): Define. (SH_ELF_WCHAR_TYPE, SH_DBX_REGISTER_NUMBER): Define. (DBX_REGISTER_NUMBER): Use SH_DBX_REGISTER_NUMBER. (ALLOCATE_INITIAL_VALUE): Use PR_MEDIA_REG for TARGET_SH5. Fix value. * sh.c (calc_live_regs): Use PR_MEDIA_REG for TARGET_SH5. (sh_adjust_cost): Likewise. sh64.h (CPP_DEFAULT_CPU_SPEC): Add settings for __SIZE_TYPE__ and __PTRDIFF_TYPE__ . (SUBTARGET_CPP_PTR_SPEC, WCHAR_TYPE): Don't #undef/ #define. (WCHAR_TYPE_SIZE): Likewise. (ASM_SPEC): Use subtarget_asm_endian_spec. (SH_ELF_WCHAR_TYPE): #undef/ #define. (MAX_WCHAR_TYPE_SIZE): Don't #undef. * config/sh/elf.h (WCHAR_UNSIGNED): #undef . (MAX_WCHAR_TYPE_SIZE): Don't #define . (WCHAR_TYPE, WCHAR_TYPE_SIZE): #undef / #define . (USER_LABEL_PREFIX): Don't #undef /#define . (DBX_REGISTER_NUMBER): Use SH_DBX_REGISTER_NUMBER. * config/elf/linux.h (USER_LABEL_PREFIX): Don't #undef /#define . (SIZE_TYPE, PTRDIFF_TYPE, WCHAR_TYPE, WCHAR_TYPE_SIZE): Likewise. (ASM_SPEC): Likewise. (SUBTARGET_ASM_ENDIAN_SPEC): #undef / #define . (CC1_SPEC): don't supply -m3 for -m4*, -m5*. * t-sh: (LIB1ASMFUNCS): Use LIB1ASMFUNCS_CACHE. (LIB2FUNCS_EXTRA): Define. * t-sh64 (LIB2FUNCS_EXTRA): Define. * config/sh/t-linux (LIB1ASMFUNCS): Don't redefine. (LIB1ASMFUNCS_CACHE): Define. (LIB2FUNCS_EXTRA): Redefine empty. From-SVN: r52091
-rw-r--r--gcc/ChangeLog47
-rw-r--r--gcc/config.gcc6
-rw-r--r--gcc/config/sh/elf.h47
-rw-r--r--gcc/config/sh/embed-elf.h28
-rw-r--r--gcc/config/sh/embed_bb.c3
-rw-r--r--gcc/config/sh/linux.h24
-rw-r--r--gcc/config/sh/sh-protos.h2
-rw-r--r--gcc/config/sh/sh.c11
-rw-r--r--gcc/config/sh/sh.h41
-rw-r--r--gcc/config/sh/sh64.h32
-rw-r--r--gcc/config/sh/t-linux6
-rw-r--r--gcc/config/sh/t-sh5
-rw-r--r--gcc/config/sh/t-sh642
13 files changed, 150 insertions, 104 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 671c84da659..eb7cdb86eaa 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,50 @@
+Tue Apr 9 19:15:57 2002 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * config.gcc (sh-*-elf*): Use sh/embed-elf.h instead of sh/elf.h.
+ (sh64-*-elf*, sh-*-rtemself*): Likewise.
+ * config/sh/embed_bb.c: New file.
+ * config/sh/embed-elf.h: New file.
+ * sh.h (CPP_SPEC): Supply __SIZE_TYPE__ and __PTRDIFF_TYPE__
+ if -m[12345]* option is given. Don't use subtarget_cpp_ptr_spec.
+ (CPP_DEFAULT_CPU_SPEC): Add settings for __SIZE_TYPE__ and
+ __PTRDIFF_TYPE__ .
+ (SUBTARGET_CPP_PTR_SPEC): Don't define.
+ (EXTRA_SPECS): Remove subtarget_cpp_ptr_spec.
+ Add subtarget_asm_endian_spec.
+ (ASM_SPEC): Use subtarget_asm_endian_spec.
+ (SUBTARGET_ASM_ENDIAN_SPEC): Define.
+ (RETURN_ADDR_RTX): Use PR_MEDIA_REG for TARGET_SH5.
+ (WCHAR_UNSIGNED): Define.
+ (SH_ELF_WCHAR_TYPE, SH_DBX_REGISTER_NUMBER): Define.
+ (DBX_REGISTER_NUMBER): Use SH_DBX_REGISTER_NUMBER.
+ (ALLOCATE_INITIAL_VALUE): Use PR_MEDIA_REG for TARGET_SH5.
+ Fix value.
+ * sh.c (calc_live_regs): Use PR_MEDIA_REG for TARGET_SH5.
+ (sh_adjust_cost): Likewise.
+ sh64.h (CPP_DEFAULT_CPU_SPEC): Add settings for __SIZE_TYPE__ and
+ __PTRDIFF_TYPE__ .
+ (SUBTARGET_CPP_PTR_SPEC, WCHAR_TYPE): Don't #undef/ #define.
+ (WCHAR_TYPE_SIZE): Likewise.
+ (ASM_SPEC): Use subtarget_asm_endian_spec.
+ (SH_ELF_WCHAR_TYPE): #undef/ #define.
+ (MAX_WCHAR_TYPE_SIZE): Don't #undef.
+ * config/sh/elf.h (WCHAR_UNSIGNED): #undef .
+ (MAX_WCHAR_TYPE_SIZE): Don't #define .
+ (WCHAR_TYPE, WCHAR_TYPE_SIZE): #undef / #define .
+ (USER_LABEL_PREFIX): Don't #undef /#define .
+ (DBX_REGISTER_NUMBER): Use SH_DBX_REGISTER_NUMBER.
+ * config/elf/linux.h (USER_LABEL_PREFIX): Don't #undef /#define .
+ (SIZE_TYPE, PTRDIFF_TYPE, WCHAR_TYPE, WCHAR_TYPE_SIZE): Likewise.
+ (ASM_SPEC): Likewise.
+ (SUBTARGET_ASM_ENDIAN_SPEC): #undef / #define .
+ (CC1_SPEC): don't supply -m3 for -m4*, -m5*.
+ * t-sh: (LIB1ASMFUNCS): Use LIB1ASMFUNCS_CACHE.
+ (LIB2FUNCS_EXTRA): Define.
+ * t-sh64 (LIB2FUNCS_EXTRA): Define.
+ * config/sh/t-linux (LIB1ASMFUNCS): Don't redefine.
+ (LIB1ASMFUNCS_CACHE): Define.
+ (LIB2FUNCS_EXTRA): Redefine empty.
+
2002-04-08 Richard Henderson <rth@redhat.com>
* reorg.c (get_branch_condition): Use reversed_comparison_code.
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 07afdce33a1..2934558c91d 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -2925,12 +2925,12 @@ s390x-*-linux*)
;;
sh-*-elf*)
tmake_file="sh/t-sh sh/t-elf"
- tm_file="${tm_file} sh/elf.h"
+ tm_file="${tm_file} sh/embed-elf.h"
float_format=sh
;;
sh64-*-elf*)
tmake_file="sh/t-sh sh/t-elf sh/t-sh64"
- tm_file="${tm_file} sh/sh.h sh/elf.h sh/sh64.h"
+ tm_file="${tm_file} sh/sh.h sh/embed-elf.h sh/sh64.h"
float_format=sh
extra_headers="../../config/sh/shmedia.h ../../config/sh/ushmedia.h ../../config/sh/sshmedia.h"
# Not strictly necessary to check this, but a good idea anyway.
@@ -2941,7 +2941,7 @@ sh64-*-elf*)
sh-*-rtemself*)
xm_defines=POSIX
tmake_file="sh/t-sh sh/t-elf t-rtems"
- tm_file="${tm_file} sh/elf.h sh/rtemself.h rtems.h"
+ tm_file="${tm_file} sh/embed-elf.h sh/rtemself.h rtems.h"
float_format=sh
if test x$enable_threads = xyes; then
thread_file='rtems'
diff --git a/gcc/config/sh/elf.h b/gcc/config/sh/elf.h
index d5aa9471057..247f735d494 100644
--- a/gcc/config/sh/elf.h
+++ b/gcc/config/sh/elf.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for gcc for Hitachi / SuperH SH using ELF.
- Copyright (C) 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 2000, 2001, 2002 Free Software Foundation, Inc.
Contributed by Ian Lance Taylor <ian@cygnus.com>.
This file is part of GNU CC.
@@ -30,6 +30,9 @@ Boston, MA 02111-1307, USA. */
#undef SIZE_TYPE
#undef PTRDIFF_TYPE
+/* And one that is defined in sh.h and should be undefined in svr4.h... */
+#undef WCHAR_UNSIGNED
+
/* Be ELF-like. */
/* TODO: convert includes to ${tm_file} list in config.gcc. */
#include "dbxelf.h"
@@ -49,17 +52,17 @@ Boston, MA 02111-1307, USA. */
/* use a more compact format for line information */
#define DWARF2_ASM_LINE_DEBUG_INFO 1
-/* WCHAR_TYPE_SIZE is defined to BITS_PER_WORD in svr4.h, but
- BITS_PER_WORD isn't constant any more. Fortunately, on no SH
- platform is it wider than 32-bits. */
-#define MAX_WCHAR_TYPE_SIZE 32
+/* WCHAR_TYPE / WCHAR_TYPE_SIZE are defined to long int / BITS_PER_WORD in
+ svr4.h, but these work out as 64 bit for shmedia64. */
+#undef WCHAR_TYPE
+/* #define WCHAR_TYPE (TARGET_SH5 ? "int" : "long int") */
+#define WCHAR_TYPE SH_ELF_WCHAR_TYPE
+
+#undef WCHAR_TYPE_SIZE
+#define WCHAR_TYPE_SIZE 32
-/* The prefix to add to user-visible assembler symbols.
- Note that svr4.h redefined it from the original value (that we want)
- in sh.h */
-#undef USER_LABEL_PREFIX
-#define USER_LABEL_PREFIX "_"
+/* The prefix to add to user-visible assembler symbols. */
#undef LOCAL_LABEL_PREFIX
#define LOCAL_LABEL_PREFIX "."
@@ -109,29 +112,7 @@ Boston, MA 02111-1307, USA. */
/* svr4.h undefined DBX_REGISTER_NUMBER, so we need to define it
again. */
-#define DBX_REGISTER_NUMBER(REGNO) \
- (GENERAL_REGISTER_P (REGNO) \
- ? ((REGNO) - FIRST_GENERAL_REG) \
- : FP_REGISTER_P (REGNO) \
- ? ((REGNO) - FIRST_FP_REG + (TARGET_SH5 ? (TARGET_SHCOMPACT ? 245 \
- : 77) : 25)) \
- : XD_REGISTER_P (REGNO) \
- ? ((REGNO) - FIRST_XD_REG + (TARGET_SH5 ? 289 : 87)) \
- : TARGET_REGISTER_P (REGNO) \
- ? ((REGNO) - FIRST_TARGET_REG + 68) \
- : (REGNO) == PR_REG \
- ? (TARGET_SH5 ? 241 : 17) \
- : (REGNO) == T_REG \
- ? (TARGET_SH5 ? 242 : 18) \
- : (REGNO) == GBR_REG \
- ? (TARGET_SH5 ? 238 : 19) \
- : (REGNO) == MACH_REG \
- ? (TARGET_SH5 ? 239 : 20) \
- : (REGNO) == MACL_REG \
- ? (TARGET_SH5 ? 240 : 21) \
- : (REGNO) == FPUL_REG \
- ? (TARGET_SH5 ? 244 : 23) \
- : (abort(), -1))
+#define DBX_REGISTER_NUMBER(REGNO) SH_DBX_REGISTER_NUMBER (REGNO)
#undef ASM_GENERATE_INTERNAL_LABEL
#define ASM_GENERATE_INTERNAL_LABEL(STRING, PREFIX, NUM) \
diff --git a/gcc/config/sh/embed-elf.h b/gcc/config/sh/embed-elf.h
new file mode 100644
index 00000000000..4afc78339ad
--- /dev/null
+++ b/gcc/config/sh/embed-elf.h
@@ -0,0 +1,28 @@
+/* Definitions of target machine for GNU compiler for Hitachi / SuperH SH
+ non-Linux embedded targets.
+ Copyright (C) 2002 Free Software Foundation, Inc.
+ Contributed by J"orn Rennecke <joern.rennecke@superh.com>
+
+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 2, or (at your option)
+any later version.
+
+GNU CC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "sh/elf.h"
+
+#undef USER_LABEL_PREFIX
+#define USER_LABEL_PREFIX "_"
+
+#undef TARGET_HAS_F_SETLKW
diff --git a/gcc/config/sh/embed_bb.c b/gcc/config/sh/embed_bb.c
new file mode 100644
index 00000000000..722b101463c
--- /dev/null
+++ b/gcc/config/sh/embed_bb.c
@@ -0,0 +1,3 @@
+#define L_bb
+#undef inhibit_libc
+#include "../../libgcc2.c"
diff --git a/gcc/config/sh/linux.h b/gcc/config/sh/linux.h
index a9a3f22e3fd..be5bcb58148 100644
--- a/gcc/config/sh/linux.h
+++ b/gcc/config/sh/linux.h
@@ -1,5 +1,5 @@
/* Definitions for SH running Linux-based GNU systems using ELF
- Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
Contributed by Kazumoto Kojima <kkojima@rr.iij4u.or.jp>
This file is part of GNU CC.
@@ -23,22 +23,6 @@ Boston, MA 02111-1307, USA. */
#undef TARGET_VERSION
#define TARGET_VERSION fputs (" (SH GNU/Linux with ELF)", stderr);
-/* Return to the original ELF way. */
-#undef USER_LABEL_PREFIX
-#define USER_LABEL_PREFIX ""
-
-#undef SIZE_TYPE
-#define SIZE_TYPE "unsigned int"
-
-#undef PTRDIFF_TYPE
-#define PTRDIFF_TYPE "int"
-
-#undef WCHAR_TYPE
-#define WCHAR_TYPE "long int"
-
-#undef WCHAR_TYPE_SIZE
-#define WCHAR_TYPE_SIZE BITS_PER_WORD
-
#undef SUBTARGET_CPP_SPEC
#define SUBTARGET_CPP_SPEC "\
%{fPIC:-D__PIC__ -D__pic__} \
@@ -59,12 +43,12 @@ Boston, MA 02111-1307, USA. */
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "-D__ELF__ -Dunix -D__sh__ -Dlinux -Asystem=posix"
-#undef ASM_SPEC
-#define ASM_SPEC "%{!mb:-little} %{mrelax:-relax}"
+#undef SUBTARGET_ASM_ENDIAN_SPEC
+#define SUBTARGET_ASM_ENDIAN_SPEC "%{!mb:-little}"
#undef CC1_SPEC
#define CC1_SPEC \
- "-musermode %{!mb:-ml} %{!m3e:%{!m4:-m3}}"
+ "-musermode %{!mb:-ml} %{!m3e:%{!m4*:%{!m5*:-m3}}}"
#undef CC1PLUS_SPEC
#define CC1PLUS_SPEC \
diff --git a/gcc/config/sh/sh-protos.h b/gcc/config/sh/sh-protos.h
index d7a1162e46c..6abdfe6258d 100644
--- a/gcc/config/sh/sh-protos.h
+++ b/gcc/config/sh/sh-protos.h
@@ -1,4 +1,4 @@
-/* Definitions of target machine for GNU compiler for Hitachi / SuperH SH
+/* Definitions of target machine for GNU compiler for Hitachi / SuperH SH.
Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
Free Software Foundation, Inc.
Contributed by Steve Chamberlain (sac@cygnus.com).
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 882a778e901..ff3c08930ea 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -4343,10 +4343,11 @@ calc_live_regs (count_ptr, live_regs_mask)
target_flags &= ~FPU_SINGLE_BIT;
break;
}
- pr_initial = has_hard_reg_initial_val (Pmode, PR_REG);
+ pr_initial = has_hard_reg_initial_val (Pmode,
+ TARGET_SH5 ? PR_MEDIA_REG : PR_REG);
pr_live = (pr_initial
- ? REGNO (pr_initial) != PR_REG
- : regs_ever_live[PR_REG]);
+ ? REGNO (pr_initial) != (TARGET_SH5 ? PR_MEDIA_REG : PR_REG)
+ : regs_ever_live[TARGET_SH5 ? PR_MEDIA_REG : PR_REG]);
/* Force PR to be live if the prologue has to call the SHmedia
argument decoder or register saver. */
if (TARGET_SHCOMPACT
@@ -4356,7 +4357,7 @@ calc_live_regs (count_ptr, live_regs_mask)
pr_live = 1;
for (count = 0, reg = FIRST_PSEUDO_REGISTER - 1; reg >= 0; reg--)
{
- if (reg == PR_REG
+ if (reg == (TARGET_SH5 ? PR_MEDIA_REG : PR_REG)
? pr_live
: (interrupt_handler && ! pragma_trapa)
? (/* Need to save all the regs ever live. */
@@ -6697,7 +6698,7 @@ sh_adjust_cost (insn, link, dep_insn, cost)
int
sh_pr_n_sets ()
{
- return REG_N_SETS (PR_REG);
+ return REG_N_SETS (TARGET_SH5 ? PR_MEDIA_REG : PR_REG);
}
/* SHmedia requires registers for branches, so we can't generate new
diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h
index 75e7d5eae3f..0f9345cd302 100644
--- a/gcc/config/sh/sh.h
+++ b/gcc/config/sh/sh.h
@@ -56,10 +56,11 @@ extern int code_for_indirect_jump_scratch;
%{m4-single:-D__SH4_SINGLE__} \
%{m4-nofpu:-D__sh3__ -D__SH4_NOFPU__} \
%{m4:-D__SH4__} \
+%{m1|m2|m3*|m4*:-D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int} \
+%{m5*:-D__SIZE_TYPE__=long\\ unsigned\\ int -D__PTRDIFF_TYPE__=long\\ int} \
%{!m1:%{!m2:%{!m3*:%{!m4*:%{!m5*:%(cpp_default_cpu_spec)}}}}} \
%{mhitachi:-D__HITACHI__} \
%(subtarget_cpp_spec) \
-%(subtarget_cpp_ptr_spec) \
%(subtarget_cpp_endian_spec) "
#ifndef SUBTARGET_CPP_ENDIAN_SPEC
@@ -71,25 +72,24 @@ extern int code_for_indirect_jump_scratch;
#endif
#ifndef CPP_DEFAULT_CPU_SPEC
-#define CPP_DEFAULT_CPU_SPEC "-D__sh1__"
+#define CPP_DEFAULT_CPU_SPEC \
+ "-D__sh1__ -D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int"
#endif
-#ifndef SUBTARGET_CPP_PTR_SPEC
-#define SUBTARGET_CPP_PTR_SPEC "\
-%{m5-64media|m5-64media-nofpu|m5-32media|m5-32media-nofpu|m5-compact|m5-compact-nofpu:-D__SIZE_TYPE__=long\\ unsigned\\ int -D__PTRDIFF_TYPE__=long\\ int} \
-%{!m5-64media:%{!m5-64media-nofpu:%{!m5-32media:%{!m5-32media-nofpu:%{!m5-compact:%{!m5-compact-nofpu:-D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int}}}}}} \
-"
-#endif
#define EXTRA_SPECS \
{ "subtarget_cpp_spec", SUBTARGET_CPP_SPEC }, \
{ "subtarget_cpp_endian_spec", SUBTARGET_CPP_ENDIAN_SPEC }, \
- { "subtarget_cpp_ptr_spec", SUBTARGET_CPP_PTR_SPEC }, \
- { "cpp_default_cpu_spec", CPP_DEFAULT_CPU_SPEC },
+ { "cpp_default_cpu_spec", CPP_DEFAULT_CPU_SPEC }, \
+ { "subtarget_asm_endian_spec", SUBTARGET_ASM_ENDIAN_SPEC },
#define CPP_PREDEFINES "-D__sh__ -Acpu=sh -Amachine=sh"
-#define ASM_SPEC "%{ml:-little} %{mrelax:-relax}"
+#define ASM_SPEC "%(subtarget_asm_endian_spec) %{mrelax:-relax}"
+
+#ifndef SUBTARGET_ASM_ENDIAN_SPEC
+#define SUBTARGET_ASM_ENDIAN_SPEC "%{ml:-little}"
+#endif
#define LINK_SPEC "%{ml:-m shl} %{mrelax:-relax}"
@@ -2057,7 +2057,7 @@ while (0)
#define RETURN_ADDR_RTX(COUNT, FRAME) \
(((COUNT) == 0) \
- ? get_hard_reg_initial_val (Pmode, PR_REG) \
+ ? get_hard_reg_initial_val (Pmode, TARGET_SHMEDIA ? PR_MEDIA_REG : PR_REG) \
: (rtx) 0)
/* Generate necessary RTL for __builtin_saveregs(). */
@@ -2522,6 +2522,9 @@ while (0)
#define WCHAR_TYPE "short unsigned int"
#define WCHAR_TYPE_SIZE 16
+#define WCHAR_UNSIGNED 1
+
+#define SH_ELF_WCHAR_TYPE "long int"
/* Don't cse the address of the function being compiled. */
/*#define NO_RECURSIVE_FUNCTION_CSE 1*/
@@ -2892,8 +2895,11 @@ while (0)
/* DBX register number for a given compiler register number. */
/* GDB has FPUL at 23 and FP0 at 25, so we must add one to all FP registers
to match gdb. */
-/* If you change this macro, make sure you update it in elf.h too. */
-#define DBX_REGISTER_NUMBER(REGNO) \
+/* svr4.h undefines this macro, yet we really want to use the same numbers
+ for coff as for elf, so we go via another macro: SH_DBX_REGISTER_NUMBER. */
+#define DBX_REGISTER_NUMBER(REGNO) SH_DBX_REGISTER_NUMBER (REGNO)
+
+#define SH_DBX_REGISTER_NUMBER(REGNO) \
(GENERAL_REGISTER_P (REGNO) \
? ((REGNO) - FIRST_GENERAL_REG) \
: FP_REGISTER_P (REGNO) \
@@ -3298,10 +3304,13 @@ extern struct rtx_def *fpscr_rtx;
#endif /* (defined CRT_BEGIN || defined CRT_END) && ! __SHMEDIA__ */
#define ALLOCATE_INITIAL_VALUE(hard_reg) \
- (REGNO (hard_reg) == PR_REG \
+ (REGNO (hard_reg) == (TARGET_SH5 ? PR_MEDIA_REG : PR_REG) \
? (current_function_is_leaf && ! sh_pr_n_sets () \
? (hard_reg) \
- : gen_rtx_MEM (Pmode, arg_pointer_rtx)) \
+ : gen_rtx_MEM (Pmode, TARGET_SH5 \
+ ? (plus_constant (arg_pointer_rtx, \
+ TARGET_SHMEDIA64 ? -8 : -4)) \
+ : frame_pointer_rtx)) \
: NULL_RTX)
#endif /* ! GCC_SH_H */
diff --git a/gcc/config/sh/sh64.h b/gcc/config/sh/sh64.h
index c23c354565f..a2e225d841b 100644
--- a/gcc/config/sh/sh64.h
+++ b/gcc/config/sh/sh64.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler for SuperH SH 5.
- Copyright 2000, 2001 Free Software Foundation, Inc.
+ Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
Contributed by Alexandre Oliva <aoliva@redhat.com>
This file is part of GNU CC.
@@ -24,20 +24,15 @@ Boston, MA 02111-1307, USA. */
fputs (" (SuperH SH)", stderr);
#undef CPP_DEFAULT_CPU_SPEC
-#define CPP_DEFAULT_CPU_SPEC "-D__SH5__=32 -D__SHMEDIA__"
-
-#undef SUBTARGET_CPP_PTR_SPEC
-#define SUBTARGET_CPP_PTR_SPEC "\
-%{!m1:%{!m2:%{!m3:%{!m3e:%{!m4:%{!m4-single:%{!m4-single-only:%{!m4-nofpu:-D__SIZE_TYPE__=long\\ unsigned\\ int -D__PTRDIFF_TYPE__=long\\ int}}}}}}}} \
-%{m1|m2|m3|m3e|m4|m4-single|m4-single-only|m4-nofpu:-D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int} \
-"
+#define CPP_DEFAULT_CPU_SPEC "-D__SH5__=32 -D__SHMEDIA__ \
+-D__SIZE_TYPE__=long\\ unsigned\\ int -D__PTRDIFF_TYPE__=long\\ int"
#undef ASM_SPEC
-#define ASM_SPEC "%{ml:-little} %{mrelax:-relax} \
-%{m5-compact:--isa=SHcompact} %{m5-compact-nofpu:--isa=shcompact} \
-%{m5-32media:--isa=SHmedia --abi=32} %{m5-32media-nofpu:--isa=SHmedia --abi=32} \
-%{m5-64media:--isa=SHmedia --abi=64} %{m5-64media-nofpu:--isa=SHmedia --abi=64} \
-%{!m1:%{!m2:%{!m3:%{!m3e:%{!m4:%{!m4-single:%{!m4-single-only:%{!m4-nofpu:%{!m5-64media:%{!m5-64media-nofpu:%{!m5-32media:%{!m5-32media-nofpu:%{!m5-compact:%{!m5-compact-nofpu:--isa=SHmedia --abi=32}}}}}}}}}}}}}} \
+#define ASM_SPEC "%(subtarget_asm_endian_spec) %{mrelax:-relax} \
+%{m5-compact*:--isa=SHcompact} \
+%{m5-32media*:--isa=SHmedia --abi=32} \
+%{m5-64media*:--isa=SHmedia --abi=64} \
+%{!m1:%{!m2:%{!m3*:%{!m4*:%{!m5*:--isa=SHmedia --abi=32}}}}} \
"
#undef LINK_SPEC
@@ -54,12 +49,5 @@ Boston, MA 02111-1307, USA. */
#undef TARGET_DEFAULT
#define TARGET_DEFAULT (SH5_BIT|SH4_BIT|SH3E_BIT)
-/* These have been overridden in svr4.h, included in elf.h. Restore
- them. */
-#undef WCHAR_TYPE
-#define WCHAR_TYPE "short unsigned int"
-
-#undef WCHAR_TYPE_SIZE
-#define WCHAR_TYPE_SIZE 16
-
-#undef MAX_WCHAR_TYPE_SIZE
+#undef SH_ELF_WCHAR_TYPE
+#define SH_ELF_WCHAR_TYPE "int"
diff --git a/gcc/config/sh/t-linux b/gcc/config/sh/t-linux
index 5e4ed91a3c1..a0343b47d80 100644
--- a/gcc/config/sh/t-linux
+++ b/gcc/config/sh/t-linux
@@ -1,7 +1,7 @@
TARGET_LIBGCC2_CFLAGS = -fpic
-LIB1ASMFUNCS = _ashiftrt _ashiftrt_n _ashiftlt _lshiftrt _movstr \
- _movstr_i4 _mulsi3 _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
- _ic_invalidate
+LIB1ASMFUNCS_CACHE = _ic_invalidate
+
+LIB2FUNCS_EXTRA=
MULTILIB_OPTIONS= mb m3e/m4
MULTILIB_DIRNAMES=
diff --git a/gcc/config/sh/t-sh b/gcc/config/sh/t-sh
index 9788c49c7d9..15433f93b9d 100644
--- a/gcc/config/sh/t-sh
+++ b/gcc/config/sh/t-sh
@@ -1,6 +1,9 @@
LIB1ASMSRC = sh/lib1funcs.asm
LIB1ASMFUNCS = _ashiftrt _ashiftrt_n _ashiftlt _lshiftrt _movstr \
- _movstr_i4 _mulsi3 _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr
+ _movstr_i4 _mulsi3 _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
+ $(LIB1ASMFUNCS_CACHE)
+
+LIB2FUNCS_EXTRA=$(srcdir)/config/sh/embed_bb.c
# We want fine grained libraries, so use the new code to build the
# floating point emulation libraries.
diff --git a/gcc/config/sh/t-sh64 b/gcc/config/sh/t-sh64
index c3329893019..91c1db80c16 100644
--- a/gcc/config/sh/t-sh64
+++ b/gcc/config/sh/t-sh64
@@ -6,6 +6,8 @@ LIB1ASMFUNCS = \
_shcompact_incoming_args _ic_invalidate _nested_trampoline \
_push_pop_shmedia_regs
+LIB2FUNCS_EXTRA=$(srcdir)/config/sh/embed_bb.c
+
MULTILIB_OPTIONS= ml m5-32media-nofpu/m5-compact/m5-compact-nofpu/m5-64media/m5-64media-nofpu
MULTILIB_DIRNAMES= ml nofpu compact nofpu/compact media64 nofpu/media64
MULTILIB_MATCHES=