#undef TARGET_MACHO
#define TARGET_MACHO 1
#define TARGET_VERSION fprintf (stderr, " (x86, BSD syntax)");
#define CPP_PREDEFINES "-D__i386__ -D__MACH__ -D__LITTLE_ENDIAN__ -D__APPLE__"
#undef CC1_SPEC
#define CC1_SPEC "%{!static:%{!mxxdynamic-no-pic:-fPIC}} %{!<faltivec}"
#define CPP_ALTIVEC_SPEC "%{!<faltivec}"
#undef DEFAULT_SIGNED_CHAR
#define DEFAULT_SIGNED_CHAR (1)
#undef ASSEMBLER_DIALECT
#define ASSEMBLER_DIALECT 0
#undef HAVE_GAS_FILDS_FISTS
#define HAVE_GAS_FILDS_FISTS 1
#define SHIFT_DOUBLE_OMITS_COUNT 0
#define ASM_COMMENT_START "#"
#undef ASM_APP_ON
#define ASM_APP_ON ""
#undef ASM_APP_OFF
#define ASM_APP_OFF ""
#define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS)
#define VALUE_REGNO(MODE) \
(GET_MODE_CLASS (MODE) == MODE_FLOAT \
&& TARGET_FLOAT_RETURNS_IN_80387 ? FIRST_FLOAT_REG \
: (MODE) == TImode || VECTOR_MODE_P (MODE) ? FIRST_SSE_REG \
: 0)
#if 0
#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
do { \
tree parm; \
rtx xops[3]; \
\
if (ix86_regparm > 0) \
parm = TYPE_ARG_TYPES (TREE_TYPE (function)); \
else \
parm = NULL_TREE; \
for (; parm; parm = TREE_CHAIN (parm)) \
if (TREE_VALUE (parm) == void_type_node) \
break; \
\
xops[0] = GEN_INT (DELTA); \
if (parm) \
xops[1] = gen_rtx_REG (SImode, 0); \
else if (aggregate_value_p (TREE_TYPE (TREE_TYPE (FUNCTION)))) \
xops[1] = gen_rtx_MEM (SImode, plus_constant (stack_pointer_rtx, 8)); \
else \
xops[1] = gen_rtx_MEM (SImode, plus_constant (stack_pointer_rtx, 4)); \
output_asm_insn ("add{l} {%0, %1|%1, %0}", xops); \
\
if (flag_pic && !TARGET_64BIT) \
{ \
xops[0] = pic_offset_table_rtx; \
xops[1] = gen_label_rtx (); \
xops[2] = gen_rtx_SYMBOL_REF (Pmode, "_GLOBAL_OFFSET_TABLE_"); \
\
if (ix86_regparm > 2) \
abort (); \
output_asm_insn ("push{l}\t%0", xops); \
output_asm_insn ("call\t%P1", xops); \
ASM_OUTPUT_INTERNAL_LABEL (FILE, "L", CODE_LABEL_NUMBER (xops[1])); \
output_asm_insn ("pop{l}\t%0", xops); \
output_asm_insn ("add{l}\t{%2+[.-%P1], %0|%0, OFFSET FLAT: %2+[.-%P1]}", xops); \
xops[0] = gen_rtx_MEM (SImode, XEXP (DECL_RTL (FUNCTION), 0)); \
output_asm_insn ("mov{l}\t{%0@GOT(%%ebx), %%ecx|%%ecx, %0@GOT[%%ebx]}",\
xops); \
asm_fprintf (FILE, "\tpop{l\t%%ebx|\t%%ebx}\n"); \
asm_fprintf (FILE, "\tjmp\t{*%%ecx|%%ecx}\n"); \
} \
else if (flag_pic && TARGET_64BIT) \
{ \
fprintf (FILE, "\tjmp *"); \
assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
fprintf (FILE, "@GOTPCREL(%%rip)\n"); \
} \
else \
{ \
fprintf (FILE, "\tjmp "); \
assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
fprintf (FILE, "\n"); \
} \
} while (0)
#endif
#define LPREFIX "L"
#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 () \
|| darwin_named_section_is ("__TEXT,__textcoal,coalesced") \
|| darwin_named_section_is ("__TEXT,__textcoal_nt,coalesced,no_toc") \
|| darwin_named_section_is (STATIC_INIT_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), ",%u\n", (ROUNDED)))
#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
( fputs (".lcomm ", (FILE)), \
assemble_name ((FILE), (NAME)), \
fprintf ((FILE), ",%u\n", (ROUNDED)))
#if 0
#undef ADJUST_FIELD_ALIGN
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
(((COMPUTED) == RS6000_VECTOR_ALIGNMENT) \
? RS6000_VECTOR_ALIGNMENT \
: (MIN ((COMPUTED), 32)))
#undef ROUND_TYPE_ALIGN
union tree_node;
extern unsigned round_type_align (union tree_node*, unsigned, unsigned);
#define ROUND_TYPE_ALIGN(STRUCT, COMPUTED, SPECIFIED) \
round_type_align(STRUCT, COMPUTED, SPECIFIED)
#endif
enum
{
old_x86_MASK_STACK_PROBE = MASK_STACK_PROBE,
old_x86_MASK_INTEL_SYNTAX = MASK_INTEL_SYNTAX,
old_x86_MASK_NO_RED_ZONE = MASK_NO_RED_ZONE
};
#undef MASK_NO_RED_ZONE
#define MASK_NO_RED_ZONE 0
#undef MASK_INTEL_SYNTAX
#define MASK_INTEL_SYNTAX 0
#undef MASK_STACK_PROBE
#define MASK_STACK_PROBE 0
#undef MASK_DEBUG_ARG
#define MASK_DEBUG_ARG 0
#undef TARGET_DEEP_BRANCH_PREDICTION
#define TARGET_DEEP_BRANCH_PREDICTION 0
#undef MAX_LONG_TYPE_SIZE
#define MAX_LONG_TYPE_SIZE 32
#define MASK_ALIGN_MAC68K old_x86_MASK_STACK_PROBE
#define TARGET_ALIGN_MAC68K (target_flags & MASK_ALIGN_MAC68K)
#define MASK_MACHO_DYNAMIC_NO_PIC 0
#define TARGET_DYNAMIC_NO_PIC (target_flags & MASK_MACHO_DYNAMIC_NO_PIC)
#define MASK_ALIGN_NATURAL old_x86_MASK_INTEL_SYNTAX
#define TARGET_ALIGN_NATURAL (target_flags & MASK_ALIGN_NATURAL)
#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 LOCAL_ALIGNMENT
#define LOCAL_ALIGNMENT(TYPE, ALIGN) (MAX (ALIGN, TYPE_ALIGN (TYPE)))
#if 0
#define ROUND_TYPE_ALIGN(STRUCT, COMPUTED, SPECIFIED) \
((TREE_CODE (STRUCT) == RECORD_TYPE \
|| TREE_CODE (STRUCT) == UNION_TYPE \
|| TREE_CODE (STRUCT) == QUAL_UNION_TYPE) \
&& TYPE_FIELDS (STRUCT) != 0 \
&& DECL_MODE (TYPE_FIELDS (STRUCT)) == DFmode \
? MAX (MAX ((COMPUTED), (SPECIFIED)), 64) \
: MAX ((COMPUTED), (SPECIFIED)))
#endif
#define DOUBLE_INT_ASM_OP "\t.quad\t"
#undef FUNCTION_PROFILER
#define FUNCTION_PROFILER(FILE, LABELNO) \
do { \
if (MACHOPIC_INDIRECT) \
{ \
const char *name = machopic_stub_name ("*mcount"); \
fprintf (FILE, "\tcall %s\n", name+1); \
machopic_validate_stub_or_non_lazy_ptr (name, 1); \
} \
else fprintf (FILE, "\tcall mcount\n"); \
} while (0)
#ifdef PFE
#define PFE_TARGET_ADDITIONS(hdr) darwin_pfe_freeze_thaw_target_additions (hdr)
#define PFE_TARGET_MAYBE_SAVESTRING(s) darwin_pfe_maybe_savestring ((char *)(s))
#endif
#define USER_LABEL_PREFIX ""