OSDN Git Service

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