]>
Commit | Line | Data |
---|---|---|
73a4d10b R |
1 | /* Definitions of target machine for gcc for Super-H using sh-superh-elf. |
2 | Copyright (C) 2001 Free Software Foundation, Inc. | |
3 | ||
4 | This file is part of GNU CC. | |
5 | ||
6 | GNU CC is free software; you can redistribute it and/or modify | |
7 | it under the terms of the GNU General Public License as published by | |
8 | the Free Software Foundation; either version 2, or (at your option) | |
9 | any later version. | |
10 | ||
11 | GNU CC is distributed in the hope that it will be useful, | |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | GNU General Public License for more details. | |
15 | ||
16 | You should have received a copy of the GNU General Public License | |
17 | along with GNU CC; see the file COPYING. If not, write to | |
18 | the Free Software Foundation, 59 Temple Place - Suite 330, | |
19 | Boston, MA 02111-1307, USA. */ | |
20 | ||
21 | ||
22 | /* This header file is used when the vendor name is set to 'superh'. | |
23 | It configures the compiler for SH4 only and switches the default | |
24 | endianess to little (although big endian is still available). | |
25 | It also configures the spec file to the default board configuration | |
26 | but in such a way that it can be overriden by a boardspecs file | |
27 | (using the -specs= option). This file is expected to disable the | |
28 | defaults and provide options --defsym _start and --defsym _stack | |
29 | which are required by the SuperH configuration of GNU ld. | |
30 | ||
31 | This file is intended to overide sh.h */ | |
32 | ||
33 | ||
34 | #ifndef _SUPERH_H | |
35 | #define _SUPERH_H | |
36 | #endif | |
37 | ||
38 | ||
39 | #undef TARGET_VERSION | |
40 | #define TARGET_VERSION fprintf (stderr, " (SuperH SH special %s)", __DATE__); | |
41 | ||
42 | ||
43 | /* We override TARGET_PROCESSOR_SWITCHES in order to remove all the unrequired cpu options | |
44 | and add options for all the SuperH CPU variants: | |
45 | -m4-100 is an alias for -m4. | |
46 | -m4-200 is an alias for -m4. | |
47 | -m4-400 is an alias for -m4-nofpu and passes -isa=sh4-nommu-nofpu to the assembler. | |
48 | -m4-500 is an alias for -m4-nofpu and passes -isa=sh4-nofpu to the assembler. */ | |
49 | #undef TARGET_PROCESSOR_SWITCHES | |
50 | #define TARGET_PROCESSOR_SWITCHES \ | |
51 | {"4-500", TARGET_NONE, "SH4 500 series (FPU-less)" }, \ | |
52 | {"4-500", SELECT_SH4_NOFPU, "" }, \ | |
53 | {"4-400", TARGET_NONE, "SH4 400 series (MMU/FPU-less)" }, \ | |
54 | {"4-400", SELECT_SH4_NOFPU, "" }, \ | |
55 | {"4-200-single-only", TARGET_NONE, "SH4 200 series with double = float (SH3e ABI)" }, \ | |
56 | {"4-200-single-only", SELECT_SH4_SINGLE_ONLY, "" }, \ | |
57 | {"4-200-single", TARGET_NONE, "SH4 200 series with single precision pervading" }, \ | |
58 | {"4-200-single", SELECT_SH4_SINGLE, "" }, \ | |
59 | {"4-200-nofpu", TARGET_NONE, "SH4 200 series using soft floating point" }, \ | |
60 | {"4-200-nofpu", SELECT_SH4_NOFPU, "" }, \ | |
61 | {"4-200", TARGET_NONE, "SH4 200 series" }, \ | |
62 | {"4-200", SELECT_SH4_NOFPU, "" }, \ | |
63 | {"4-100-single-only", TARGET_NONE, "SH4 100 series with double = float (SH3e ABI)" }, \ | |
64 | {"4-100-single-only", SELECT_SH4_SINGLE_ONLY, "" }, \ | |
65 | {"4-100-single", TARGET_NONE, "SH4 100 series with single precision pervading" }, \ | |
66 | {"4-100-single", SELECT_SH4_SINGLE, "" }, \ | |
67 | {"4-100-nofpu", TARGET_NONE, "SH4 100 series using soft floating point" }, \ | |
68 | {"4-100-nofpu", SELECT_SH4_NOFPU, "" }, \ | |
69 | {"4-100", TARGET_NONE, "SH4 100 series" }, \ | |
70 | {"4-100", SELECT_SH4_NOFPU, "" }, \ | |
71 | {"4-single-only", TARGET_NONE, "Generic SH4 with double = float (SH3e ABI)" }, \ | |
72 | {"4-single-only", SELECT_SH4_SINGLE_ONLY, "" }, \ | |
73 | {"4-single", TARGET_NONE, "Generic SH4 with single precision pervading" }, \ | |
74 | {"4-single", SELECT_SH4_SINGLE, "" }, \ | |
75 | {"4-nofpu", TARGET_NONE, "Generic SH4 using soft floating point" }, \ | |
76 | {"4-nofpu", SELECT_SH4_NOFPU, "" }, \ | |
77 | {"4", TARGET_NONE, "Generic SH4 (default)" }, \ | |
78 | {"4", SELECT_SH4, "" } | |
79 | ||
80 | ||
81 | /* Provide the -mboard= option used by the boardspecs file */ | |
82 | #undef SUBTARGET_OPTIONS | |
83 | #define SUBTARGET_OPTIONS \ | |
84 | { "board=", &boardtype, "Board name [and momory region].", 0 }, \ | |
85 | { "runtime=", &osruntime, "Runtime name.", 0 }, \ | |
86 | ||
87 | /* These are required by the mboard= option and runtime= option | |
88 | and are defined in sh.c but are not used anywhere */ | |
89 | extern const char * boardtype; | |
90 | extern const char * osruntime; | |
91 | ||
92 | ||
93 | /* Override the linker spec strings to use the new emultation | |
94 | The specstrings are concatenated as follows | |
95 | LINK_EMUL_PREFIX.(''|'32'|'64'|LINK_DEFAULT_CPU_EMUL).SUBTARGET_LINK_EMUL_SUFFIX | |
96 | */ | |
97 | #undef LINK_EMUL_PREFIX | |
98 | #undef SUBTARGET_LINK_EMUL_SUFFIX | |
99 | ||
100 | #define LINK_EMUL_PREFIX "superh" | |
101 | #define SUBTARGET_LINK_EMUL_SUFFIX "" | |
102 | ||
103 | /* Add the SUBTARGET_LINK_SPEC to add the board and runtime support and | |
104 | change the endianness */ | |
105 | #undef SUBTARGET_LINK_SPEC | |
106 | #if TARGET_ENDIAN_DEFAULT == LITTLE_ENDIAN_BIT | |
107 | #define SUBTARGET_LINK_SPEC "%(board_link) %(ldruntime) %{ml|!mb:-EL}%{mb:-EB}" | |
108 | #else | |
109 | #define SUBTARGET_LINK_SPEC "%(board_link) %(ldruntime) %{ml:-EL}%{mb|!ml:-EB}" | |
110 | #endif | |
111 | ||
112 | ||
113 | /* This is used by the link spec if the boardspecs file is not used (for whatever reason). | |
114 | If the boardspecs file overrides this then an alternative can be used. */ | |
115 | #undef SUBTARGET_EXTRA_SPECS | |
116 | #define SUBTARGET_EXTRA_SPECS \ | |
117 | { "board_link", "--defsym _start=0x1000 --defsym _stack=0x30000" }, \ | |
118 | { "asruntime", "" }, \ | |
119 | { "cppruntime", "-D__GDB_SIM__" }, \ | |
120 | { "cc1runtime", "" }, \ | |
121 | { "ldruntime", "" }, \ | |
122 | { "libruntime", "-lc -lgloss" } | |
123 | ||
124 | ||
125 | /* Set the SUBTARGET_CPP_SPEC to define __EMBEDDED_CROSS__ which has an effect | |
126 | on newlib and provide the runtime support */ | |
127 | #undef SUBTARGET_CPP_SPEC | |
128 | #define SUBTARGET_CPP_SPEC \ | |
129 | "-D__EMBEDDED_CROSS__ %{m4-100*:-D__SH4_100__} %{m4-200*:-D__SH4_200__} %{m4-400:-D__SH4_400__} %{m4-500:-D__SH4_500__} \ | |
130 | %(cppruntime)" | |
131 | ||
132 | /* Override the SUBTARGET_ASM_SPEC to add the runtime support */ | |
133 | #undef SUBTARGET_ASM_SPEC | |
134 | #define SUBTARGET_ASM_SPEC "%{m4-100*|m4-200*:-isa=sh4} %{m4-400:-isa=sh4-nommu-nofpu} %{m4-500:-isa=sh4-nofpu} %(asruntime)" | |
135 | ||
136 | /* Override the SUBTARGET_ASM_RELAX_SPEC so it doesn't interfere with the | |
137 | runtime support by adding -isa=sh4 in the wrong place. */ | |
138 | #undef SUBTARGET_ASM_RELAX_SPEC | |
139 | #define SUBTARGET_ASM_RELAX_SPEC "%{!m4-100*:%{!m4-200*:%{!m4-400:%{!m4-500:-isa=sh4}}}}" | |
140 | ||
141 | /* Create the CC1_SPEC to add the runtime support */ | |
142 | #undef CC1_SPEC | |
143 | #define CC1_SPEC "%(cc1runtime)" | |
144 | ||
145 | #undef CC1PLUS_SPEC | |
146 | #define CC1PLUS_SPEC "%(cc1runtime)" | |
147 | ||
148 | ||
149 | /* Override the LIB_SPEC to add the runtime support */ | |
150 | #undef LIB_SPEC | |
151 | #define LIB_SPEC "%{!shared:%{!symbolic:%(libruntime) -lc}} %{pg:-lprofile -lc}" |