OSDN Git Service

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