netbsd64.h revision 1.1.1.2 1 1.1 mrg /* Definitions of target machine for GNU compiler,
2 1.1 mrg for 64 bit PowerPC NetBSD.
3 1.1 mrg Copyright (C) 2006 Free Software Foundation, Inc.
4 1.1 mrg Contributed by Matthew Green (mrg (at) eterna.com.au).
5 1.1 mrg
6 1.1 mrg This file is part of GCC.
7 1.1 mrg
8 1.1 mrg GCC is free software; you can redistribute it and/or modify it
9 1.1 mrg under the terms of the GNU General Public License as published
10 1.1 mrg by the Free Software Foundation; either version 2, or (at your
11 1.1 mrg option) any later version.
12 1.1 mrg
13 1.1 mrg GCC is distributed in the hope that it will be useful, but WITHOUT
14 1.1 mrg ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 1.1 mrg or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
16 1.1 mrg License for more details.
17 1.1 mrg
18 1.1 mrg You should have received a copy of the GNU General Public License
19 1.1 mrg along with GCC; see the file COPYING. If not, write to the
20 1.1 mrg Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
21 1.1 mrg MA 02110-1301, USA. */
22 1.1 mrg
23 1.1 mrg #ifndef RS6000_BI_ARCH
24 1.1 mrg
25 1.1 mrg #undef DEFAULT_ABI
26 1.1 mrg #define DEFAULT_ABI ABI_AIX
27 1.1 mrg
28 1.1 mrg #undef TARGET_64BIT
29 1.1 mrg #define TARGET_64BIT 1
30 1.1 mrg
31 1.1 mrg #define DEFAULT_ARCH64_P 1
32 1.1 mrg #define RS6000_BI_ARCH_P 0
33 1.1 mrg
34 1.1 mrg #else
35 1.1 mrg
36 1.1 mrg #define DEFAULT_ARCH64_P (TARGET_DEFAULT & MASK_64BIT)
37 1.1 mrg #define RS6000_BI_ARCH_P 1
38 1.1 mrg
39 1.1 mrg #endif
40 1.1 mrg
41 1.1 mrg #ifdef IN_LIBGCC2
42 1.1 mrg #undef TARGET_64BIT
43 1.1 mrg #ifdef __powerpc64__
44 1.1 mrg #define TARGET_64BIT 1
45 1.1 mrg #else
46 1.1 mrg #define TARGET_64BIT 0
47 1.1 mrg #endif
48 1.1 mrg #endif
49 1.1 mrg
50 1.1 mrg #undef TARGET_AIX
51 1.1 mrg #define TARGET_AIX TARGET_64BIT
52 1.1 mrg
53 1.1 mrg #ifdef HAVE_LD_NO_DOT_SYMS
54 1.1 mrg /* New ABI uses a local sym for the function entry point. */
55 1.1 mrg extern int dot_symbols;
56 1.1 mrg #undef DOT_SYMBOLS
57 1.1 mrg #define DOT_SYMBOLS dot_symbols
58 1.1 mrg #endif
59 1.1 mrg
60 1.1 mrg #define TARGET_PROFILE_KERNEL profile_kernel
61 1.1 mrg
62 1.1.1.2 mrg #define TARGET_USES_LINUX64_OPT 1
63 1.1.1.2 mrg #ifdef HAVE_LD_LARGE_TOC
64 1.1.1.2 mrg #undef TARGET_CMODEL
65 1.1.1.2 mrg #define TARGET_CMODEL rs6000_current_cmodel
66 1.1.1.2 mrg #define SET_CMODEL(opt) rs6000_current_cmodel = opt
67 1.1.1.2 mrg #else
68 1.1.1.2 mrg #define SET_CMODEL(opt) do {} while (0)
69 1.1.1.2 mrg #endif
70 1.1.1.2 mrg
71 1.1 mrg #undef PROCESSOR_DEFAULT
72 1.1 mrg #define PROCESSOR_DEFAULT PROCESSOR_POWER4
73 1.1 mrg #undef PROCESSOR_DEFAULT64
74 1.1 mrg #define PROCESSOR_DEFAULT64 PROCESSOR_POWER4
75 1.1 mrg
76 1.1 mrg /* We don't need to generate entries in .fixup, except when
77 1.1 mrg -mrelocatable or -mrelocatable-lib is given. */
78 1.1 mrg #undef RELOCATABLE_NEEDS_FIXUP
79 1.1 mrg #define RELOCATABLE_NEEDS_FIXUP \
80 1.1.1.2 mrg (rs6000_isa_flags & rs6000_isa_flags_explicit & OPTION_MASK_RELOCATABLE)
81 1.1 mrg
82 1.1 mrg #undef RS6000_ABI_NAME
83 1.1 mrg #define RS6000_ABI_NAME "netbsd"
84 1.1 mrg
85 1.1 mrg #define INVALID_64BIT "-m%s not supported in this configuration"
86 1.1 mrg #define INVALID_32BIT INVALID_64BIT
87 1.1 mrg
88 1.1.1.2 mrg #define ELFv2_ABI_CHECK (rs6000_elf_abi == 2)
89 1.1.1.2 mrg
90 1.1.1.2 mrg #undef CC1_OS_NETBSD_SPEC
91 1.1.1.2 mrg #define CC1_OS_NETBSD_SPEC \
92 1.1.1.2 mrg NETBSD_CC1_AND_CC1PLUS_SPEC \
93 1.1.1.2 mrg "%{!m32: %{!mrelocatable: %{!fno-pie: %{!fno-pic: \
94 1.1.1.2 mrg %{!fpie: %{!fpic: \
95 1.1.1.2 mrg %{!fPIE: %{!fPIC:-fPIC}}}}}}}}"
96 1.1.1.2 mrg /* %{!m32: %{!mcmodel*: -mcmodel=medium}}" */
97 1.1.1.2 mrg
98 1.1.1.2 mrg #undef CC1PLUS_SPEC
99 1.1.1.2 mrg #define CC1PLUS_SPEC CC1_OS_NETBSD_SPEC
100 1.1.1.2 mrg
101 1.1 mrg #undef SUBSUBTARGET_OVERRIDE_OPTIONS
102 1.1 mrg #define SUBSUBTARGET_OVERRIDE_OPTIONS \
103 1.1 mrg do \
104 1.1 mrg { \
105 1.1.1.2 mrg if (!global_options_set.x_rs6000_alignment_flags) \
106 1.1 mrg rs6000_alignment_flags = MASK_ALIGN_NATURAL; \
107 1.1 mrg if (TARGET_64BIT) \
108 1.1 mrg { \
109 1.1 mrg if (DEFAULT_ABI != ABI_AIX) \
110 1.1 mrg { \
111 1.1 mrg rs6000_current_abi = ABI_AIX; \
112 1.1 mrg error (INVALID_64BIT, "call"); \
113 1.1 mrg } \
114 1.1 mrg dot_symbols = !strcmp (rs6000_abi_name, "aixdesc"); \
115 1.1.1.2 mrg if (ELFv2_ABI_CHECK) \
116 1.1.1.2 mrg { \
117 1.1.1.2 mrg rs6000_current_abi = ABI_ELFv2; \
118 1.1.1.2 mrg if (dot_symbols) \
119 1.1.1.2 mrg error ("-mcall-aixdesc incompatible with -mabi=elfv2"); \
120 1.1.1.2 mrg } \
121 1.1.1.2 mrg if (rs6000_isa_flags & OPTION_MASK_RELOCATABLE) \
122 1.1 mrg { \
123 1.1.1.2 mrg rs6000_isa_flags &= ~OPTION_MASK_RELOCATABLE; \
124 1.1 mrg error (INVALID_64BIT, "relocatable"); \
125 1.1 mrg } \
126 1.1.1.2 mrg if (rs6000_isa_flags & OPTION_MASK_EABI) \
127 1.1 mrg { \
128 1.1.1.2 mrg rs6000_isa_flags &= ~OPTION_MASK_EABI; \
129 1.1 mrg error (INVALID_64BIT, "eabi"); \
130 1.1 mrg } \
131 1.1 mrg if (TARGET_PROTOTYPE) \
132 1.1 mrg { \
133 1.1 mrg target_prototype = 0; \
134 1.1 mrg error (INVALID_64BIT, "prototype"); \
135 1.1 mrg } \
136 1.1.1.2 mrg if ((rs6000_isa_flags & OPTION_MASK_POWERPC64) == 0) \
137 1.1 mrg { \
138 1.1.1.2 mrg rs6000_isa_flags |= OPTION_MASK_POWERPC64; \
139 1.1 mrg error ("-m64 requires a PowerPC64 cpu"); \
140 1.1 mrg } \
141 1.1.1.2 mrg if ((rs6000_isa_flags_explicit \
142 1.1.1.2 mrg & OPTION_MASK_MINIMAL_TOC) != 0) \
143 1.1.1.2 mrg { \
144 1.1.1.2 mrg if (global_options_set.x_rs6000_current_cmodel \
145 1.1.1.2 mrg && rs6000_current_cmodel != CMODEL_SMALL) \
146 1.1.1.2 mrg error ("-mcmodel incompatible with other toc options"); \
147 1.1.1.2 mrg SET_CMODEL (CMODEL_SMALL); \
148 1.1.1.2 mrg } \
149 1.1.1.2 mrg { \
150 1.1.1.2 mrg if (!global_options_set.x_rs6000_current_cmodel) \
151 1.1.1.2 mrg SET_CMODEL (CMODEL_MEDIUM); \
152 1.1.1.2 mrg if (rs6000_current_cmodel != CMODEL_SMALL) \
153 1.1.1.2 mrg { \
154 1.1.1.2 mrg TARGET_NO_FP_IN_TOC = 0; \
155 1.1.1.2 mrg TARGET_NO_SUM_IN_TOC = 0; \
156 1.1.1.2 mrg } \
157 1.1.1.2 mrg } \
158 1.1 mrg } \
159 1.1 mrg else \
160 1.1 mrg { \
161 1.1 mrg if (!RS6000_BI_ARCH_P) \
162 1.1 mrg error (INVALID_32BIT, "32"); \
163 1.1 mrg if (TARGET_PROFILE_KERNEL) \
164 1.1 mrg { \
165 1.1 mrg TARGET_PROFILE_KERNEL = 0; \
166 1.1 mrg error (INVALID_32BIT, "profile-kernel"); \
167 1.1 mrg } \
168 1.1.1.2 mrg if (global_options_set.x_rs6000_current_cmodel) \
169 1.1.1.2 mrg { \
170 1.1.1.2 mrg SET_CMODEL (CMODEL_SMALL); \
171 1.1.1.2 mrg error (INVALID_32BIT, "cmodel"); \
172 1.1.1.2 mrg } \
173 1.1 mrg } \
174 1.1 mrg } \
175 1.1 mrg while (0)
176 1.1 mrg
177 1.1 mrg #ifdef RS6000_BI_ARCH
178 1.1 mrg
179 1.1.1.2 mrg #if 0
180 1.1 mrg #undef OVERRIDE_OPTIONS
181 1.1 mrg #define OVERRIDE_OPTIONS \
182 1.1 mrg rs6000_override_options (((TARGET_DEFAULT ^ target_flags) & MASK_64BIT) \
183 1.1 mrg ? (char *) 0 : TARGET_CPU_DEFAULT)
184 1.1.1.2 mrg #endif
185 1.1 mrg
186 1.1 mrg #endif
187 1.1 mrg
188 1.1 mrg #undef ASM_DEFAULT_SPEC
189 1.1 mrg #undef ASM_SPEC
190 1.1 mrg #undef LINK_OS_NETBSD_SPEC
191 1.1 mrg
192 1.1 mrg #ifndef RS6000_BI_ARCH
193 1.1 mrg #define ASM_DEFAULT_SPEC "-mppc64"
194 1.1 mrg #define ASM_SPEC "%(asm_spec64) %(asm_spec_common)"
195 1.1 mrg #define LINK_OS_NETBSD_SPEC "%(link_os_netbsd_spec64)"
196 1.1 mrg #else
197 1.1 mrg #if DEFAULT_ARCH64_P
198 1.1 mrg #define ASM_DEFAULT_SPEC "-mppc%{!m32:64}"
199 1.1 mrg #define ASM_SPEC "%{m32:%(asm_spec32)}%{!m32:%(asm_spec64)} %(asm_spec_common)"
200 1.1 mrg #define LINK_OS_NETBSD_SPEC "%{m32:%(link_os_netbsd_spec32)}%{!m32:%(link_os_netbsd_spec64)}"
201 1.1 mrg #else
202 1.1 mrg #define ASM_DEFAULT_SPEC "-mppc%{m64:64}"
203 1.1 mrg #define ASM_SPEC "%{!m64:%(asm_spec32)}%{m64:%(asm_spec64)} %(asm_spec_common)"
204 1.1 mrg #define LINK_OS_NETBSD_SPEC "%{!m64:%(link_os_netbsd_spec32)}%{m64:%(link_os_netbsd_spec64)}"
205 1.1 mrg #endif
206 1.1 mrg #endif
207 1.1 mrg
208 1.1.1.2 mrg #define ASM_SPEC32 "-a32 \
209 1.1.1.2 mrg %{mrelocatable} %{mrelocatable-lib} %{fpic|fpie|fPIC|fPIE:-K PIC} \
210 1.1.1.2 mrg %{memb|msdata=eabi: -memb}"
211 1.1 mrg
212 1.1 mrg #define ASM_SPEC64 "-a64"
213 1.1 mrg
214 1.1 mrg #define ASM_SPEC_COMMON "%(asm_cpu) \
215 1.1.1.2 mrg %{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}}" \
216 1.1.1.2 mrg ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
217 1.1 mrg
218 1.1 mrg #undef SUBSUBTARGET_EXTRA_SPECS
219 1.1 mrg #define SUBSUBTARGET_EXTRA_SPECS \
220 1.1 mrg { "asm_spec_common", ASM_SPEC_COMMON }, \
221 1.1 mrg { "asm_spec32", ASM_SPEC32 }, \
222 1.1 mrg { "asm_spec64", ASM_SPEC64 }, \
223 1.1.1.2 mrg { "link_os_netbsd_spec32", LINK_OS_NETBSD_SPEC32 }, \
224 1.1 mrg { "link_os_netbsd_spec64", LINK_OS_NETBSD_SPEC64 },
225 1.1 mrg
226 1.1 mrg #undef MULTILIB_DEFAULTS
227 1.1 mrg #if DEFAULT_ARCH64_P
228 1.1 mrg #define MULTILIB_DEFAULTS { "m64" }
229 1.1 mrg #else
230 1.1 mrg #define MULTILIB_DEFAULTS { "m32" }
231 1.1 mrg #endif
232 1.1 mrg
233 1.1 mrg #ifndef RS6000_BI_ARCH
234 1.1 mrg
235 1.1 mrg /* 64-bit PowerPC NetBSD is always big-endian. */
236 1.1 mrg #undef TARGET_LITTLE_ENDIAN
237 1.1 mrg #define TARGET_LITTLE_ENDIAN 0
238 1.1 mrg
239 1.1 mrg /* 64-bit PowerPC NetBSD always has a TOC. */
240 1.1 mrg #undef TARGET_TOC
241 1.1 mrg #define TARGET_TOC 1
242 1.1 mrg
243 1.1 mrg /* Some things from sysv4.h we don't do when 64 bit. */
244 1.1 mrg #undef TARGET_RELOCATABLE
245 1.1 mrg #define TARGET_RELOCATABLE 0
246 1.1 mrg #undef TARGET_EABI
247 1.1 mrg #define TARGET_EABI 0
248 1.1 mrg #undef TARGET_PROTOTYPE
249 1.1 mrg #define TARGET_PROTOTYPE 0
250 1.1 mrg #undef RELOCATABLE_NEEDS_FIXUP
251 1.1 mrg #define RELOCATABLE_NEEDS_FIXUP 0
252 1.1 mrg
253 1.1 mrg #endif
254 1.1 mrg
255 1.1 mrg /* PowerPC64 NetBSD word-aligns FP doubles when -malign-power is given. */
256 1.1 mrg #undef ADJUST_FIELD_ALIGN
257 1.1 mrg #define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
258 1.1 mrg ((TARGET_ALTIVEC && TREE_CODE (TREE_TYPE (FIELD)) == VECTOR_TYPE) \
259 1.1 mrg ? 128 \
260 1.1 mrg : (TARGET_64BIT \
261 1.1 mrg && TARGET_ALIGN_NATURAL == 0 \
262 1.1 mrg && TYPE_MODE (strip_array_types (TREE_TYPE (FIELD))) == DFmode) \
263 1.1 mrg ? MIN ((COMPUTED), 32) \
264 1.1 mrg : (COMPUTED))
265 1.1 mrg
266 1.1 mrg /* PowerPC64 NetBSD increases natural record alignment to doubleword if
267 1.1 mrg the first field is an FP double, only if in power alignment mode. */
268 1.1 mrg #undef ROUND_TYPE_ALIGN
269 1.1 mrg #define ROUND_TYPE_ALIGN(STRUCT, COMPUTED, SPECIFIED) \
270 1.1 mrg ((TARGET_64BIT \
271 1.1 mrg && (TREE_CODE (STRUCT) == RECORD_TYPE \
272 1.1 mrg || TREE_CODE (STRUCT) == UNION_TYPE \
273 1.1 mrg || TREE_CODE (STRUCT) == QUAL_UNION_TYPE) \
274 1.1 mrg && TARGET_ALIGN_NATURAL == 0) \
275 1.1 mrg ? rs6000_special_round_type_align (STRUCT, COMPUTED, SPECIFIED) \
276 1.1 mrg : MAX ((COMPUTED), (SPECIFIED)))
277 1.1 mrg
278 1.1 mrg /* Use the default for compiling target libs. */
279 1.1 mrg #ifdef IN_TARGET_LIBS
280 1.1 mrg #undef TARGET_ALIGN_NATURAL
281 1.1 mrg #define TARGET_ALIGN_NATURAL 1
282 1.1 mrg #endif
283 1.1 mrg
284 1.1 mrg /* Indicate that jump tables go in the text section. */
285 1.1 mrg #undef JUMP_TABLES_IN_TEXT_SECTION
286 1.1 mrg #define JUMP_TABLES_IN_TEXT_SECTION TARGET_64BIT
287 1.1 mrg
288 1.1 mrg /* The linux ppc64 ABI isn't explicit on whether aggregates smaller
289 1.1 mrg than a doubleword should be padded upward or downward. You could
290 1.1 mrg reasonably assume that they follow the normal rules for structure
291 1.1 mrg layout treating the parameter area as any other block of memory,
292 1.1 mrg then map the reg param area to registers. i.e. pad upward.
293 1.1 mrg Setting both of the following defines results in this behavior.
294 1.1 mrg Setting just the first one will result in aggregates that fit in a
295 1.1 mrg doubleword being padded downward, and others being padded upward.
296 1.1 mrg Not a bad idea as this results in struct { int x; } being passed
297 1.1 mrg the same way as an int. */
298 1.1 mrg #define AGGREGATE_PADDING_FIXED TARGET_64BIT
299 1.1 mrg #define AGGREGATES_PAD_UPWARD_ALWAYS 0
300 1.1 mrg
301 1.1 mrg /* Specify padding for the last element of a block move between
302 1.1 mrg registers and memory. FIRST is nonzero if this is the only
303 1.1 mrg element. */
304 1.1 mrg #define BLOCK_REG_PADDING(MODE, TYPE, FIRST) \
305 1.1 mrg (!(FIRST) ? upward : FUNCTION_ARG_PADDING (MODE, TYPE))
306 1.1 mrg
307 1.1 mrg /* NetBSD doesn't support saving and restoring 64-bit regs in a 32-bit
308 1.1 mrg process. XXXMRG? */
309 1.1 mrg #define OS_MISSING_POWERPC64 !TARGET_64BIT
310 1.1 mrg
311 1.1 mrg /* NetBSD has float and long double forms of math functions. */
312 1.1 mrg #undef TARGET_C99_FUNCTIONS
313 1.1 mrg #define TARGET_C99_FUNCTIONS 1
314 1.1 mrg
315 1.1 mrg /* NetBSD doesn't have sincos that follows the GNU extension. */
316 1.1 mrg #undef TARGET_HAS_SINCOS
317 1.1 mrg
318 1.1 mrg #undef TARGET_OS_CPP_BUILTINS
319 1.1 mrg #define TARGET_OS_CPP_BUILTINS() \
320 1.1 mrg do \
321 1.1 mrg { \
322 1.1 mrg NETBSD_OS_CPP_BUILTINS_ELF(); \
323 1.1.1.2 mrg if (TARGET_ISEL) \
324 1.1.1.2 mrg builtin_define ("__PPC_ISEL__"); \
325 1.1 mrg if (TARGET_64BIT) \
326 1.1 mrg { \
327 1.1 mrg builtin_define ("__PPC__"); \
328 1.1 mrg builtin_define ("__PPC64__"); \
329 1.1 mrg builtin_define ("__powerpc__"); \
330 1.1 mrg builtin_define ("__powerpc64__"); \
331 1.1 mrg builtin_define_with_int_value ("__PIC__", 2); \
332 1.1 mrg builtin_assert ("cpu=powerpc64"); \
333 1.1 mrg builtin_assert ("machine=powerpc64"); \
334 1.1 mrg } \
335 1.1 mrg else \
336 1.1 mrg { \
337 1.1 mrg builtin_define_std ("PPC"); \
338 1.1 mrg builtin_define_std ("powerpc"); \
339 1.1 mrg builtin_assert ("cpu=powerpc"); \
340 1.1 mrg builtin_assert ("machine=powerpc"); \
341 1.1 mrg TARGET_OS_SYSV_CPP_BUILTINS (); \
342 1.1 mrg } \
343 1.1 mrg } \
344 1.1 mrg while (0)
345 1.1 mrg
346 1.1 mrg /* Override the default from rs6000.h to avoid conflicts with macros
347 1.1 mrg defined in NetBSD header files. */
348 1.1 mrg
349 1.1 mrg #undef RS6000_CPU_CPP_ENDIAN_BUILTINS
350 1.1 mrg #define RS6000_CPU_CPP_ENDIAN_BUILTINS() \
351 1.1 mrg do \
352 1.1 mrg { \
353 1.1 mrg builtin_define ("__BIG_ENDIAN__"); \
354 1.1 mrg builtin_assert ("machine=bigendian"); \
355 1.1 mrg } \
356 1.1 mrg while (0)
357 1.1 mrg
358 1.1 mrg #undef CPP_OS_DEFAULT_SPEC
359 1.1 mrg #define CPP_OS_DEFAULT_SPEC "%(cpp_os_netbsd)"
360 1.1 mrg
361 1.1 mrg #undef LINK_SHLIB_SPEC
362 1.1 mrg #define LINK_SHLIB_SPEC "%{shared:-shared} %{!shared: %{static:-static}}"
363 1.1 mrg
364 1.1 mrg #undef LIB_DEFAULT_SPEC
365 1.1 mrg #define LIB_DEFAULT_SPEC "%(lib_netbsd)"
366 1.1 mrg
367 1.1 mrg #undef STARTFILE_DEFAULT_SPEC
368 1.1 mrg #define STARTFILE_DEFAULT_SPEC "%(startfile_netbsd)"
369 1.1 mrg
370 1.1 mrg #undef ENDFILE_DEFAULT_SPEC
371 1.1 mrg #define ENDFILE_DEFAULT_SPEC "%(endfile_netbsd)"
372 1.1 mrg
373 1.1 mrg #undef LINK_START_DEFAULT_SPEC
374 1.1 mrg #define LINK_START_DEFAULT_SPEC "%(link_start_netbsd)"
375 1.1 mrg
376 1.1 mrg #undef LINK_OS_DEFAULT_SPEC
377 1.1 mrg #define LINK_OS_DEFAULT_SPEC "%(link_os_netbsd)"
378 1.1 mrg
379 1.1 mrg #define LINK_OS_NETBSD_SPEC32 "-m elf32ppc %{!shared: %{!static: \
380 1.1 mrg %{rdynamic:-export-dynamic} \
381 1.1 mrg %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}}}"
382 1.1 mrg
383 1.1 mrg #define LINK_OS_NETBSD_SPEC64 "-m elf64ppc %{!shared: %{!static: \
384 1.1 mrg %{rdynamic:-export-dynamic} \
385 1.1 mrg %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}}}"
386 1.1 mrg
387 1.1 mrg #undef TOC_SECTION_ASM_OP
388 1.1 mrg #define TOC_SECTION_ASM_OP \
389 1.1 mrg (TARGET_64BIT \
390 1.1 mrg ? "\t.section\t\".toc\",\"aw\"" \
391 1.1 mrg : "\t.section\t\".got\",\"aw\"")
392 1.1 mrg
393 1.1 mrg #undef MINIMAL_TOC_SECTION_ASM_OP
394 1.1 mrg #define MINIMAL_TOC_SECTION_ASM_OP \
395 1.1 mrg (TARGET_64BIT \
396 1.1 mrg ? "\t.section\t\".toc1\",\"aw\"" \
397 1.1 mrg : ((TARGET_RELOCATABLE || flag_pic) \
398 1.1 mrg ? "\t.section\t\".got2\",\"aw\"" \
399 1.1 mrg : "\t.section\t\".got1\",\"aw\""))
400 1.1 mrg
401 1.1 mrg /* Make GCC agree with <machine/ansi.h>. */
402 1.1 mrg
403 1.1 mrg #undef SIZE_TYPE
404 1.1.1.2 mrg #define SIZE_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "unsigned int")
405 1.1 mrg
406 1.1 mrg #undef PTRDIFF_TYPE
407 1.1.1.2 mrg #define PTRDIFF_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "int")
408 1.1.1.2 mrg
409 1.1.1.2 mrg #undef INTPTR_TYPE
410 1.1.1.2 mrg #define INTPTR_TYPE PTRDIFF_TYPE
411 1.1.1.2 mrg
412 1.1.1.2 mrg #undef UINTPTR_TYPE
413 1.1.1.2 mrg #define UINTPTR_TYPE SIZE_TYPE
414 1.1 mrg
415 1.1 mrg #undef WCHAR_TYPE
416 1.1.1.2 mrg #define WCHAR_TYPE "int"
417 1.1.1.2 mrg
418 1.1.1.2 mrg #undef INT8_TYPE
419 1.1.1.2 mrg #define INT8_TYPE "signed char"
420 1.1.1.2 mrg
421 1.1.1.2 mrg #undef INT16_TYPE
422 1.1.1.2 mrg #define INT16_TYPE "short int"
423 1.1.1.2 mrg
424 1.1.1.2 mrg #undef INT32_TYPE
425 1.1.1.2 mrg #define INT32_TYPE "int"
426 1.1.1.2 mrg
427 1.1.1.2 mrg #undef INT64_TYPE
428 1.1.1.2 mrg #define INT64_TYPE "long long int"
429 1.1.1.2 mrg
430 1.1.1.2 mrg #undef UINT8_TYPE
431 1.1.1.2 mrg #define UINT8_TYPE "unsigned char"
432 1.1.1.2 mrg
433 1.1.1.2 mrg #undef UINT16_TYPE
434 1.1.1.2 mrg #define UINT16_TYPE "short unsigned int"
435 1.1.1.2 mrg
436 1.1.1.2 mrg #undef UINT32_TYPE
437 1.1.1.2 mrg #define UINT32_TYPE "unsigned int"
438 1.1.1.2 mrg
439 1.1.1.2 mrg #undef UINT64_TYPE
440 1.1.1.2 mrg #define UINT64_TYPE "long long unsigned int"
441 1.1.1.2 mrg
442 1.1.1.2 mrg #undef INT_FAST8_TYPE
443 1.1.1.2 mrg #define INT_FAST8_TYPE "int"
444 1.1.1.2 mrg
445 1.1.1.2 mrg #undef INT_FAST16_TYPE
446 1.1.1.2 mrg #define INT_FAST16_TYPE "int"
447 1.1.1.2 mrg
448 1.1.1.2 mrg #undef INT_FAST32_TYPE
449 1.1.1.2 mrg #define INT_FAST32_TYPE "int"
450 1.1.1.2 mrg
451 1.1.1.2 mrg #undef INT_FAST64_TYPE
452 1.1.1.2 mrg #define INT_FAST64_TYPE INT64_TYPE
453 1.1.1.2 mrg
454 1.1.1.2 mrg #undef UINT_FAST8_TYPE
455 1.1.1.2 mrg #define UINT_FAST8_TYPE "unsigned int"
456 1.1.1.2 mrg
457 1.1.1.2 mrg #undef UINT_FAST16_TYPE
458 1.1.1.2 mrg #define UINT_FAST16_TYPE "unsigned int"
459 1.1.1.2 mrg
460 1.1.1.2 mrg #undef UINT_FAST32_TYPE
461 1.1.1.2 mrg #define UINT_FAST32_TYPE "unsigned int"
462 1.1.1.2 mrg
463 1.1.1.2 mrg #undef UINT_FAST8_TYPE
464 1.1.1.2 mrg #define UINT_FAST8_TYPE "unsigned int"
465 1.1.1.2 mrg
466 1.1.1.2 mrg #undef UINT_FAST16_TYPE
467 1.1.1.2 mrg #define UINT_FAST16_TYPE "unsigned int"
468 1.1.1.2 mrg
469 1.1.1.2 mrg #undef UINT_FAST32_TYPE
470 1.1.1.2 mrg #define UINT_FAST32_TYPE "unsigned int"
471 1.1.1.2 mrg
472 1.1.1.2 mrg #undef UINT_FAST64_TYPE
473 1.1.1.2 mrg #define UINT_FAST64_TYPE UINT64_TYPE
474 1.1.1.2 mrg
475 1.1.1.2 mrg #undef INT_LEAST8_TYPE
476 1.1.1.2 mrg #define INT_LEAST8_TYPE INT8_TYPE
477 1.1.1.2 mrg
478 1.1.1.2 mrg #undef INT_LEAST16_TYPE
479 1.1.1.2 mrg #define INT_LEAST16_TYPE INT16_TYPE
480 1.1.1.2 mrg
481 1.1.1.2 mrg #undef INT_LEAST32_TYPE
482 1.1.1.2 mrg #define INT_LEAST32_TYPE "int"
483 1.1.1.2 mrg
484 1.1.1.2 mrg #undef INT_LEAST64_TYPE
485 1.1.1.2 mrg #define INT_LEAST64_TYPE INT64_TYPE
486 1.1.1.2 mrg
487 1.1.1.2 mrg #undef UINT_LEAST8_TYPE
488 1.1.1.2 mrg #define UINT_LEAST8_TYPE UINT8_TYPE
489 1.1.1.2 mrg
490 1.1.1.2 mrg #undef UINT_LEAST16_TYPE
491 1.1.1.2 mrg #define UINT_LEAST16_TYPE UINT16_TYPE
492 1.1.1.2 mrg
493 1.1.1.2 mrg #undef UINT_LEAST32_TYPE
494 1.1.1.2 mrg #define UINT_LEAST32_TYPE "unsigned int"
495 1.1.1.2 mrg
496 1.1.1.2 mrg #undef UINT_LEAST64_TYPE
497 1.1.1.2 mrg #define UINT_LEAST64_TYPE UINT64_TYPE
498 1.1.1.2 mrg
499 1.1.1.2 mrg #undef INTMAX_TYPE
500 1.1.1.2 mrg #define INTMAX_TYPE INT64_TYPE
501 1.1.1.2 mrg
502 1.1.1.2 mrg #undef UINTMAX_TYPE
503 1.1.1.2 mrg #define UINTMAX_TYPE UINT64_TYPE
504 1.1 mrg
505 1.1 mrg /* Override rs6000.h definition. */
506 1.1 mrg #undef ASM_APP_ON
507 1.1 mrg #define ASM_APP_ON "#APP\n"
508 1.1 mrg
509 1.1 mrg /* Override rs6000.h definition. */
510 1.1 mrg #undef ASM_APP_OFF
511 1.1 mrg #define ASM_APP_OFF "#NO_APP\n"
512 1.1 mrg
513 1.1 mrg /* PowerPC no-op instruction. */
514 1.1 mrg #undef RS6000_CALL_GLUE
515 1.1 mrg #define RS6000_CALL_GLUE (TARGET_64BIT ? "nop" : "cror 31,31,31")
516 1.1 mrg
517 1.1 mrg #undef RS6000_MCOUNT
518 1.1 mrg #define RS6000_MCOUNT "_mcount"
519 1.1 mrg
520 1.1 mrg #ifdef __powerpc64__
521 1.1 mrg /* _init and _fini functions are built from bits spread across many
522 1.1 mrg object files, each potentially with a different TOC pointer. For
523 1.1 mrg that reason, place a nop after the call so that the linker can
524 1.1 mrg restore the TOC pointer if a TOC adjusting call stub is needed. */
525 1.1 mrg #if DOT_SYMBOLS
526 1.1 mrg #define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
527 1.1 mrg asm (SECTION_OP "\n" \
528 1.1 mrg " bl ." #FUNC "\n" \
529 1.1 mrg " nop\n" \
530 1.1 mrg " .previous");
531 1.1 mrg #else
532 1.1 mrg #define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
533 1.1 mrg asm (SECTION_OP "\n" \
534 1.1 mrg " bl " #FUNC "\n" \
535 1.1 mrg " nop\n" \
536 1.1 mrg " .previous");
537 1.1 mrg #endif
538 1.1 mrg #endif
539 1.1 mrg
540 1.1 mrg /* FP save and restore routines. */
541 1.1 mrg #undef SAVE_FP_PREFIX
542 1.1 mrg #define SAVE_FP_PREFIX (TARGET_64BIT ? "._savef" : "_savefpr_")
543 1.1 mrg #undef SAVE_FP_SUFFIX
544 1.1 mrg #define SAVE_FP_SUFFIX (TARGET_64BIT ? "" : "_l")
545 1.1 mrg #undef RESTORE_FP_PREFIX
546 1.1 mrg #define RESTORE_FP_PREFIX (TARGET_64BIT ? "._restf" : "_restfpr_")
547 1.1 mrg #undef RESTORE_FP_SUFFIX
548 1.1 mrg #define RESTORE_FP_SUFFIX (TARGET_64BIT ? "" : "_l")
549 1.1 mrg
550 1.1 mrg /* Dwarf2 debugging. */
551 1.1 mrg #undef PREFERRED_DEBUGGING_TYPE
552 1.1 mrg #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
553 1.1 mrg
554 1.1 mrg /* This is how to declare the size of a function. */
555 1.1 mrg #undef ASM_DECLARE_FUNCTION_SIZE
556 1.1 mrg #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \
557 1.1 mrg do \
558 1.1 mrg { \
559 1.1 mrg if (!flag_inhibit_size_directive) \
560 1.1 mrg { \
561 1.1 mrg fputs ("\t.size\t", (FILE)); \
562 1.1 mrg if (TARGET_64BIT && DOT_SYMBOLS) \
563 1.1 mrg putc ('.', (FILE)); \
564 1.1 mrg assemble_name ((FILE), (FNAME)); \
565 1.1 mrg fputs (",.-", (FILE)); \
566 1.1 mrg rs6000_output_function_entry (FILE, FNAME); \
567 1.1 mrg putc ('\n', (FILE)); \
568 1.1 mrg } \
569 1.1 mrg } \
570 1.1 mrg while (0)
571 1.1 mrg
572 1.1 mrg /* Return nonzero if this entry is to be written into the constant
573 1.1 mrg pool in a special way. We do so if this is a SYMBOL_REF, LABEL_REF
574 1.1 mrg or a CONST containing one of them. If -mfp-in-toc (the default),
575 1.1 mrg we also do this for floating-point constants. We actually can only
576 1.1 mrg do this if the FP formats of the target and host machines are the
577 1.1 mrg same, but we can't check that since not every file that uses
578 1.1 mrg the macros includes real.h. We also do this when we can write the
579 1.1 mrg entry into the TOC and the entry is not larger than a TOC entry. */
580 1.1 mrg
581 1.1 mrg #undef ASM_OUTPUT_SPECIAL_POOL_ENTRY_P
582 1.1 mrg #define ASM_OUTPUT_SPECIAL_POOL_ENTRY_P(X, MODE) \
583 1.1 mrg (TARGET_TOC \
584 1.1 mrg && (GET_CODE (X) == SYMBOL_REF \
585 1.1 mrg || (GET_CODE (X) == CONST && GET_CODE (XEXP (X, 0)) == PLUS \
586 1.1 mrg && GET_CODE (XEXP (XEXP (X, 0), 0)) == SYMBOL_REF) \
587 1.1 mrg || GET_CODE (X) == LABEL_REF \
588 1.1 mrg || (GET_CODE (X) == CONST_INT \
589 1.1 mrg && GET_MODE_BITSIZE (MODE) <= GET_MODE_BITSIZE (Pmode)) \
590 1.1 mrg || (GET_CODE (X) == CONST_DOUBLE \
591 1.1 mrg && ((TARGET_64BIT \
592 1.1 mrg && (TARGET_MINIMAL_TOC \
593 1.1 mrg || (SCALAR_FLOAT_MODE_P (GET_MODE (X)) \
594 1.1 mrg && ! TARGET_NO_FP_IN_TOC))) \
595 1.1 mrg || (!TARGET_64BIT \
596 1.1 mrg && !TARGET_NO_FP_IN_TOC \
597 1.1 mrg && !TARGET_RELOCATABLE \
598 1.1 mrg && SCALAR_FLOAT_MODE_P (GET_MODE (X)) \
599 1.1 mrg && BITS_PER_WORD == HOST_BITS_PER_INT)))))
600 1.1 mrg
601 1.1 mrg /* Select a format to encode pointers in exception handling data. CODE
602 1.1 mrg is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is
603 1.1 mrg true if the symbol may be affected by dynamic relocations. */
604 1.1 mrg #undef ASM_PREFERRED_EH_DATA_FORMAT
605 1.1 mrg #define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \
606 1.1 mrg ((TARGET_64BIT || flag_pic || TARGET_RELOCATABLE) \
607 1.1 mrg ? (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel \
608 1.1 mrg | (TARGET_64BIT ? DW_EH_PE_udata8 : DW_EH_PE_sdata4)) \
609 1.1 mrg : DW_EH_PE_absptr)
610 1.1 mrg
611 1.1 mrg /* For backward compatibility, we must continue to use the AIX
612 1.1 mrg structure return convention. */
613 1.1 mrg #undef DRAFT_V4_STRUCT_RET
614 1.1 mrg #define DRAFT_V4_STRUCT_RET (!TARGET_64BIT)
615 1.1 mrg
616 1.1 mrg #define TARGET_POSIX_IO
617 1.1 mrg
618 1.1 mrg #define LINK_GCC_C_SEQUENCE_SPEC \
619 1.1 mrg "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
620 1.1 mrg
621 1.1 mrg /* Use --as-needed -lgcc_s for eh support. */
622 1.1 mrg #ifdef HAVE_LD_AS_NEEDED
623 1.1 mrg #define USE_LD_AS_NEEDED 1
624 1.1 mrg #endif
625 1.1 mrg
626 1.1 mrg /* NetBSD ppc64 has 128-bit long double support. */
627 1.1 mrg #undef RS6000_DEFAULT_LONG_DOUBLE_SIZE
628 1.1 mrg #define RS6000_DEFAULT_LONG_DOUBLE_SIZE 128
629 1.1 mrg #define POWERPC_NETBSD
630