OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [config/] [rs6000/] [darwin.h] - Blame information for rev 820

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.