#undef TARGET_MACHO
#define TARGET_MACHO 1
#define TARGET_VERSION fprintf (stderr, " (i686 Darwin)");
#undef TARGET_FPMATH_DEFAULT
#define TARGET_FPMATH_DEFAULT (TARGET_SSE ? FPMATH_SSE : FPMATH_387)
#define TARGET_OS_CPP_BUILTINS() \
do \
{ \
builtin_define ("__i386__"); \
builtin_define ("__LITTLE_ENDIAN__"); \
\
darwin_cpp_builtins (pfile); \
} \
while (0)
#undef CC1_SPEC
#define CC1_SPEC "\
%{g: %{!fno-eliminate-unused-debug-symbols: -feliminate-unused-debug-symbols }} \
""\
%{!static:%{!mdynamic-no-pic:-fPIC}} %<faltivec %<mno-fused-madd %<mlong-branch %<mlongcall %<mcpu=G4 %<mcpu=G5"
#define CPP_ALTIVEC_SPEC "%<faltivec"
#undef ASM_SPEC
#define ASM_SPEC "-arch i386 -force_cpusubtype_ALL"
#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
\
{ "darwin_arch", "i386" }, \
{ "darwin_subarch", "i386" },
#undef OPTION_DEFAULT_SPECS
#define OPTION_DEFAULT_SPECS \
{"arch", "%{!march=*:-march=%(VALUE)}"}, \
{"tune", "%{!mtune=*:-mtune=%(VALUE)}"}
#define SUBTARGET_OPTION_TRANSLATE_TABLE \
{ "", "" }
#undef ASSEMBLER_DIALECT
#define ASSEMBLER_DIALECT ASM_ATT
#define SHIFT_DOUBLE_OMITS_COUNT 0
extern void darwin_x86_file_end (void);
#undef TARGET_ASM_FILE_END
#define TARGET_ASM_FILE_END darwin_x86_file_end
#define ASM_COMMENT_START "#"
#define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_128BIT_LONG_DOUBLE | (0 & MASK_ALIGN_DOUBLE))
#define MASK_MACHO_DYNAMIC_NO_PIC (0x00800000)
#define TARGET_DYNAMIC_NO_PIC (target_flags & MASK_MACHO_DYNAMIC_NO_PIC)
#define LPREFIX "L"
#define HOT_TEXT_SECTION_NAME "__TEXT,__text,regular,pure_instructions"
#define UNLIKELY_EXECUTED_TEXT_SECTION_NAME \
"__TEXT,__unlikely,regular,pure_instructions"
#define ASM_BYTE_OP "\t.byte\t"
#define ASM_SHORT "\t.word\t"
#define ASM_LONG "\t.long\t"
#undef ASM_OUTPUT_ALIGN
#define ASM_OUTPUT_ALIGN(FILE,LOG) \
do { if ((LOG) != 0) \
{ \
if (in_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_COMMON(FILE, NAME, SIZE, ROUNDED) \
( fputs (".comm ", (FILE)), \
assemble_name ((FILE), (NAME)), \
fprintf ((FILE), ",%lu\n", (unsigned long)(ROUNDED)))
#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
( fputs (".lcomm ", (FILE)), \
assemble_name ((FILE), (NAME)), \
fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED"\n", (ROUNDED)))
#define MASK_ALIGN_NATURAL 0x40000000
#define TARGET_ALIGN_NATURAL (target_flags & MASK_ALIGN_NATURAL)
#define rs6000_alignment_flags target_flags
#define MASK_ALIGN_MAC68K 0x20000000
#define TARGET_ALIGN_MAC68K (target_flags & MASK_ALIGN_MAC68K)
#define REGISTER_TARGET_PRAGMAS DARWIN_REGISTER_TARGET_PRAGMAS
#define ROUND_TYPE_ALIGN(TYPE, COMPUTED, SPECIFIED) \
(((TREE_CODE (TYPE) == RECORD_TYPE \
|| TREE_CODE (TYPE) == UNION_TYPE \
|| TREE_CODE (TYPE) == QUAL_UNION_TYPE) \
&& TARGET_ALIGN_MAC68K \
&& MAX (COMPUTED, SPECIFIED) == 8) ? 16 \
: MAX (COMPUTED, SPECIFIED))
#undef SUBTARGET_SWITCHES
#define SUBTARGET_SWITCHES \
{"align-mac68k", MASK_ALIGN_MAC68K, \
N_("Align structs and unions according to mac68k rules")}, \
{"align-power", - (MASK_ALIGN_MAC68K | MASK_ALIGN_NATURAL), \
N_("Align structs and unions according to PowerPC rules")}, \
{"align-natural", MASK_ALIGN_NATURAL, \
N_("Align structs and unions according to natural rules")}, \
{"dynamic-no-pic", MASK_MACHO_DYNAMIC_NO_PIC, \
N_("Generate code suitable for executables (NOT shared libs)")},\
{"no-dynamic-no-pic", -MASK_MACHO_DYNAMIC_NO_PIC, ""},
#undef FUNCTION_PROFILER
#define FUNCTION_PROFILER(FILE, LABELNO) \
do { \
if (MACHOPIC_INDIRECT) \
{ \
const char *name = machopic_mcount_stub_name (); \
fprintf (FILE, "\tcall %s\n", name+1); \
machopic_validate_stub_or_non_lazy_ptr (name); \
} \
else fprintf (FILE, "\tcall mcount\n"); \
} while (0)
#define BASIC_STACK_BOUNDARY (128)
extern int flag_cw_asm_blocks;
#undef SUBTARGET_OVERRIDE_OPTIONS
#define SUBTARGET_OVERRIDE_OPTIONS \
do { \
\
if (darwin_fix_and_continue_switch) \
{ \
const char *base = darwin_fix_and_continue_switch; \
while (base[-1] != 'm') base--; \
\
if (*darwin_fix_and_continue_switch != '\0') \
error ("invalid option %qs", base); \
darwin_fix_and_continue = (base[0] != 'n'); \
} \
\
\
if (darwin_macho_att_stub_switch) \
{ \
const char *base = darwin_macho_att_stub_switch; \
while (base[-1] != 'm') base--; \
\
if (*darwin_macho_att_stub_switch != '\0') \
error ("invalid option %qs", base); \
darwin_macho_att_stub = (base[0] != 'n'); \
} \
\
\
if (flag_cw_asm_blocks) \
flag_ms_asms = 1; \
\
} while (0)
#define TARGET_FIX_AND_CONTINUE (darwin_fix_and_continue)
#define CW_ASM_REGISTER_NAME(STR, BUF) i386_cw_asm_register_name (STR, BUF)