1 /* Target definitions for PowerPC running Darwin (Mac OS X). 2 Copyright (C) 1997-2018 Free Software Foundation, Inc. 3 Contributed by Apple Computer Inc. 4 5 This file is part of GCC. 6 7 GCC is free software; you can redistribute it and/or modify it 8 under the terms of the GNU General Public License as published 9 by the Free Software Foundation; either version 3, or (at your 10 option) any later version. 11 12 GCC is distributed in the hope that it will be useful, but WITHOUT 13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 14 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 15 License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with GCC; see the file COPYING3. If not see 19 <http://www.gnu.org/licenses/>. */ 20 21 #undef DARWIN_PPC 22 #define DARWIN_PPC 1 23 24 /* The "Darwin ABI" is mostly like AIX, but with some key differences. */ 25 26 #define DEFAULT_ABI ABI_DARWIN 27 28 #ifdef IN_LIBGCC2 29 #undef TARGET_64BIT 30 #ifdef __powerpc64__ 31 #define TARGET_64BIT 1 32 #else 33 #define TARGET_64BIT 0 34 #endif 35 #endif 36 37 /* The object file format is Mach-O. */ 38 39 #define TARGET_OBJECT_FORMAT OBJECT_MACHO 40 41 /* Size of the Obj-C jump buffer. */ 42 #define OBJC_JBLEN ((TARGET_64BIT) ? (26*2 + 18*2 + 129 + 1) : (26 + 18*2 + 129 + 1)) 43 44 /* We're not ever going to do TOCs. */ 45 46 #define TARGET_TOC 0 47 #define TARGET_NO_TOC 1 48 49 /* Override the default rs6000 definition. */ 50 #undef PTRDIFF_TYPE 51 #define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int") 52 53 #define TARGET_OS_CPP_BUILTINS() \ 54 do \ 55 { \ 56 builtin_define ("__POWERPC__"); \ 57 builtin_define ("__PPC__"); \ 58 if (TARGET_64BIT) \ 59 { \ 60 builtin_define ("__ppc64__"); \ 61 builtin_define ("__PPC64__"); \ 62 builtin_define ("__powerpc64__"); \ 63 builtin_assert ("cpu=powerpc64"); \ 64 builtin_assert ("machine=powerpc64"); \ 65 } \ 66 else \ 67 { \ 68 builtin_define ("__ppc__"); \ 69 builtin_define_std ("PPC"); \ 70 builtin_assert ("cpu=powerpc"); \ 71 builtin_assert ("machine=powerpc"); \ 72 } \ 73 builtin_define ("__NATURAL_ALIGNMENT__"); \ 74 darwin_cpp_builtins (pfile); \ 75 } \ 76 while (0) 77 78 #define SUBTARGET_OVERRIDE_OPTIONS darwin_rs6000_override_options () 79 80 #define C_COMMON_OVERRIDE_OPTIONS do { \ 81 /* On powerpc, __cxa_get_exception_ptr is available starting in the \ 82 10.4.6 libstdc++.dylib. */ \ 83 if (strverscmp (darwin_macosx_version_min, "10.4.6") < 0 \ 84 && flag_use_cxa_get_exception_ptr == 2) \ 85 flag_use_cxa_get_exception_ptr = 0; \ 86 if (flag_mkernel) \ 87 flag_no_builtin = 1; \ 88 SUBTARGET_C_COMMON_OVERRIDE_OPTIONS; \ 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. The "-faltivec" option should have been 101 called "-maltivec" all along. */ 102 103 #define CC1_SPEC "\ 104 %(cc1_cpu) \ 105 %{g: %{!fno-eliminate-unused-debug-symbols: -feliminate-unused-debug-symbols }} \ 106 %{static: %{Zdynamic: %e conflicting code gen style switches are used}}\ 107 %{!mkernel:%{!static:%{!mdynamic-no-pic:-fPIC}}} \ 108 %{faltivec:-maltivec -include altivec.h} %{fno-altivec:-mno-altivec} \ 109 %<faltivec %<fno-altivec " \ 110 DARWIN_CC1_SPEC 111 112 /* Default to PPC for single arch builds. */ 113 #define DARWIN_ARCH_SPEC "ppc" 114 115 #define DARWIN_SUBARCH_SPEC " \ 116 %{mcpu=601:ppc601; \ 117 mcpu=603:ppc603; \ 118 mcpu=603e:ppc603; \ 119 mcpu=604:ppc604; \ 120 mcpu=604e:ppc604e; \ 121 mcpu=740:ppc750; \ 122 mcpu=750:ppc750; \ 123 mcpu=G3:ppc750; \ 124 mcpu=7400:ppc7400; \ 125 mcpu=G4:ppc7400; \ 126 mcpu=7450:ppc7450; \ 127 mcpu=970:ppc970; \ 128 mcpu=power4:ppc970; \ 129 mcpu=G5:ppc970; \ 130 :ppc}" 131 132 /* We need to jam the crt to 10.5 for 10.6 (Rosetta) use. */ 133 #undef DARWIN_CRT1_SPEC 134 #define DARWIN_CRT1_SPEC \ 135 "%:version-compare(!> 10.5 mmacosx-version-min= -lcrt1.o) \ 136 %:version-compare(>< 10.5 10.7 mmacosx-version-min= -lcrt1.10.5.o) \ 137 %{fgnu-tm: -lcrttms.o}" 138 139 /* crt2.o is at least partially required for 10.3.x and earlier. 140 It deals with registration of the unwind frames, where this is not 141 automatically provided by the system. So we need it for any case that 142 might use exceptions. */ 143 #undef DARWIN_CRT2_SPEC 144 #define DARWIN_CRT2_SPEC \ 145 "%{!m64:%{shared-libgcc|static-libstdc++|fexceptions|fobjc-exceptions|fgnu-runtime: \ 146 %:version-compare(!> 10.4 mmacosx-version-min= crt2.o%s) \ 147 }}" 148 149 /* crt3 deals with providing cxa_atexit on earlier systems (or fixing it up, 150 for broken versions). It's only needed for c++ code, so we can make it 151 conditional on shared-libgcc since that's forced on for c++. */ 152 #undef DARWIN_CRT3_SPEC 153 #define DARWIN_CRT3_SPEC \ 154 "%{!m64:%{shared-libgcc|static-libstdc++: \ 155 %:version-compare(>< 10.4 10.5 mmacosx-version-min= crt3.o%s) \ 156 %:version-compare(!> 10.4 mmacosx-version-min= crt3_2.o%s) \ 157 }}" 158 159 /* As for crt1, we need to force the dylib crt for 10.6. */ 160 #undef DARWIN_DYLIB1_SPEC 161 #define DARWIN_DYLIB1_SPEC \ 162 "%:version-compare(!> 10.5 mmacosx-version-min= -ldylib1.o) \ 163 %:version-compare(>< 10.5 10.7 mmacosx-version-min= -ldylib1.10.5.o)" 164 165 /* Likewise, the bundle crt. */ 166 #undef DARWIN_BUNDLE1_SPEC 167 #define DARWIN_BUNDLE1_SPEC \ 168 "%{!static:%:version-compare(< 10.7 mmacosx-version-min= -lbundle1.o) \ 169 %{fgnu-tm: -lcrttms.o}}" 170 171 /* The PPC regs save/restore functions are leaves and could, conceivably 172 be used by the tm destructor. */ 173 #undef ENDFILE_SPEC 174 #define ENDFILE_SPEC TM_DESTRUCTOR " -lef_ppc" 175 176 #undef SUBTARGET_EXTRA_SPECS 177 #define SUBTARGET_EXTRA_SPECS \ 178 DARWIN_EXTRA_SPECS \ 179 { "darwin_arch", DARWIN_ARCH_SPEC }, \ 180 { "darwin_crt2", DARWIN_CRT2_SPEC }, \ 181 { "darwin_subarch", DARWIN_SUBARCH_SPEC }, 182 183 /* Output a .machine directive. */ 184 #undef TARGET_ASM_FILE_START 185 #define TARGET_ASM_FILE_START rs6000_darwin_file_start 186 187 /* Make both r2 and r13 available for allocation. */ 188 #define FIXED_R2 0 189 #define FIXED_R13 0 190 191 /* Base register for access to local variables of the function. */ 192 193 #undef HARD_FRAME_POINTER_REGNUM 194 #define HARD_FRAME_POINTER_REGNUM 30 195 196 #undef RS6000_PIC_OFFSET_TABLE_REGNUM 197 #define RS6000_PIC_OFFSET_TABLE_REGNUM 31 198 199 /* Darwin's stack must remain 16-byte aligned for both 32 and 64 bit 200 ABIs. */ 201 202 #undef STACK_BOUNDARY 203 #define STACK_BOUNDARY 128 204 205 /* Offset within stack frame to start allocating local variables at. 206 For supported Darwin versions, FRAME_GROWS_DOWNWARD is true, therefore 207 this value is the offset to the END of the first local allocated. 208 209 On the RS/6000, the frame pointer is the same as the stack pointer, 210 except for dynamic allocations. So we start after the fixed area and 211 outgoing parameter area. 212 213 If the function uses dynamic stack space (CALLS_ALLOCA is set), that 214 space needs to be aligned to STACK_BOUNDARY, i.e. the sum of the 215 sizes of the fixed area and the parameter area must be a multiple of 216 STACK_BOUNDARY. */ 217 218 #undef RS6000_STARTING_FRAME_OFFSET 219 #define RS6000_STARTING_FRAME_OFFSET \ 220 (cfun->calls_alloca \ 221 ? RS6000_ALIGN (crtl->outgoing_args_size + RS6000_SAVE_AREA, 16) \ 222 : (RS6000_ALIGN (crtl->outgoing_args_size, 16) + RS6000_SAVE_AREA)) 223 224 /* Offset from the stack pointer register to an item dynamically 225 allocated on the stack, e.g., by `alloca'. 226 227 The default value for this macro is `STACK_POINTER_OFFSET' plus the 228 length of the outgoing arguments. The default is correct for most 229 machines. See `function.c' for details. 230 231 This value must be a multiple of STACK_BOUNDARY (hard coded in 232 `emit-rtl.c'). */ 233 234 #undef STACK_DYNAMIC_OFFSET 235 #define STACK_DYNAMIC_OFFSET(FUNDECL) \ 236 RS6000_ALIGN (crtl->outgoing_args_size.to_constant() \ 237 + STACK_POINTER_OFFSET, 16) 238 239 /* Darwin uses a function call if everything needs to be saved/restored. */ 240 241 #undef WORLD_SAVE_P 242 #define WORLD_SAVE_P(INFO) ((INFO)->world_save_p) 243 244 /* We don't use these on Darwin, they are just place-holders. */ 245 #define SAVE_FP_PREFIX "" 246 #define SAVE_FP_SUFFIX "" 247 #define RESTORE_FP_PREFIX "" 248 #define RESTORE_FP_SUFFIX "" 249 250 /* The assembler wants the alternate register names, but without 251 leading percent sign. */ 252 #undef REGISTER_NAMES 253 #define REGISTER_NAMES \ 254 { \ 255 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \ 256 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \ 257 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", \ 258 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", \ 259 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \ 260 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \ 261 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \ 262 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \ 263 "mq", "lr", "ctr", "ap", \ 264 "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ 265 "xer", \ 266 "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", \ 267 "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", \ 268 "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", \ 269 "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", \ 270 "vrsave", "vscr", \ 271 "sfp", \ 272 "tfhar", "tfiar", "texasr" \ 273 } 274 275 /* This outputs NAME to FILE. */ 276 277 #undef RS6000_OUTPUT_BASENAME 278 #define RS6000_OUTPUT_BASENAME(FILE, NAME) \ 279 assemble_name (FILE, NAME) 280 281 /* Globalizing directive for a label. */ 282 #undef GLOBAL_ASM_OP 283 #define GLOBAL_ASM_OP "\t.globl " 284 #undef TARGET_ASM_GLOBALIZE_LABEL 285 286 /* This is how to output an internal label prefix. rs6000.c uses this 287 when generating traceback tables. */ 288 /* Not really used for Darwin? */ 289 290 #undef ASM_OUTPUT_INTERNAL_LABEL_PREFIX 291 #define ASM_OUTPUT_INTERNAL_LABEL_PREFIX(FILE,PREFIX) \ 292 fprintf (FILE, "%s", PREFIX) 293 294 /* Override the standard rs6000 definition. */ 295 296 #undef ASM_COMMENT_START 297 #define ASM_COMMENT_START ";" 298 299 /* This is how to output an assembler line that says to advance 300 the location counter to a multiple of 2**LOG bytes using the 301 "nop" instruction as padding. */ 302 303 #define ASM_OUTPUT_ALIGN_WITH_NOP(FILE,LOG) \ 304 do \ 305 { \ 306 if ((LOG) < 3) \ 307 { \ 308 ASM_OUTPUT_ALIGN (FILE,LOG); \ 309 } \ 310 else /* nop == ori r0,r0,0 */ \ 311 fprintf (FILE, "\t.align32 %d,0x60000000\n", (LOG)); \ 312 } while (0) 313 314 #ifdef HAVE_GAS_MAX_SKIP_P2ALIGN 315 /* This is supported in cctools 465 and later. The macro test 316 above prevents using it in earlier build environments. */ 317 #define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ 318 if ((LOG) > 0) \ 319 { \ 320 if ((MAX_SKIP) <= 0) \ 321 fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ 322 else \ 323 fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ 324 } 325 #endif 326 327 /* Generate insns to call the profiler. */ 328 329 #define PROFILE_HOOK(LABEL) output_profile_hook (LABEL) 330 331 /* Function name to call to do profiling. */ 332 333 #define RS6000_MCOUNT "*mcount" 334 335 /* Default processor: G4, and G5 for 64-bit. */ 336 337 #undef PROCESSOR_DEFAULT 338 #define PROCESSOR_DEFAULT PROCESSOR_PPC7400 339 #undef PROCESSOR_DEFAULT64 340 #define PROCESSOR_DEFAULT64 PROCESSOR_POWER4 341 342 /* Default target flag settings. Despite the fact that STMW/LMW 343 serializes, it's still a big code size win to use them. Use FSEL by 344 default as well. */ 345 346 #undef TARGET_DEFAULT 347 #define TARGET_DEFAULT (MASK_MULTIPLE | MASK_PPC_GFXOPT) 348 349 /* Darwin always uses IBM long double, never IEEE long double. */ 350 #undef TARGET_IEEEQUAD 351 #define TARGET_IEEEQUAD 0 352 353 #undef TARGET_IEEEQUAD_DEFAULT 354 #define TARGET_IEEEQUAD_DEFAULT 0 355 356 /* Since Darwin doesn't do TOCs, stub this out. */ 357 358 #define ASM_OUTPUT_SPECIAL_POOL_ENTRY_P(X, MODE) ((void)X, (void)MODE, 0) 359 360 /* Unlike most other PowerPC targets, chars are signed, for 361 consistency with other Darwin architectures. */ 362 363 #undef DEFAULT_SIGNED_CHAR 364 #define DEFAULT_SIGNED_CHAR (1) 365 366 /* Given an rtx X being reloaded into a reg required to be 367 in class CLASS, return the class of reg to actually use. 368 In general this is just CLASS; but on some machines 369 in some cases it is preferable to use a more restrictive class. 370 371 On the RS/6000, we have to return NO_REGS when we want to reload a 372 floating-point CONST_DOUBLE to force it to be copied to memory. 373 374 Don't allow R0 when loading the address of, or otherwise furtling with, 375 a SYMBOL_REF. */ 376 377 #undef PREFERRED_RELOAD_CLASS 378 #define PREFERRED_RELOAD_CLASS(X,CLASS) \ 379 ((CONSTANT_P (X) \ 380 && reg_classes_intersect_p ((CLASS), FLOAT_REGS)) \ 381 ? NO_REGS \ 382 : ((GET_CODE (X) == SYMBOL_REF || GET_CODE (X) == HIGH) \ 383 && reg_class_subset_p (BASE_REGS, (CLASS))) \ 384 ? BASE_REGS \ 385 : (GET_MODE_CLASS (GET_MODE (X)) == MODE_INT \ 386 && (CLASS) == NON_SPECIAL_REGS) \ 387 ? GENERAL_REGS \ 388 : (CLASS)) 389 390 /* Compute field alignment. 391 This implements the 'power' alignment rule by pegging the alignment of 392 items (beyond the first aggregate field) to 32 bits. The pegging is 393 suppressed for vector and long double items (both 128 in size). 394 There is a dummy use of the FIELD argument to avoid an unused variable 395 warning (see PR59496). */ 396 #define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \ 397 ((void) (FIELD), \ 398 (TARGET_ALIGN_NATURAL \ 399 ? (COMPUTED) \ 400 : (COMPUTED) == 128 \ 401 ? 128 \ 402 : MIN ((COMPUTED), 32))) 403 404 /* Darwin increases natural record alignment to doubleword if the first 405 field is an FP double while the FP fields remain word aligned. */ 406 #define ROUND_TYPE_ALIGN(STRUCT, COMPUTED, SPECIFIED) \ 407 ((TREE_CODE (STRUCT) == RECORD_TYPE \ 408 || TREE_CODE (STRUCT) == UNION_TYPE \ 409 || TREE_CODE (STRUCT) == QUAL_UNION_TYPE) \ 410 && TARGET_ALIGN_NATURAL == 0 \ 411 ? darwin_rs6000_special_round_type_align (STRUCT, COMPUTED, SPECIFIED) \ 412 : (TREE_CODE (STRUCT) == VECTOR_TYPE \ 413 && ALTIVEC_VECTOR_MODE (TYPE_MODE (STRUCT))) \ 414 ? MAX (MAX ((COMPUTED), (SPECIFIED)), 128) \ 415 : MAX ((COMPUTED), (SPECIFIED))) 416 417 /* Specify padding for the last element of a block move between 418 registers and memory. FIRST is nonzero if this is the only 419 element. */ 420 #define BLOCK_REG_PADDING(MODE, TYPE, FIRST) \ 421 (!(FIRST) ? PAD_UPWARD : targetm.calls.function_arg_padding (MODE, TYPE)) 422 423 #define DOUBLE_INT_ASM_OP "\t.quad\t" 424 425 /* For binary compatibility with 2.95; Darwin C APIs use bool from 426 stdbool.h, which was an int-sized enum in 2.95. Users can explicitly 427 choose to have sizeof(bool)==1 with the -mone-byte-bool switch. */ 428 #define BOOL_TYPE_SIZE (darwin_one_byte_bool ? CHAR_TYPE_SIZE : INT_TYPE_SIZE) 429 430 #undef REGISTER_TARGET_PRAGMAS 431 #define REGISTER_TARGET_PRAGMAS() \ 432 do \ 433 { \ 434 DARWIN_REGISTER_TARGET_PRAGMAS(); \ 435 targetm.target_option.pragma_parse = rs6000_pragma_target_parse; \ 436 targetm.resolve_overloaded_builtin = altivec_resolve_overloaded_builtin; \ 437 } \ 438 while (0) 439 440 #ifdef IN_LIBGCC2 441 #include <stdbool.h> 442 #endif 443 444 /* True, iff we're generating fast turn around debugging code. When 445 true, we arrange for function prologues to start with 5 nops so 446 that gdb may insert code to redirect them, and for data to be 447 accessed indirectly. The runtime uses this indirection to forward 448 references for data to the original instance of that data. */ 449 450 #define TARGET_FIX_AND_CONTINUE (darwin_fix_and_continue) 451 452 /* This is the reserved direct dispatch address for Objective-C. */ 453 #define OFFS_MSGSEND_FAST 0xFFFEFF00 454 455 /* This is the reserved ivar address Objective-C. */ 456 #define OFFS_ASSIGNIVAR_FAST 0xFFFEFEC0 457 458 /* Old versions of Mac OS/Darwin don't have C99 functions available. */ 459 #undef TARGET_LIBC_HAS_FUNCTION 460 #define TARGET_LIBC_HAS_FUNCTION darwin_libc_has_function 461 462 /* When generating kernel code or kexts, we don't use Altivec by 463 default, as kernel code doesn't save/restore those registers. */ 464 #define OS_MISSING_ALTIVEC (flag_mkernel || flag_apple_kext) 465 466 /* Darwin has support for section anchors on powerpc*. 467 It is disabled for any section containing a "zero-sized item" (because these 468 are re-written as size=1 to be compatible with the OSX ld64). 469 The re-writing would interfere with the computation of anchor offsets. 470 Therefore, we place zero-sized items in their own sections and make such 471 sections unavailable to section anchoring. */ 472 473 #undef TARGET_ASM_OUTPUT_ANCHOR 474 #define TARGET_ASM_OUTPUT_ANCHOR darwin_asm_output_anchor 475 476 #undef TARGET_USE_ANCHORS_FOR_SYMBOL_P 477 #define TARGET_USE_ANCHORS_FOR_SYMBOL_P darwin_use_anchors_for_symbol_p 478 479 #undef DARWIN_SECTION_ANCHORS 480 #define DARWIN_SECTION_ANCHORS 1 481 482 /* PPC Darwin has to rename some of the long double builtins. */ 483 #undef SUBTARGET_INIT_BUILTINS 484 #define SUBTARGET_INIT_BUILTINS \ 485 do { \ 486 darwin_patch_builtins (); \ 487 rs6000_builtin_decls[(unsigned) (RS6000_BUILTIN_CFSTRING)] \ 488 = darwin_init_cfstring_builtins ((unsigned) (RS6000_BUILTIN_CFSTRING)); \ 489 } while(0) 490 491 /* So far, there is no rs6000_fold_builtin, if one is introduced, then 492 this will need to be modified similar to the x86 case. */ 493 #define TARGET_FOLD_BUILTIN SUBTARGET_FOLD_BUILTIN 494 495 /* First available SYMBOL flag bit for use by subtargets. */ 496 #define SYMBOL_FLAG_SUBT_DEP (SYMBOL_FLAG_MACH_DEP) 497 498 /* Use standard DWARF numbering for DWARF debugging information. */ 499 #define RS6000_USE_DWARF_NUMBERING 500 501