190075Sobrien/* Target definitions for PowerPC running Darwin (Mac OS X). 2169689Skan Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 3169689Skan Free Software Foundation, Inc. 490075Sobrien Contributed by Apple Computer Inc. 590075Sobrien 6132718Skan This file is part of GCC. 790075Sobrien 8132718Skan GCC is free software; you can redistribute it and/or modify it 9132718Skan under the terms of the GNU General Public License as published 10132718Skan by the Free Software Foundation; either version 2, or (at your 11132718Skan option) any later version. 1290075Sobrien 13132718Skan GCC is distributed in the hope that it will be useful, but WITHOUT 14132718Skan ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 15132718Skan or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 16132718Skan License for more details. 1790075Sobrien 18132718Skan You should have received a copy of the GNU General Public License 19132718Skan along with GCC; see the file COPYING. If not, write to the 20169689Skan Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, 21169689Skan MA 02110-1301, USA. */ 2290075Sobrien 2390075Sobrien#undef TARGET_VERSION 2490075Sobrien#define TARGET_VERSION fprintf (stderr, " (Darwin/PowerPC)"); 2590075Sobrien 2690075Sobrien/* The "Darwin ABI" is mostly like AIX, but with some key differences. */ 2790075Sobrien 2890075Sobrien#define DEFAULT_ABI ABI_DARWIN 2990075Sobrien 30169689Skan#ifdef IN_LIBGCC2 31169689Skan#undef TARGET_64BIT 32169689Skan#ifdef __powerpc64__ 33169689Skan#define TARGET_64BIT 1 34169689Skan#else 35169689Skan#define TARGET_64BIT 0 36169689Skan#endif 37169689Skan#endif 38169689Skan 3990075Sobrien/* The object file format is Mach-O. */ 4090075Sobrien 4190075Sobrien#define TARGET_OBJECT_FORMAT OBJECT_MACHO 4290075Sobrien 43169689Skan/* Size of the Obj-C jump buffer. */ 44169689Skan#define OBJC_JBLEN ((TARGET_64BIT) ? (26*2 + 18*2 + 129 + 1) : (26 + 18*2 + 129 + 1)) 45169689Skan 4690075Sobrien/* We're not ever going to do TOCs. */ 4790075Sobrien 4890075Sobrien#define TARGET_TOC 0 4990075Sobrien#define TARGET_NO_TOC 1 5090075Sobrien 51169689Skan/* Override the default rs6000 definition. */ 52169689Skan#undef PTRDIFF_TYPE 53169689Skan#define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int") 54132718Skan 55169689Skan/* Translate config/rs6000/darwin.opt to config/darwin.h. */ 56169689Skan#define TARGET_DYNAMIC_NO_PIC (TARGET_MACHO_DYNAMIC_NO_PIC) 57132718Skan 58117395Skan#define TARGET_OS_CPP_BUILTINS() \ 59117395Skan do \ 60117395Skan { \ 61169689Skan if (!TARGET_64BIT) builtin_define ("__ppc__"); \ 62169689Skan if (TARGET_64BIT) builtin_define ("__ppc64__"); \ 63117395Skan builtin_define ("__POWERPC__"); \ 64117395Skan builtin_define ("__NATURAL_ALIGNMENT__"); \ 65169689Skan darwin_cpp_builtins (pfile); \ 66117395Skan } \ 67117395Skan while (0) 6890075Sobrien 69132718Skan 70169689Skan#define SUBTARGET_OVERRIDE_OPTIONS \ 71132718Skando { \ 72169689Skan /* The Darwin ABI always includes AltiVec, can't be (validly) turned \ 73169689Skan off. */ \ 74132718Skan rs6000_altivec_abi = 1; \ 75169689Skan TARGET_ALTIVEC_VRSAVE = 1; \ 76132718Skan if (DEFAULT_ABI == ABI_DARWIN) \ 77132718Skan { \ 78132718Skan if (MACHO_DYNAMIC_NO_PIC_P) \ 79132718Skan { \ 80132718Skan if (flag_pic) \ 81169689Skan warning (0, "-mdynamic-no-pic overrides -fpic or -fPIC"); \ 82132718Skan flag_pic = 0; \ 83132718Skan } \ 84132718Skan else if (flag_pic == 1) \ 85132718Skan { \ 86132718Skan flag_pic = 2; \ 87132718Skan } \ 88132718Skan } \ 89169689Skan if (TARGET_64BIT && ! TARGET_POWERPC64) \ 90169689Skan { \ 91169689Skan target_flags |= MASK_POWERPC64; \ 92169689Skan warning (0, "-m64 requires PowerPC64 architecture, enabling"); \ 93169689Skan } \ 94169689Skan if (flag_mkernel) \ 95169689Skan { \ 96169689Skan rs6000_default_long_calls = 1; \ 97169689Skan target_flags |= MASK_SOFT_FLOAT; \ 98169689Skan } \ 99169689Skan \ 100169689Skan /* Make -m64 imply -maltivec. Darwin's 64-bit ABI includes \ 101169689Skan Altivec. */ \ 102169689Skan if (!flag_mkernel && !flag_apple_kext \ 103169689Skan && TARGET_64BIT \ 104169689Skan && ! (target_flags_explicit & MASK_ALTIVEC)) \ 105169689Skan target_flags |= MASK_ALTIVEC; \ 106169689Skan \ 107169689Skan /* Unless the user (not the configurer) has explicitly overridden \ 108169689Skan it with -mcpu=G3 or -mno-altivec, then 10.5+ targets default to \ 109169689Skan G4 unless targetting the kernel. */ \ 110169689Skan if (!flag_mkernel \ 111169689Skan && !flag_apple_kext \ 112169689Skan && darwin_macosx_version_min \ 113169689Skan && strverscmp (darwin_macosx_version_min, "10.5") >= 0 \ 114169689Skan && ! (target_flags_explicit & MASK_ALTIVEC) \ 115169689Skan && ! rs6000_select[1].string) \ 116169689Skan { \ 117169689Skan target_flags |= MASK_ALTIVEC; \ 118169689Skan } \ 119169689Skan} while(0) 120132718Skan 121169689Skan#define C_COMMON_OVERRIDE_OPTIONS do { \ 122169689Skan /* On powerpc, __cxa_get_exception_ptr is available starting in the \ 123169689Skan 10.4.6 libstdc++.dylib. */ \ 124169689Skan if ((! darwin_macosx_version_min \ 125169689Skan || strverscmp (darwin_macosx_version_min, "10.4.6") < 0) \ 126169689Skan && flag_use_cxa_get_exception_ptr == 2) \ 127169689Skan flag_use_cxa_get_exception_ptr = 0; \ 128169689Skan if (flag_mkernel) \ 129169689Skan flag_no_builtin = 1; \ 130169689Skan SUBTARGET_C_COMMON_OVERRIDE_OPTIONS; \ 131169689Skan} while (0) 132169689Skan 133169689Skan/* Darwin has 128-bit long double support in libc in 10.4 and later. 134169689Skan Default to 128-bit long doubles even on earlier platforms for ABI 135169689Skan consistency; arithmetic will work even if libc and libm support is 136169689Skan not available. */ 137169689Skan 138169689Skan#define RS6000_DEFAULT_LONG_DOUBLE_SIZE 128 139169689Skan 140169689Skan 14190075Sobrien/* We want -fPIC by default, unless we're using -static to compile for 14290075Sobrien the kernel or some such. */ 14390075Sobrien 144117395Skan#define CC1_SPEC "\ 145169689Skan %{g: %{!fno-eliminate-unused-debug-symbols: -feliminate-unused-debug-symbols }} \ 146169689Skan %{static: %{Zdynamic: %e conflicting code gen style switches are used}}\ 147169689Skan %{!mkernel:%{!static:%{!mdynamic-no-pic:-fPIC}}}" 14890075Sobrien 149169689Skan#define DARWIN_ARCH_SPEC "%{m64:ppc64;:ppc}" 150132718Skan 151169689Skan#define DARWIN_SUBARCH_SPEC " \ 152169689Skan %{m64: ppc64} \ 153169689Skan %{!m64: \ 154169689Skan %{mcpu=601:ppc601; \ 155169689Skan mcpu=603:ppc603; \ 156169689Skan mcpu=603e:ppc603; \ 157169689Skan mcpu=604:ppc604; \ 158169689Skan mcpu=604e:ppc604e; \ 159169689Skan mcpu=740:ppc750; \ 160169689Skan mcpu=750:ppc750; \ 161169689Skan mcpu=G3:ppc750; \ 162169689Skan mcpu=7400:ppc7400; \ 163169689Skan mcpu=G4:ppc7400; \ 164169689Skan mcpu=7450:ppc7450; \ 165169689Skan mcpu=970:ppc970; \ 166169689Skan mcpu=power4:ppc970; \ 167169689Skan mcpu=G5:ppc970; \ 168169689Skan :ppc}}" 169169689Skan 170169689Skan/* crt2.o is at least partially required for 10.3.x and earlier. */ 171169689Skan#define DARWIN_CRT2_SPEC \ 172169689Skan "%{!m64:%:version-compare(!> 10.4 mmacosx-version-min= crt2.o%s)}" 173169689Skan 174132718Skan#undef SUBTARGET_EXTRA_SPECS 175132718Skan#define SUBTARGET_EXTRA_SPECS \ 176169689Skan { "darwin_arch", DARWIN_ARCH_SPEC }, \ 177169689Skan { "darwin_crt2", DARWIN_CRT2_SPEC }, \ 178169689Skan { "darwin_subarch", DARWIN_SUBARCH_SPEC }, 179132718Skan 180169689Skan/* Output a .machine directive. */ 181169689Skan#undef TARGET_ASM_FILE_START 182169689Skan#define TARGET_ASM_FILE_START rs6000_darwin_file_start 183169689Skan 184169689Skan/* The "-faltivec" option should have been called "-maltivec" all 185169689Skan along. -ffix-and-continue and -findirect-data is for compatibility 186169689Skan for old compilers. */ 187169689Skan 188169689Skan#define SUBTARGET_OPTION_TRANSLATE_TABLE \ 189169689Skan { "-ffix-and-continue", "-mfix-and-continue" }, \ 190169689Skan { "-findirect-data", "-mfix-and-continue" }, \ 191169689Skan { "-faltivec", "-maltivec -include altivec.h" }, \ 192169689Skan { "-fno-altivec", "-mno-altivec" }, \ 193169689Skan { "-Waltivec-long-deprecated", "-mwarn-altivec-long" }, \ 194146895Skan { "-Wno-altivec-long-deprecated", "-mno-warn-altivec-long" } 195146895Skan 196169689Skan/* Make both r2 and r13 available for allocation. */ 19790075Sobrien#define FIXED_R2 0 19890075Sobrien#define FIXED_R13 0 19990075Sobrien 20090075Sobrien/* Base register for access to local variables of the function. */ 20190075Sobrien 202169689Skan#undef HARD_FRAME_POINTER_REGNUM 203169689Skan#define HARD_FRAME_POINTER_REGNUM 30 20490075Sobrien 20596263Sobrien#undef RS6000_PIC_OFFSET_TABLE_REGNUM 20696263Sobrien#define RS6000_PIC_OFFSET_TABLE_REGNUM 31 20790075Sobrien 20890075Sobrien/* Pad the outgoing args area to 16 bytes instead of the usual 8. */ 20990075Sobrien 21090075Sobrien#undef STARTING_FRAME_OFFSET 21190075Sobrien#define STARTING_FRAME_OFFSET \ 212169689Skan (FRAME_GROWS_DOWNWARD \ 213169689Skan ? 0 \ 214169689Skan : (RS6000_ALIGN (current_function_outgoing_args_size, 16) \ 215169689Skan + RS6000_SAVE_AREA)) 21690075Sobrien 21790075Sobrien#undef STACK_DYNAMIC_OFFSET 21890075Sobrien#define STACK_DYNAMIC_OFFSET(FUNDECL) \ 21990075Sobrien (RS6000_ALIGN (current_function_outgoing_args_size, 16) \ 22090075Sobrien + (STACK_POINTER_OFFSET)) 22190075Sobrien 222132718Skan/* These are used by -fbranch-probabilities */ 223132718Skan#define HOT_TEXT_SECTION_NAME "__TEXT,__text,regular,pure_instructions" 224132718Skan#define UNLIKELY_EXECUTED_TEXT_SECTION_NAME \ 225169689Skan "__TEXT,__unlikely,regular,pure_instructions" 226132718Skan 22790075Sobrien/* Define cutoff for using external functions to save floating point. 22890075Sobrien Currently on Darwin, always use inline stores. */ 22990075Sobrien 23090075Sobrien#undef FP_SAVE_INLINE 23190075Sobrien#define FP_SAVE_INLINE(FIRST_REG) ((FIRST_REG) < 64) 23290075Sobrien 233169689Skan/* Darwin uses a function call if everything needs to be saved/restored. */ 234169689Skan#undef WORLD_SAVE_P 235169689Skan#define WORLD_SAVE_P(INFO) ((INFO)->world_save_p) 236169689Skan 237132718Skan/* The assembler wants the alternate register names, but without 238132718Skan leading percent sign. */ 23990075Sobrien#undef REGISTER_NAMES 240132718Skan#define REGISTER_NAMES \ 241132718Skan{ \ 242132718Skan "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \ 243132718Skan "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \ 244132718Skan "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", \ 245132718Skan "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", \ 246132718Skan "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \ 247132718Skan "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \ 248132718Skan "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \ 249132718Skan "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \ 250132718Skan "mq", "lr", "ctr", "ap", \ 251132718Skan "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ 252132718Skan "xer", \ 253132718Skan "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", \ 254132718Skan "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", \ 255132718Skan "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", \ 256132718Skan "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", \ 257132718Skan "vrsave", "vscr", \ 258169689Skan "spe_acc", "spefscr", \ 259169689Skan "sfp" \ 260132718Skan} 26190075Sobrien 26290075Sobrien/* This outputs NAME to FILE. */ 26390075Sobrien 26490075Sobrien#undef RS6000_OUTPUT_BASENAME 26590075Sobrien#define RS6000_OUTPUT_BASENAME(FILE, NAME) \ 266132718Skan assemble_name (FILE, NAME) 26790075Sobrien 268117395Skan/* Globalizing directive for a label. */ 269117395Skan#undef GLOBAL_ASM_OP 270117395Skan#define GLOBAL_ASM_OP "\t.globl " 271117395Skan#undef TARGET_ASM_GLOBALIZE_LABEL 27290075Sobrien 27390075Sobrien/* This is how to output an internal label prefix. rs6000.c uses this 27490075Sobrien when generating traceback tables. */ 27590075Sobrien/* Not really used for Darwin? */ 27690075Sobrien 27790075Sobrien#undef ASM_OUTPUT_INTERNAL_LABEL_PREFIX 27890075Sobrien#define ASM_OUTPUT_INTERNAL_LABEL_PREFIX(FILE,PREFIX) \ 27990075Sobrien fprintf (FILE, "%s", PREFIX) 28090075Sobrien 28190075Sobrien/* This says how to output an assembler line to define a global common 28290075Sobrien symbol. */ 283169689Skan#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \ 284169689Skan do { \ 285169689Skan unsigned HOST_WIDE_INT _new_size = SIZE; \ 286169689Skan fputs (".comm ", (FILE)); \ 287169689Skan RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \ 288169689Skan if (_new_size == 0) _new_size = 1; \ 289169689Skan fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED"\n", _new_size); \ 290169689Skan } while (0) 29190075Sobrien 29290075Sobrien/* Override the standard rs6000 definition. */ 29390075Sobrien 29490075Sobrien#undef ASM_COMMENT_START 29590075Sobrien#define ASM_COMMENT_START ";" 29690075Sobrien 29790075Sobrien/* FP save and restore routines. */ 29890075Sobrien#define SAVE_FP_PREFIX "._savef" 29990075Sobrien#define SAVE_FP_SUFFIX "" 30090075Sobrien#define RESTORE_FP_PREFIX "._restf" 30190075Sobrien#define RESTORE_FP_SUFFIX "" 30290075Sobrien 303117395Skan/* This is how to output an assembler line that says to advance 304117395Skan the location counter to a multiple of 2**LOG bytes using the 305117395Skan "nop" instruction as padding. */ 306117395Skan 307117395Skan#define ASM_OUTPUT_ALIGN_WITH_NOP(FILE,LOG) \ 308117395Skan do \ 309117395Skan { \ 310117395Skan if ((LOG) < 3) \ 311117395Skan { \ 312117395Skan ASM_OUTPUT_ALIGN (FILE,LOG); \ 313117395Skan } \ 314117395Skan else /* nop == ori r0,r0,0 */ \ 315117395Skan fprintf (FILE, "\t.align32 %d,0x60000000\n", (LOG)); \ 316117395Skan } while (0) 317117395Skan 318169689Skan#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN 319169689Skan/* This is supported in cctools 465 and later. The macro test 320169689Skan above prevents using it in earlier build environments. */ 321169689Skan#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ 322169689Skan if ((LOG) != 0) \ 323169689Skan { \ 324169689Skan if ((MAX_SKIP) == 0) \ 325169689Skan fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ 326169689Skan else \ 327169689Skan fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ 328169689Skan } 329169689Skan#endif 330169689Skan 33190075Sobrien/* Generate insns to call the profiler. */ 33290075Sobrien 33390075Sobrien#define PROFILE_HOOK(LABEL) output_profile_hook (LABEL) 33490075Sobrien 33590075Sobrien/* Function name to call to do profiling. */ 33690075Sobrien 33790075Sobrien#define RS6000_MCOUNT "*mcount" 33890075Sobrien 339169689Skan/* Default processor: G4, and G5 for 64-bit. */ 34090075Sobrien 34190075Sobrien#undef PROCESSOR_DEFAULT 34290075Sobrien#define PROCESSOR_DEFAULT PROCESSOR_PPC7400 343169689Skan#undef PROCESSOR_DEFAULT64 344169689Skan#define PROCESSOR_DEFAULT64 PROCESSOR_POWER4 34590075Sobrien 34690075Sobrien/* Default target flag settings. Despite the fact that STMW/LMW 347132718Skan serializes, it's still a big code size win to use them. Use FSEL by 34890075Sobrien default as well. */ 34990075Sobrien 35090075Sobrien#undef TARGET_DEFAULT 35190075Sobrien#define TARGET_DEFAULT (MASK_POWERPC | MASK_MULTIPLE | MASK_NEW_MNEMONICS \ 35290075Sobrien | MASK_PPC_GFXOPT) 35390075Sobrien 354169689Skan/* Darwin only runs on PowerPC, so short-circuit POWER patterns. */ 355169689Skan#undef TARGET_POWER 356169689Skan#define TARGET_POWER 0 357169689Skan#undef TARGET_IEEEQUAD 358169689Skan#define TARGET_IEEEQUAD 0 359169689Skan 36090075Sobrien/* Since Darwin doesn't do TOCs, stub this out. */ 36190075Sobrien 362169689Skan#define ASM_OUTPUT_SPECIAL_POOL_ENTRY_P(X, MODE) ((void)X, (void)MODE, 0) 36390075Sobrien 36490075Sobrien/* Unlike most other PowerPC targets, chars are signed, for 36590075Sobrien consistency with other Darwin architectures. */ 36690075Sobrien 36790075Sobrien#undef DEFAULT_SIGNED_CHAR 36890075Sobrien#define DEFAULT_SIGNED_CHAR (1) 36990075Sobrien 370169689Skan/* Given an rtx X being reloaded into a reg required to be 371169689Skan in class CLASS, return the class of reg to actually use. 37290075Sobrien In general this is just CLASS; but on some machines 37390075Sobrien in some cases it is preferable to use a more restrictive class. 374169689Skan 37590075Sobrien On the RS/6000, we have to return NO_REGS when we want to reload a 37690075Sobrien floating-point CONST_DOUBLE to force it to be copied to memory. 37790075Sobrien 37890075Sobrien Don't allow R0 when loading the address of, or otherwise furtling with, 37990075Sobrien a SYMBOL_REF. */ 38090075Sobrien 38190075Sobrien#undef PREFERRED_RELOAD_CLASS 382132718Skan#define PREFERRED_RELOAD_CLASS(X,CLASS) \ 383169689Skan ((CONSTANT_P (X) \ 384169689Skan && reg_classes_intersect_p ((CLASS), FLOAT_REGS)) \ 385132718Skan ? NO_REGS \ 386132718Skan : ((GET_CODE (X) == SYMBOL_REF || GET_CODE (X) == HIGH) \ 387132718Skan && reg_class_subset_p (BASE_REGS, (CLASS))) \ 388132718Skan ? BASE_REGS \ 389132718Skan : (GET_MODE_CLASS (GET_MODE (X)) == MODE_INT \ 390132718Skan && (CLASS) == NON_SPECIAL_REGS) \ 391132718Skan ? GENERAL_REGS \ 392132718Skan : (CLASS)) 39390075Sobrien 39490075Sobrien/* Fix for emit_group_load (): force large constants to be pushed via regs. */ 39590075Sobrien#define ALWAYS_PUSH_CONSTS_USING_REGS_P 1 39690075Sobrien 397132718Skan/* This now supports a natural alignment mode */ 39890075Sobrien/* Darwin word-aligns FP doubles but doubleword-aligns 64-bit ints. */ 39990075Sobrien#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \ 400132718Skan (TARGET_ALIGN_NATURAL ? (COMPUTED) : \ 40190075Sobrien (TYPE_MODE (TREE_CODE (TREE_TYPE (FIELD)) == ARRAY_TYPE \ 40290075Sobrien ? get_inner_array_type (FIELD) \ 40390075Sobrien : TREE_TYPE (FIELD)) == DFmode \ 404132718Skan ? MIN ((COMPUTED), 32) : (COMPUTED))) 40590075Sobrien 40690075Sobrien/* Darwin increases natural record alignment to doubleword if the first 40790075Sobrien field is an FP double while the FP fields remain word aligned. */ 408132718Skan#define ROUND_TYPE_ALIGN(STRUCT, COMPUTED, SPECIFIED) \ 409132718Skan ((TREE_CODE (STRUCT) == RECORD_TYPE \ 410132718Skan || TREE_CODE (STRUCT) == UNION_TYPE \ 411132718Skan || TREE_CODE (STRUCT) == QUAL_UNION_TYPE) \ 412132718Skan && TARGET_ALIGN_NATURAL == 0 \ 413132718Skan ? rs6000_special_round_type_align (STRUCT, COMPUTED, SPECIFIED) \ 414169689Skan : (TREE_CODE (STRUCT) == VECTOR_TYPE \ 415169689Skan && ALTIVEC_VECTOR_MODE (TYPE_MODE (STRUCT))) \ 416132718Skan ? MAX (MAX ((COMPUTED), (SPECIFIED)), 128) \ 41790075Sobrien : MAX ((COMPUTED), (SPECIFIED))) 41896263Sobrien 419169689Skan/* Specify padding for the last element of a block move between 420169689Skan registers and memory. FIRST is nonzero if this is the only 421169689Skan element. */ 422169689Skan#define BLOCK_REG_PADDING(MODE, TYPE, FIRST) \ 423169689Skan (!(FIRST) ? upward : FUNCTION_ARG_PADDING (MODE, TYPE)) 424169689Skan 42590075Sobrien/* XXX: Darwin supports neither .quad, or .llong, but it also doesn't 426117395Skan support 64 bit PowerPC either, so this just keeps things happy. */ 42790075Sobrien#define DOUBLE_INT_ASM_OP "\t.quad\t" 42890075Sobrien 42996263Sobrien/* For binary compatibility with 2.95; Darwin C APIs use bool from 430169689Skan stdbool.h, which was an int-sized enum in 2.95. Users can explicitly 431169689Skan choose to have sizeof(bool)==1 with the -mone-byte-bool switch. */ 432169689Skan#define BOOL_TYPE_SIZE (darwin_one_byte_bool ? CHAR_TYPE_SIZE : INT_TYPE_SIZE) 433117395Skan 434117395Skan#undef REGISTER_TARGET_PRAGMAS 435169689Skan#define REGISTER_TARGET_PRAGMAS() \ 436169689Skan do \ 437169689Skan { \ 438169689Skan DARWIN_REGISTER_TARGET_PRAGMAS(); \ 439169689Skan targetm.resolve_overloaded_builtin = altivec_resolve_overloaded_builtin; \ 440169689Skan } \ 441169689Skan while (0) 442132718Skan 443169689Skan#ifdef IN_LIBGCC2 444169689Skan#include <stdbool.h> 445169689Skan#endif 446169689Skan 447169689Skan#define MD_UNWIND_SUPPORT "config/rs6000/darwin-unwind.h" 448169689Skan 449169689Skan#define HAS_MD_FALLBACK_FRAME_STATE_FOR 1 450169689Skan 451169689Skan/* True, iff we're generating fast turn around debugging code. When 452169689Skan true, we arrange for function prologues to start with 5 nops so 453169689Skan that gdb may insert code to redirect them, and for data to be 454169689Skan accessed indirectly. The runtime uses this indirection to forward 455169689Skan references for data to the original instance of that data. */ 456169689Skan 457169689Skan#define TARGET_FIX_AND_CONTINUE (darwin_fix_and_continue) 458169689Skan 459169689Skan/* This is the reserved direct dispatch address for Objective-C. */ 460169689Skan#define OFFS_MSGSEND_FAST 0xFFFEFF00 461169689Skan 462169689Skan/* This is the reserved ivar address Objective-C. */ 463169689Skan#define OFFS_ASSIGNIVAR_FAST 0xFFFEFEC0 464169689Skan 465169689Skan/* Old versions of Mac OS/Darwin don't have C99 functions available. */ 466169689Skan#undef TARGET_C99_FUNCTIONS 467169689Skan#define TARGET_C99_FUNCTIONS \ 468169689Skan (TARGET_64BIT \ 469169689Skan || (darwin_macosx_version_min \ 470169689Skan && strverscmp (darwin_macosx_version_min, "10.3") >= 0)) 471169689Skan 472169689Skan/* When generating kernel code or kexts, we don't use Altivec by 473169689Skan default, as kernel code doesn't save/restore those registers. */ 474169689Skan#define OS_MISSING_ALTIVEC (flag_mkernel || flag_apple_kext) 475