]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/rs6000/darwin.h
In gcc/: PR 23067
[thirdparty/gcc.git] / gcc / config / rs6000 / darwin.h
CommitLineData
ee890fe2 1/* Target definitions for PowerPC running Darwin (Mac OS X).
602ea4d3 2 Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
fe9565ed 3 Free Software Foundation, Inc.
ee890fe2
SS
4 Contributed by Apple Computer Inc.
5
5de601cf 6 This file is part of GCC.
ee890fe2 7
5de601cf
NC
8 GCC is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published
10 by the Free Software Foundation; either version 2, or (at your
11 option) any later version.
ee890fe2 12
5de601cf
NC
13 GCC is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
16 License for more details.
ee890fe2 17
5de601cf
NC
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to the
39d14dda
KC
20 Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
21 MA 02110-1301, USA. */
ee890fe2 22
b91da81f
DB
23#undef TARGET_VERSION
24#define TARGET_VERSION fprintf (stderr, " (Darwin/PowerPC)");
25
ee890fe2
SS
26/* The "Darwin ABI" is mostly like AIX, but with some key differences. */
27
28#define DEFAULT_ABI ABI_DARWIN
29
31abac07
EC
30#ifdef IN_LIBGCC2
31#undef TARGET_64BIT
32#ifdef __powerpc64__
33#define TARGET_64BIT 1
34#else
35#define TARGET_64BIT 0
36#endif
37#endif
38
ee890fe2
SS
39/* The object file format is Mach-O. */
40
41#define TARGET_OBJECT_FORMAT OBJECT_MACHO
42
64ee9490
EC
43/* Size of the Obj-C jump buffer. */
44#define OBJC_JBLEN ((TARGET_64BIT) ? (26*2 + 18*2 + 129 + 1) : (26 + 18*2 + 129 + 1))
45
ee890fe2
SS
46/* We're not ever going to do TOCs. */
47
48#define TARGET_TOC 0
49#define TARGET_NO_TOC 1
50
49bd1d27
SS
51/* Override the default rs6000 definition. */
52#undef PTRDIFF_TYPE
53#define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int")
54
bd96cd55
DE
55/* Translate config/rs6000/darwin.opt to config/darwin.h. */
56#define TARGET_DYNAMIC_NO_PIC (TARGET_MACHO_DYNAMIC_NO_PIC)
57
7990b46f
MK
58#define TARGET_OS_CPP_BUILTINS() \
59 do \
60 { \
49bd1d27
SS
61 if (!TARGET_64BIT) builtin_define ("__ppc__"); \
62 if (TARGET_64BIT) builtin_define ("__ppc64__"); \
7990b46f
MK
63 builtin_define ("__POWERPC__"); \
64 builtin_define ("__NATURAL_ALIGNMENT__"); \
ed5b9f96 65 darwin_cpp_builtins (pfile); \
7990b46f
MK
66 } \
67 while (0)
ee890fe2 68
ab82a49f 69
c1e55850 70#define SUBTARGET_OVERRIDE_OPTIONS \
ab82a49f 71do { \
c7b5e395
GK
72 /* The Darwin ABI always includes AltiVec, can't be (validly) turned \
73 off. */ \
ab82a49f 74 rs6000_altivec_abi = 1; \
78f5898b 75 TARGET_ALTIVEC_VRSAVE = 1; \
ab82a49f
AP
76 if (DEFAULT_ABI == ABI_DARWIN) \
77 { \
78 if (MACHO_DYNAMIC_NO_PIC_P) \
79 { \
80 if (flag_pic) \
d4ee4d25 81 warning (0, "-mdynamic-no-pic overrides -fpic or -fPIC"); \
ab82a49f
AP
82 flag_pic = 0; \
83 } \
84 else if (flag_pic == 1) \
85 { \
ab82a49f
AP
86 flag_pic = 2; \
87 } \
88 } \
49bd1d27
SS
89 if (TARGET_64BIT && ! TARGET_POWERPC64) \
90 { \
91 target_flags |= MASK_POWERPC64; \
d4ee4d25 92 warning (0, "-m64 requires PowerPC64 architecture, enabling"); \
49bd1d27 93 } \
f475fd3c
MS
94 if (flag_mkernel) \
95 { \
96 rs6000_default_long_calls = 1; \
97 target_flags |= MASK_SOFT_FLOAT; \
98 } \
c1e55850
GK
99} while(0)
100
c7b5e395
GK
101#define C_COMMON_OVERRIDE_OPTIONS do { \
102 /* On powerpc, __cxa_get_exception_ptr is available starting in the \
747b9f55 103 10.4.6 libstdc++.dylib. */ \
c7b5e395 104 if ((! darwin_macosx_version_min \
747b9f55 105 || strverscmp (darwin_macosx_version_min, "10.4.6") < 0) \
c7b5e395
GK
106 && flag_use_cxa_get_exception_ptr == 2) \
107 flag_use_cxa_get_exception_ptr = 0; \
f475fd3c
MS
108 if (flag_mkernel) \
109 flag_no_builtin = 1; \
110 SUBTARGET_C_COMMON_OVERRIDE_OPTIONS; \
c7b5e395
GK
111} while (0)
112
c1e55850
GK
113/* Darwin has 128-bit long double support in libc in 10.4 and later.
114 Default to 128-bit long doubles even on earlier platforms for ABI
115 consistency; arithmetic will work even if libc and libm support is
116 not available. */
117
118#define RS6000_DEFAULT_LONG_DOUBLE_SIZE 128
119
ab82a49f 120
ee890fe2
SS
121/* We want -fPIC by default, unless we're using -static to compile for
122 the kernel or some such. */
123
3ab68120 124#define CC1_SPEC "\
f475fd3c
MS
125 %{g: %{!fno-eliminate-unused-debug-symbols: -feliminate-unused-debug-symbols }} \
126 %{static: %{Zdynamic: %e conflicting code gen style switches are used}}\
127 %{!mkernel:%{!static:%{!mdynamic-no-pic:-fPIC}}}"
ee890fe2 128
965a7e90
GK
129#define DARWIN_SUBARCH_SPEC " \
130 %{m64: ppc64} \
131 %{!m64: \
132 %{mcpu=601:ppc601; \
133 mcpu=603:ppc603; \
134 mcpu=603e:ppc603; \
135 mcpu=604:ppc604; \
136 mcpu=604e:ppc604e; \
137 mcpu=740:ppc750; \
138 mcpu=750:ppc750; \
139 mcpu=G3:ppc750; \
140 mcpu=7400:ppc7400; \
141 mcpu=G4:ppc7400; \
142 mcpu=7450:ppc7450; \
143 mcpu=970:ppc970; \
144 mcpu=power4:ppc970; \
145 mcpu=G5:ppc970; \
146 :ppc}}"
147
56309261
GK
148/* crt2.o is at least partially required for 10.3.x and earlier. */
149#define DARWIN_CRT2_SPEC \
150 "%{!m64:%:version-compare(!> 10.4 mmacosx-version-min= crt2.o%s)}"
151
3a7e8b87
GK
152#undef SUBTARGET_EXTRA_SPECS
153#define SUBTARGET_EXTRA_SPECS \
965a7e90 154 { "darwin_arch", "%{m64:ppc64;:ppc}" }, \
56309261 155 { "darwin_crt2", DARWIN_CRT2_SPEC }, \
965a7e90 156 { "darwin_subarch", DARWIN_SUBARCH_SPEC },
3a7e8b87 157
c4e18b1c
GK
158/* Output a .machine directive. */
159#undef TARGET_ASM_FILE_START
160#define TARGET_ASM_FILE_START rs6000_darwin_file_start
161
699c914a
MS
162/* The "-faltivec" option should have been called "-maltivec" all
163 along. -ffix-and-continue and -findirect-data is for compatibility
164 for old compilers. */
165
8bb418a3 166#define SUBTARGET_OPTION_TRANSLATE_TABLE \
699c914a
MS
167 { "-ffix-and-continue", "-mfix-and-continue" }, \
168 { "-findirect-data", "-mfix-and-continue" }, \
169 { "-faltivec", "-maltivec -include altivec.h" }, \
170 { "-fno-altivec", "-mno-altivec" }, \
171 { "-Waltivec-long-deprecated", "-mwarn-altivec-long" }, \
8bb418a3
ZL
172 { "-Wno-altivec-long-deprecated", "-mno-warn-altivec-long" }
173
0abe4170 174/* Make both r2 and r13 available for allocation. */
5dead3e5 175#define FIXED_R2 0
ee890fe2
SS
176#define FIXED_R13 0
177
ee890fe2
SS
178/* Base register for access to local variables of the function. */
179
114a6b1d
AP
180#undef HARD_FRAME_POINTER_REGNUM
181#define HARD_FRAME_POINTER_REGNUM 30
ee890fe2 182
1db02437
FS
183#undef RS6000_PIC_OFFSET_TABLE_REGNUM
184#define RS6000_PIC_OFFSET_TABLE_REGNUM 31
ee890fe2 185
ee890fe2
SS
186/* Pad the outgoing args area to 16 bytes instead of the usual 8. */
187
188#undef STARTING_FRAME_OFFSET
189#define STARTING_FRAME_OFFSET \
c9c02d98
AP
190 (FRAME_GROWS_DOWNWARD \
191 ? 0 \
192 : (RS6000_ALIGN (current_function_outgoing_args_size, 16) \
c9c02d98 193 + RS6000_SAVE_AREA))
ee890fe2
SS
194
195#undef STACK_DYNAMIC_OFFSET
196#define STACK_DYNAMIC_OFFSET(FUNDECL) \
197 (RS6000_ALIGN (current_function_outgoing_args_size, 16) \
198 + (STACK_POINTER_OFFSET))
199
d58f6584
DJ
200/* These are used by -fbranch-probabilities */
201#define HOT_TEXT_SECTION_NAME "__TEXT,__text,regular,pure_instructions"
202#define UNLIKELY_EXECUTED_TEXT_SECTION_NAME \
750054a2 203 "__TEXT,__unlikely,regular,pure_instructions"
d58f6584 204
ee890fe2
SS
205/* Define cutoff for using external functions to save floating point.
206 Currently on Darwin, always use inline stores. */
207
208#undef FP_SAVE_INLINE
209#define FP_SAVE_INLINE(FIRST_REG) ((FIRST_REG) < 64)
210
f57fe068
AM
211/* Darwin uses a function call if everything needs to be saved/restored. */
212#undef WORLD_SAVE_P
213#define WORLD_SAVE_P(INFO) ((INFO)->world_save_p)
214
94134f42
ZW
215/* The assembler wants the alternate register names, but without
216 leading percent sign. */
ee890fe2 217#undef REGISTER_NAMES
94134f42
ZW
218#define REGISTER_NAMES \
219{ \
220 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \
221 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \
222 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", \
223 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", \
224 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
225 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \
226 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \
227 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \
228 "mq", "lr", "ctr", "ap", \
229 "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \
230 "xer", \
231 "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", \
232 "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", \
233 "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", \
234 "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", \
235 "vrsave", "vscr", \
c9c02d98
AP
236 "spe_acc", "spefscr", \
237 "sfp" \
94134f42 238}
ee890fe2 239
54ee9799
DE
240/* This outputs NAME to FILE. */
241
242#undef RS6000_OUTPUT_BASENAME
243#define RS6000_OUTPUT_BASENAME(FILE, NAME) \
9dce39a4 244 assemble_name (FILE, NAME)
54ee9799 245
5eb99654
KG
246/* Globalizing directive for a label. */
247#undef GLOBAL_ASM_OP
248#define GLOBAL_ASM_OP "\t.globl "
249#undef TARGET_ASM_GLOBALIZE_LABEL
ee890fe2
SS
250
251/* This is how to output an internal label prefix. rs6000.c uses this
252 when generating traceback tables. */
253/* Not really used for Darwin? */
254
255#undef ASM_OUTPUT_INTERNAL_LABEL_PREFIX
256#define ASM_OUTPUT_INTERNAL_LABEL_PREFIX(FILE,PREFIX) \
257 fprintf (FILE, "%s", PREFIX)
258
ee890fe2
SS
259/* This says how to output an assembler line to define a global common
260 symbol. */
261/* ? */
262#undef ASM_OUTPUT_ALIGNED_COMMON
c92d8761
AP
263#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
264 do { \
5547b982 265 unsigned HOST_WIDE_INT _new_size = SIZE; \
c92d8761
AP
266 fputs (".comm ", (FILE)); \
267 RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \
5547b982
AP
268 if (_new_size == 0) _new_size = 1; \
269 fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED"\n", _new_size); \
c92d8761 270 } while (0)
ee890fe2 271
deb5bfcc
SS
272/* Override the standard rs6000 definition. */
273
274#undef ASM_COMMENT_START
275#define ASM_COMMENT_START ";"
276
ee890fe2
SS
277/* FP save and restore routines. */
278#define SAVE_FP_PREFIX "._savef"
279#define SAVE_FP_SUFFIX ""
280#define RESTORE_FP_PREFIX "._restf"
281#define RESTORE_FP_SUFFIX ""
282
e381c27a
DJ
283/* This is how to output an assembler line that says to advance
284 the location counter to a multiple of 2**LOG bytes using the
285 "nop" instruction as padding. */
286
cdc58a82
DJ
287#define ASM_OUTPUT_ALIGN_WITH_NOP(FILE,LOG) \
288 do \
289 { \
290 if ((LOG) < 3) \
291 { \
292 ASM_OUTPUT_ALIGN (FILE,LOG); \
293 } \
294 else /* nop == ori r0,r0,0 */ \
295 fprintf (FILE, "\t.align32 %d,0x60000000\n", (LOG)); \
296 } while (0)
e381c27a 297
eb1093d3
DP
298#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
299/* This is supported in cctools 465 and later. The macro test
300 above prevents using it in earlier build environments. */
e0f931d2
MS
301#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \
302 if ((LOG) != 0) \
303 { \
304 if ((MAX_SKIP) == 0) \
305 fprintf ((FILE), "\t.p2align %d\n", (LOG)); \
306 else \
307 fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \
308 }
eb1093d3
DP
309#endif
310
d1ea7616
MS
311/* Generate insns to call the profiler. */
312
ee890fe2
SS
313#define PROFILE_HOOK(LABEL) output_profile_hook (LABEL)
314
315/* Function name to call to do profiling. */
316
317#define RS6000_MCOUNT "*mcount"
318
49bd1d27 319/* Default processor: G4, and G5 for 64-bit. */
ed947a96
DJ
320
321#undef PROCESSOR_DEFAULT
322#define PROCESSOR_DEFAULT PROCESSOR_PPC7400
49bd1d27
SS
323#undef PROCESSOR_DEFAULT64
324#define PROCESSOR_DEFAULT64 PROCESSOR_POWER4
ed947a96
DJ
325
326/* Default target flag settings. Despite the fact that STMW/LMW
c1207243 327 serializes, it's still a big code size win to use them. Use FSEL by
ed947a96
DJ
328 default as well. */
329
330#undef TARGET_DEFAULT
331#define TARGET_DEFAULT (MASK_POWERPC | MASK_MULTIPLE | MASK_NEW_MNEMONICS \
332 | MASK_PPC_GFXOPT)
333
bd004fef
DE
334/* Darwin only runs on PowerPC, so short-circuit POWER patterns. */
335#undef TARGET_POWER
336#define TARGET_POWER 0
602ea4d3
JJ
337#undef TARGET_IEEEQUAD
338#define TARGET_IEEEQUAD 0
bd004fef 339
ee890fe2
SS
340/* Since Darwin doesn't do TOCs, stub this out. */
341
69b61bb1 342#define ASM_OUTPUT_SPECIAL_POOL_ENTRY_P(X, MODE) ((void)X, (void)MODE, 0)
ee890fe2 343
4f400cf6
DJ
344/* Unlike most other PowerPC targets, chars are signed, for
345 consistency with other Darwin architectures. */
346
347#undef DEFAULT_SIGNED_CHAR
348#define DEFAULT_SIGNED_CHAR (1)
349
31abac07
EC
350/* Given an rtx X being reloaded into a reg required to be
351 in class CLASS, return the class of reg to actually use.
ee890fe2
SS
352 In general this is just CLASS; but on some machines
353 in some cases it is preferable to use a more restrictive class.
31abac07 354
ee890fe2
SS
355 On the RS/6000, we have to return NO_REGS when we want to reload a
356 floating-point CONST_DOUBLE to force it to be copied to memory.
357
358 Don't allow R0 when loading the address of, or otherwise furtling with,
359 a SYMBOL_REF. */
360
361#undef PREFERRED_RELOAD_CLASS
c55a59cc 362#define PREFERRED_RELOAD_CLASS(X,CLASS) \
343f6bbf
DE
363 ((CONSTANT_P (X) \
364 && reg_classes_intersect_p ((CLASS), FLOAT_REGS)) \
c55a59cc
GK
365 ? NO_REGS \
366 : ((GET_CODE (X) == SYMBOL_REF || GET_CODE (X) == HIGH) \
367 && reg_class_subset_p (BASE_REGS, (CLASS))) \
368 ? BASE_REGS \
369 : (GET_MODE_CLASS (GET_MODE (X)) == MODE_INT \
370 && (CLASS) == NON_SPECIAL_REGS) \
371 ? GENERAL_REGS \
372 : (CLASS))
ee890fe2
SS
373
374/* Fix for emit_group_load (): force large constants to be pushed via regs. */
375#define ALWAYS_PUSH_CONSTS_USING_REGS_P 1
2bfcf297 376
58182de3
GK
377/* Compute field alignment. This is similar to the version of the
378 macro in the Apple version of GCC, except that version supports
379 'mac68k' alignment, and that version uses the computed alignment
380 always for the first field of a structure. The first-field
381 behaviour is dealt with by
382 darwin_rs6000_special_round_type_align. */
383#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
384 (TARGET_ALIGN_NATURAL ? (COMPUTED) \
385 : (COMPUTED) == 128 ? 128 \
386 : MIN ((COMPUTED), 32))
3b85fe5f 387
2bfcf297
DB
388/* Darwin increases natural record alignment to doubleword if the first
389 field is an FP double while the FP fields remain word aligned. */
58182de3
GK
390#define ROUND_TYPE_ALIGN(STRUCT, COMPUTED, SPECIFIED) \
391 ((TREE_CODE (STRUCT) == RECORD_TYPE \
392 || TREE_CODE (STRUCT) == UNION_TYPE \
393 || TREE_CODE (STRUCT) == QUAL_UNION_TYPE) \
394 && TARGET_ALIGN_NATURAL == 0 \
395 ? darwin_rs6000_special_round_type_align (STRUCT, COMPUTED, SPECIFIED) \
396 : (TREE_CODE (STRUCT) == VECTOR_TYPE \
397 && ALTIVEC_VECTOR_MODE (TYPE_MODE (STRUCT))) \
398 ? MAX (MAX ((COMPUTED), (SPECIFIED)), 128) \
2bfcf297 399 : MAX ((COMPUTED), (SPECIFIED)))
9429c84c 400
c8529ffa
GK
401/* Specify padding for the last element of a block move between
402 registers and memory. FIRST is nonzero if this is the only
403 element. */
404#define BLOCK_REG_PADDING(MODE, TYPE, FIRST) \
405 (!(FIRST) ? upward : FUNCTION_ARG_PADDING (MODE, TYPE))
406
f984d8df 407/* XXX: Darwin supports neither .quad, or .llong, but it also doesn't
88cad84b 408 support 64 bit PowerPC either, so this just keeps things happy. */
362b68a8 409#define DOUBLE_INT_ASM_OP "\t.quad\t"
c859cda6 410
609688f3 411/* For binary compatibility with 2.95; Darwin C APIs use bool from
8f4220dc
MA
412 stdbool.h, which was an int-sized enum in 2.95. Users can explicitly
413 choose to have sizeof(bool)==1 with the -mone-byte-bool switch. */
8f4220dc 414#define BOOL_TYPE_SIZE (darwin_one_byte_bool ? CHAR_TYPE_SIZE : INT_TYPE_SIZE)
9fe08fd0
RH
415
416#undef REGISTER_TARGET_PRAGMAS
2fab365e
PB
417#define REGISTER_TARGET_PRAGMAS() \
418 do \
419 { \
420 DARWIN_REGISTER_TARGET_PRAGMAS(); \
421 targetm.resolve_overloaded_builtin = altivec_resolve_overloaded_builtin; \
422 } \
423 while (0)
95727fb8 424
f8a57be8
GK
425#ifdef IN_LIBGCC2
426#include <stdbool.h>
427#endif
428
8662eb14 429#define MD_UNWIND_SUPPORT "config/rs6000/darwin-unwind.h"
f8a57be8
GK
430
431#define HAS_MD_FALLBACK_FRAME_STATE_FOR 1
699c914a 432
699c914a 433/* True, iff we're generating fast turn around debugging code. When
de2ab0ca 434 true, we arrange for function prologues to start with 5 nops so
b5969637
MS
435 that gdb may insert code to redirect them, and for data to be
436 accessed indirectly. The runtime uses this indirection to forward
699c914a
MS
437 references for data to the original instance of that data. */
438
439#define TARGET_FIX_AND_CONTINUE (darwin_fix_and_continue)
6e955430
ZL
440
441/* This is the reserved direct dispatch address for Objective-C. */
442#define OFFS_MSGSEND_FAST 0xFFFEFF00
443
444/* This is the reserved ivar address Objective-C. */
445#define OFFS_ASSIGNIVAR_FAST 0xFFFEFEC0
ed5b9f96
GK
446
447/* Old versions of Mac OS/Darwin don't have C99 functions available. */
448#undef TARGET_C99_FUNCTIONS
449#define TARGET_C99_FUNCTIONS \
450 (TARGET_64BIT \
451 || (darwin_macosx_version_min \
452 && strverscmp (darwin_macosx_version_min, "10.3") >= 0))
f475fd3c
MS
453
454/* When generating kernel code or kexts, we don't use Altivec by
455 default, as kernel code doesn't save/restore those registers. */
456#define OS_MISSING_ALTIVEC (flag_mkernel || flag_apple_kext)