]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/gcc/config/mips/netbsd.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / contrib / gcc / config / mips / netbsd.h
1 /* Definitions of target machine for GNU compiler, for MIPS NetBSD systems.
2    Copyright (C) 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004
3    Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
20 Boston, MA 02110-1301, USA.  */
21
22
23 /* Define default target values.  */
24
25 #undef MACHINE_TYPE
26 #if TARGET_ENDIAN_DEFAULT != 0
27 #define MACHINE_TYPE "NetBSD/mipseb ELF"
28 #else
29 #define MACHINE_TYPE "NetBSD/mipsel ELF"
30 #endif
31
32 #define TARGET_OS_CPP_BUILTINS()                        \
33   do                                                    \
34     {                                                   \
35       NETBSD_OS_CPP_BUILTINS_ELF();                     \
36       builtin_define ("__NO_LEADING_UNDERSCORES__");    \
37       builtin_define ("__GP_SUPPORT__");                \
38       if (TARGET_LONG64)                                \
39         builtin_define ("__LONG64");                    \
40                                                         \
41       if (TARGET_ABICALLS)                              \
42         builtin_define ("__ABICALLS__");                \
43                                                         \
44       if (mips_abi == ABI_EABI)                         \
45         builtin_define ("__mips_eabi");                 \
46       else if (mips_abi == ABI_N32)                     \
47         builtin_define ("__mips_n32");                  \
48       else if (mips_abi == ABI_64)                      \
49         builtin_define ("__mips_n64");                  \
50       else if (mips_abi == ABI_O64)                     \
51         builtin_define ("__mips_o64");                  \
52     }                                                   \
53   while (0)
54
55 /* The generic MIPS TARGET_CPU_CPP_BUILTINS are incorrect for NetBSD.
56    Specifically, they define too many namespace-invasive macros.  Override
57    them here.  Note this is structured for easy comparison to the version
58    in mips.h.
59
60    FIXME: This probably isn't the best solution.  But in the absence
61    of something better, it will have to do, for now.  */
62
63 #undef TARGET_CPU_CPP_BUILTINS
64 #define TARGET_CPU_CPP_BUILTINS()                               \
65   do                                                            \
66     {                                                           \
67       builtin_assert ("cpu=mips");                              \
68       builtin_define ("__mips__");                              \
69       builtin_define ("_mips");                                 \
70                                                                 \
71       /* No _R3000 or _R4000.  */                               \
72       if (TARGET_64BIT)                                         \
73         builtin_define ("__mips64");                            \
74                                                                 \
75       if (TARGET_FLOAT64)                                       \
76         builtin_define ("__mips_fpr=64");                       \
77       else                                                      \
78         builtin_define ("__mips_fpr=32");                       \
79                                                                 \
80       if (TARGET_MIPS16)                                        \
81         builtin_define ("__mips16");                            \
82                                                                 \
83       MIPS_CPP_SET_PROCESSOR ("_MIPS_ARCH", mips_arch_info);    \
84       MIPS_CPP_SET_PROCESSOR ("_MIPS_TUNE", mips_tune_info);    \
85                                                                 \
86       if (ISA_MIPS1)                                            \
87         builtin_define ("__mips=1");                            \
88       else if (ISA_MIPS2)                                       \
89         builtin_define ("__mips=2");                            \
90       else if (ISA_MIPS3)                                       \
91         builtin_define ("__mips=3");                            \
92       else if (ISA_MIPS4)                                       \
93         builtin_define ("__mips=4");                            \
94       else if (ISA_MIPS32)                                      \
95         {                                                       \
96           builtin_define ("__mips=32");                         \
97           builtin_define ("__mips_isa_rev=1");                  \
98         }                                                       \
99       else if (ISA_MIPS32R2)                                    \
100         {                                                       \
101           builtin_define ("__mips=32");                         \
102           builtin_define ("__mips_isa_rev=2");                  \
103         }                                                       \
104       else if (ISA_MIPS64)                                      \
105         {                                                       \
106           builtin_define ("__mips=64");                         \
107           builtin_define ("__mips_isa_rev=1");                  \
108         }                                                       \
109                                                                 \
110       if (TARGET_HARD_FLOAT)                                    \
111         builtin_define ("__mips_hard_float");                   \
112       else if (TARGET_SOFT_FLOAT)                               \
113         builtin_define ("__mips_soft_float");                   \
114                                                                 \
115       if (TARGET_SINGLE_FLOAT)                                  \
116         builtin_define ("__mips_single_float");                 \
117                                                                 \
118       if (TARGET_BIG_ENDIAN)                                    \
119         builtin_define ("__MIPSEB__");                          \
120       else                                                      \
121         builtin_define ("__MIPSEL__");                          \
122                                                                 \
123       /* No language dialect defines.  */                       \
124                                                                 \
125       /* ABIs handled in TARGET_OS_CPP_BUILTINS.  */            \
126     }                                                           \
127   while (0)
128
129
130 /* Clean up after the generic MIPS/ELF configuration.  */
131 #undef MD_EXEC_PREFIX
132 #undef MD_STARTFILE_PREFIX
133
134 /* Extra specs we need.  */
135 #undef SUBTARGET_EXTRA_SPECS
136 #define SUBTARGET_EXTRA_SPECS                                           \
137   { "netbsd_cpp_spec",          NETBSD_CPP_SPEC },                      \
138   { "netbsd_link_spec",         NETBSD_LINK_SPEC_ELF },                 \
139   { "netbsd_entry_point",       NETBSD_ENTRY_POINT },
140
141 /* Provide a SUBTARGET_CPP_SPEC appropriate for NetBSD.  */
142
143 #undef SUBTARGET_CPP_SPEC
144 #define SUBTARGET_CPP_SPEC "%(netbsd_cpp_spec)"
145
146 /* Provide a LINK_SPEC appropriate for a NetBSD/mips target.
147    This is a copy of LINK_SPEC from <netbsd-elf.h> tweaked for
148    the MIPS target.  */
149
150 #undef LINK_SPEC
151 #define LINK_SPEC \
152   "%{EL:-m elf32lmip} \
153    %{EB:-m elf32bmip} \
154    %(endian_spec) \
155    %{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips32r2} %{mips64} \
156    %{bestGnum} %{call_shared} %{no_archive} %{exact_version} \
157    %(netbsd_link_spec)"
158
159 #define NETBSD_ENTRY_POINT "__start"
160
161 #undef SUBTARGET_ASM_SPEC
162 #define SUBTARGET_ASM_SPEC \
163   "%{!mno-abicalls: \
164      %{!fno-PIC:%{!fno-pic:-KPIC}}}"
165
166
167 /* -G is incompatible with -KPIC which is the default, so only allow objects
168    in the small data section if the user explicitly asks for it.  */
169
170 #undef MIPS_DEFAULT_GVALUE
171 #define MIPS_DEFAULT_GVALUE 0
172
173
174 /* This defines which switch letters take arguments.  -G is a MIPS
175    special.  */
176
177 #undef SWITCH_TAKES_ARG
178 #define SWITCH_TAKES_ARG(CHAR)                                          \
179   (DEFAULT_SWITCH_TAKES_ARG (CHAR)                                      \
180    || (CHAR) == 'R'                                                     \
181    || (CHAR) == 'G')
182
183
184 #undef ASM_FINAL_SPEC
185 #undef SET_ASM_OP
186
187
188 /* NetBSD hasn't historically provided _flush_cache(), but rather
189    _cacheflush(), which takes the same arguments as the former.  */
190 #undef CACHE_FLUSH_FUNC
191 #define CACHE_FLUSH_FUNC "_cacheflush"
192
193
194 /* Make gcc agree with <machine/ansi.h> */
195
196 #undef WCHAR_TYPE
197 #define WCHAR_TYPE "int"
198
199 #undef WCHAR_TYPE_SIZE
200 #define WCHAR_TYPE_SIZE 32
201
202 #undef WINT_TYPE
203 #define WINT_TYPE "int"