Mercurial > hg > CbC > CbC_gcc
diff gcc/config/i386/darwin.h @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 84e7813d76e9 |
children |
line wrap: on
line diff
--- a/gcc/config/i386/darwin.h Thu Oct 25 07:37:49 2018 +0900 +++ b/gcc/config/i386/darwin.h Thu Feb 13 11:34:05 2020 +0900 @@ -1,5 +1,5 @@ /* Target definitions for x86 running Darwin. - Copyright (C) 2001-2018 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. Contributed by Apple Computer Inc. This file is part of GCC. @@ -25,10 +25,10 @@ #undef DARWIN_X86 #define DARWIN_X86 1 -#undef TARGET_64BIT -#undef TARGET_64BIT_P +#undef TARGET_64BIT #define TARGET_64BIT TARGET_ISA_64BIT -#define TARGET_64BIT_P(x) TARGET_ISA_64BIT_P(x) +#undef TARGET_64BIT_P +#define TARGET_64BIT_P(x) TARGET_ISA_64BIT_P(x) #ifdef IN_LIBGCC2 #undef TARGET_64BIT @@ -47,12 +47,13 @@ image. Therefore, for 64b exes at least, we must use the libunwind implementation, even when static-libgcc is specified. We put libSystem first so that - unwinder symbols are satisfied from there. */ + unwinder symbols are satisfied from there. + We default to 64b for single-arch builds, so apply this unconditionally. */ #undef REAL_LIBGCC_SPEC #define REAL_LIBGCC_SPEC \ "%{static-libgcc|static: \ - %{m64:%:version-compare(>= 10.6 mmacosx-version-min= -lSystem)} \ - -lgcc_eh -lgcc; \ + %:version-compare(>= 10.6 mmacosx-version-min= -lSystem) \ + -lgcc_eh -lgcc; \ shared-libgcc|fexceptions|fgnu-runtime: \ %:version-compare(!> 10.5 mmacosx-version-min= -lgcc_s.10.4) \ %:version-compare(>< 10.5 10.6 mmacosx-version-min= -lgcc_s.10.5) \ @@ -70,14 +71,15 @@ #undef TARGET_FPMATH_DEFAULT #define TARGET_FPMATH_DEFAULT (TARGET_SSE ? FPMATH_SSE : FPMATH_387) +#undef TARGET_FPMATH_DEFAULT_P +#define TARGET_FPMATH_DEFAULT_P(x) \ + (TARGET_SSE_P(x) ? FPMATH_SSE : FPMATH_387) #define TARGET_OS_CPP_BUILTINS() \ - do \ - { \ - builtin_define ("__LITTLE_ENDIAN__"); \ - darwin_cpp_builtins (pfile); \ - } \ - while (0) + do { \ + builtin_define ("__LITTLE_ENDIAN__"); \ + darwin_cpp_builtins (pfile); \ + } while (0) #undef PTRDIFF_TYPE #define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int") @@ -88,14 +90,12 @@ #undef WCHAR_TYPE_SIZE #define WCHAR_TYPE_SIZE 32 -/* Generate branch islands stubs if this is true. */ -extern int darwin_emit_branch_islands; - -#undef TARGET_MACHO_BRANCH_ISLANDS -#define TARGET_MACHO_BRANCH_ISLANDS darwin_emit_branch_islands +/* Generate pic symbol indirection stubs if this is true. */ +#undef TARGET_MACHO_SYMBOL_STUBS +#define TARGET_MACHO_SYMBOL_STUBS (darwin_symbol_stubs) /* For compatibility with OSX system tools, use the new style of pic stub - if this is set. */ + if this is set (default). */ #undef MACHOPIC_ATT_STUB #define MACHOPIC_ATT_STUB (darwin_macho_att_stub) @@ -111,10 +111,6 @@ /* On Darwin, the stack is 128-bit aligned at the point of every call. Failure to ensure this will lead to a crash in the system libraries or dynamic loader. */ -#undef STACK_BOUNDARY -#define STACK_BOUNDARY \ - ((profile_flag || (TARGET_64BIT && ix86_abi == MS_ABI)) \ - ? 128 : BITS_PER_WORD) #undef MAIN_STACK_BOUNDARY #define MAIN_STACK_BOUNDARY 128 @@ -125,7 +121,7 @@ than 128 bits for Darwin, but it's easier to up the alignment if it's below the minimum. */ #undef PREFERRED_STACK_BOUNDARY -#define PREFERRED_STACK_BOUNDARY \ +#define PREFERRED_STACK_BOUNDARY \ MAX (128, ix86_preferred_stack_boundary) /* We want -fPIC by default, unless we're using -static to compile for @@ -134,7 +130,9 @@ #undef CC1_SPEC #define CC1_SPEC "%(cc1_cpu) \ %{!mkernel:%{!static:%{!mdynamic-no-pic:-fPIC}}} \ - %{g: %{!fno-eliminate-unused-debug-symbols: -feliminate-unused-debug-symbols }} " \ + %{g: %{!fno-eliminate-unused-debug-symbols: -feliminate-unused-debug-symbols }} \ + %{mx32:%eDarwin is not an mx32 platform} \ + %{mfentry*:%eDarwin does not support -mfentry or associated options}" \ DARWIN_CC1_SPEC #undef ASM_SPEC @@ -142,9 +140,6 @@ " ASM_OPTIONS " -force_cpusubtype_ALL \ %{static}" ASM_MMACOSX_VERSION_MIN_SPEC -#define DARWIN_ARCH_SPEC "%{m64:x86_64;:i386}" -#define DARWIN_SUBARCH_SPEC DARWIN_ARCH_SPEC - #undef ENDFILE_SPEC #define ENDFILE_SPEC \ "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ @@ -152,12 +147,15 @@ %{mpc64:crtprec64.o%s} \ %{mpc80:crtprec80.o%s}" TM_DESTRUCTOR +/* We default to x86_64 for single-arch builds, bi-arch overrides. */ +#define DARWIN_ARCH_SPEC "x86_64" + #undef SUBTARGET_EXTRA_SPECS #define SUBTARGET_EXTRA_SPECS \ DARWIN_EXTRA_SPECS \ - { "darwin_arch", DARWIN_ARCH_SPEC }, \ + { "darwin_arch", DARWIN_ARCH_SPEC }, \ { "darwin_crt2", "" }, \ - { "darwin_subarch", DARWIN_SUBARCH_SPEC }, + { "darwin_subarch", DARWIN_ARCH_SPEC }, /* The Darwin assembler mostly follows AT&T syntax. */ #undef ASSEMBLER_DIALECT @@ -183,15 +181,15 @@ and returns float values in the 387. */ #undef TARGET_SUBTARGET_DEFAULT -#define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_128BIT_LONG_DOUBLE) +#define TARGET_SUBTARGET_DEFAULT \ + (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_128BIT_LONG_DOUBLE) /* For darwin we want to target specific processor features as a minimum, but these unfortunately don't correspond to a specific processor. */ #undef TARGET_SUBTARGET32_ISA_DEFAULT -#define TARGET_SUBTARGET32_ISA_DEFAULT (OPTION_MASK_ISA_MMX \ - | OPTION_MASK_ISA_SSE \ - | OPTION_MASK_ISA_SSE2 \ - | OPTION_MASK_ISA_SSE3) +#define TARGET_SUBTARGET32_ISA_DEFAULT \ + (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_SSE \ + | OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE3) #undef TARGET_SUBTARGET64_ISA_DEFAULT #define TARGET_SUBTARGET64_ISA_DEFAULT TARGET_SUBTARGET32_ISA_DEFAULT @@ -213,29 +211,47 @@ #define SUBTARGET_ENCODE_SECTION_INFO darwin_encode_section_info #undef ASM_OUTPUT_ALIGN -#define ASM_OUTPUT_ALIGN(FILE,LOG) \ - do { if ((LOG) != 0) \ - { \ - if (in_section == text_section) \ - fprintf (FILE, "\t%s %d,0x90\n", ALIGN_ASM_OP, (LOG)); \ - else \ - fprintf (FILE, "\t%s %d\n", ALIGN_ASM_OP, (LOG)); \ - } \ - } while (0) +#define ASM_OUTPUT_ALIGN(FILE,LOG) \ + do { \ + if ((LOG) != 0) \ + { \ + if (in_section == text_section) \ + fprintf (FILE, "\t%s %d,0x90\n", ALIGN_ASM_OP, (LOG)); \ + else \ + fprintf (FILE, "\t%s %d\n", ALIGN_ASM_OP, (LOG)); \ + } \ + } while (0) -/* Darwin profiling -- call mcount. */ +#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN +#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ + do { \ + if ((LOG) != 0) { \ + if ((MAX_SKIP) == 0 || (MAX_SKIP) >= (1 << (LOG)) - 1) \ + fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ + else \ + fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ + } \ + } while (0) +#endif + +/* Darwin x86 assemblers support the .ident directive. */ + +#undef TARGET_ASM_OUTPUT_IDENT +#define TARGET_ASM_OUTPUT_IDENT default_asm_output_ident_directive + +/* Darwin profiling -- call mcount. + If we need a stub, then we unconditionally mark it as used. */ #undef FUNCTION_PROFILER #define FUNCTION_PROFILER(FILE, LABELNO) \ - do { \ - if (TARGET_MACHO_BRANCH_ISLANDS \ - && MACHOPIC_INDIRECT && !TARGET_64BIT) \ - { \ - const char *name = machopic_mcount_stub_name (); \ - fprintf (FILE, "\tcall %s\n", name+1); /* skip '&' */ \ - machopic_validate_stub_or_non_lazy_ptr (name); \ - } \ - else fprintf (FILE, "\tcall mcount\n"); \ - } while (0) + do { \ + if (TARGET_MACHO_SYMBOL_STUBS \ + && MACHOPIC_INDIRECT && !TARGET_64BIT) \ + { \ + const char *name = machopic_mcount_stub_name (); \ + fprintf (FILE, "\tcall %s\n", name+1); /* skip '&' */ \ + } \ + else fprintf (FILE, "\tcall mcount\n"); \ + } while (0) #define C_COMMON_OVERRIDE_OPTIONS \ do { \ @@ -243,11 +259,11 @@ } while (0) #undef SUBTARGET_OVERRIDE_OPTIONS -#define SUBTARGET_OVERRIDE_OPTIONS \ -do { \ - if (TARGET_64BIT && MACHO_DYNAMIC_NO_PIC_P) \ - target_flags &= ~MASK_MACHO_DYNAMIC_NO_PIC; \ -} while (0) +#define SUBTARGET_OVERRIDE_OPTIONS \ + do { \ + if (TARGET_64BIT && MACHO_DYNAMIC_NO_PIC_P) \ + target_flags &= ~MASK_MACHO_DYNAMIC_NO_PIC; \ + } while (0) /* Darwin on x86_64 uses dwarf-2 by default. Pre-darwin9 32-bit compiles default to stabs+. darwin9+ defaults to dwarf-2. */ @@ -288,30 +304,28 @@ end of the instruction, but without the 4 we'd only have the right address for the start of the instruction. */ #undef ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX -#define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(FILE, ENCODING, SIZE, ADDR, DONE) \ - if (TARGET_64BIT) \ - { \ - if ((SIZE) == 4 && ((ENCODING) & 0x70) == DW_EH_PE_pcrel) \ - { \ - fputs (ASM_LONG, FILE); \ - assemble_name (FILE, XSTR (ADDR, 0)); \ - fputs ("+4@GOTPCREL", FILE); \ - goto DONE; \ - } \ - } \ - else \ - { \ - if (ENCODING == ASM_PREFERRED_EH_DATA_FORMAT (2, 1)) \ - { \ - darwin_non_lazy_pcrel (FILE, ADDR); \ - goto DONE; \ - } \ +#define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(FILE, ENCODING, SIZE, ADDR, DONE) \ + if (TARGET_64BIT) \ + { \ + if ((SIZE) == 4 && ((ENCODING) & 0x70) == DW_EH_PE_pcrel) \ + { \ + fputs (ASM_LONG, FILE); \ + assemble_name (FILE, XSTR (ADDR, 0)); \ + fputs ("+4@GOTPCREL", FILE); \ + goto DONE; \ + } \ + } \ + else \ + { \ + if (ENCODING == ASM_PREFERRED_EH_DATA_FORMAT (2, 1)) \ + { \ + darwin_non_lazy_pcrel (FILE, ADDR); \ + goto DONE; \ + } \ } -/* This needs to move since i386 uses the first flag and other flags are - used in Mach-O. */ -#undef MACHO_SYMBOL_FLAG_VARIABLE -#define MACHO_SYMBOL_FLAG_VARIABLE ((SYMBOL_FLAG_MACH_DEP) << 3) +/* First available SYMBOL flag bit for use by subtargets. */ +#define SYMBOL_FLAG_SUBT_DEP (SYMBOL_FLAG_MACH_DEP << 5) #undef MACHOPIC_NL_SYMBOL_PTR_SECTION #define MACHOPIC_NL_SYMBOL_PTR_SECTION \ @@ -320,9 +334,9 @@ #define SUBTARGET32_DEFAULT_CPU "i686" #undef SUBTARGET_INIT_BUILTINS -#define SUBTARGET_INIT_BUILTINS \ -do { \ - ix86_builtins[(int) IX86_BUILTIN_CFSTRING] \ - = darwin_init_cfstring_builtins ((unsigned) (IX86_BUILTIN_CFSTRING)); \ - darwin_rename_builtins (); \ -} while(0) +#define SUBTARGET_INIT_BUILTINS \ + do { \ + ix86_builtins[(int) IX86_BUILTIN_CFSTRING] \ + = darwin_init_cfstring_builtins ((unsigned) (IX86_BUILTIN_CFSTRING)); \ + darwin_rename_builtins (); \ + } while(0)