#define NEXT_SEMANTICS
#define MACHO_PIC 1
#if defined (MACOSX) || defined (RC_RELEASE_Flask)
#define FIXED_PIC_REG 1
#endif
#include "i386/gas.h"
#include "apple/openstep.h"
#ifndef MACHOPIC_PURE
#define MACHOPIC_PURE (flag_pic == 2)
#define MACHOPIC_INDIRECT (flag_pic)
#define MACHOPIC_JUST_INDIRECT (flag_pic == 1)
#endif
#define DEFAULT_TARGET_ARCH "i386"
#undef TARGET_DEFAULT
#define TARGET_DEFAULT (MASK_80387|MASK_IEEE_FP)
#undef SUBTARGET_SWITCHES
#define SUBTARGET_SWITCHES \
{ "unaligned-text", 0400 }, \
{ "no-unaligned-text", -0400 },
#define TARGET_NO_LOOP_ALIGNMENT (target_flags & 0400)
#undef CC1_SPEC
#ifdef OPENSTEP
#define CC1_SPEC "-Wno-four-char-constants%{fdump-syms: -fsyntax-only}%{!static: -fPIC -mno-schedule-prologue -fno-optimize-register-move} %{threeThreeMethodEncoding}"
#else
#define CC1_SPEC "-Wno-four-char-constants%{fdump-syms: -fsyntax-only}%{!static: -fPIC -mno-schedule-prologue -fno-optimize-register-move}"
#endif
#define CC1PLUS_SPEC "-fnew-abi -fno-honor-std"
#undef ASM_OUTPUT_ALIGN_CODE
#define ASM_OUTPUT_ALIGN_CODE(FILE) \
if (!TARGET_NO_LOOP_ALIGNMENT) \
fprintf ((FILE), "\t.align 2,0x90\n")
#undef ASM_OUTPUT_LOOP_ALIGN
#define ASM_OUTPUT_LOOP_ALIGN(FILE) \
if (!TARGET_NO_LOOP_ALIGNMENT) \
fprintf ((FILE), "\t.align 2,0x90\n");
#undef ASM_OUTPUT_ALIGN
#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)
#undef FUNCTION_BOUNDARY
#define FUNCTION_BOUNDARY 32
#define TARGET_ARCHITECTURE \
{ { "i386", 2 }, \
{ "i486", 2 }, \
{ "i486SX", 2 }, \
\
\
}
#define TARGET_MEM_FUNCTIONS
#undef VALUE_REGNO
#define VALUE_REGNO(MODE) \
((MODE) == SFmode || (MODE) == DFmode || (MODE) == XFmode \
? FIRST_FLOAT_REG : 0)
#undef FUNCTION_VALUE_REGNO_P
#define FUNCTION_VALUE_REGNO_P(N) ((N) == 0 || (N)== FIRST_FLOAT_REG)
#ifdef REAL_VALUE_TO_TARGET_LONG_DOUBLE
#undef ASM_OUTPUT_LONG_DOUBLE
#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \
do { \
long hex[3]; \
REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, hex); \
if (sizeof (int) == sizeof (long)) \
fprintf (FILE, "\t.long 0x%x\n\t.long 0x%x\n\t.long 0x%x\n", \
hex[0], hex[1], hex[2]); \
else \
fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n\t.long 0x%lx\n", \
hex[0], hex[1], hex[2]); \
} while (0)
#endif
#ifdef REAL_VALUE_TO_TARGET_DOUBLE
#undef ASM_OUTPUT_DOUBLE
#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
do { \
long hex[2]; \
REAL_VALUE_TO_TARGET_DOUBLE (VALUE, hex); \
if (sizeof (int) == sizeof (long)) \
fprintf (FILE, "\t.long 0x%x\n\t.long 0x%x\n", hex[0], hex[1]); \
else \
fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", hex[0], hex[1]); \
} while (0)
#endif
#ifdef REAL_VALUE_TO_TARGET_SINGLE
#undef ASM_OUTPUT_FLOAT
#define ASM_OUTPUT_FLOAT(FILE,VALUE) \
do { \
long hex; \
REAL_VALUE_TO_TARGET_SINGLE (VALUE, hex); \
if (sizeof (int) == sizeof (long)) \
fprintf (FILE, "\t.long 0x%x\n", hex); \
else \
fprintf (FILE, "\t.long 0x%lx\n", hex); \
} while (0)
#endif
#undef ASM_OUTPUT_OPCODE
#define ASM_OUTPUT_OPCODE(STREAM, PTR) \
{ \
if ((PTR)[0] == 'r' \
&& (PTR)[1] == 'e' \
&& (PTR)[2] == 'p') \
{ \
if ((PTR)[3] == 'z') \
{ \
fprintf (STREAM, "repe"); \
(PTR) += 4; \
} \
else if ((PTR)[3] == 'n' && (PTR)[4] == 'z') \
{ \
fprintf (STREAM, "repne"); \
(PTR) += 5; \
} \
} \
}
#undef SHIFT_DOUBLE_OMITS_COUNT
#define SHIFT_DOUBLE_OMITS_COUNT 0
#define GAS_MNEMONICS 1
#undef CPP_PREDEFINES
#ifdef OPENSTEP
#define CPP_PREDEFINES "-Di386 -DNeXT -Dunix -D__MACH__ -D__LITTLE_ENDIAN__ -D__ARCHITECTURE__=\"i386\" "
#elif defined (MAC_OS_X_SERVER_1_0)
#define CPP_PREDEFINES "-Di386 -DNeXT -Dunix -D__MACH__ -D__LITTLE_ENDIAN__ -D__ARCHITECTURE__=\"i386\" -D__APPLE__"
#elif defined (MACOSX) || defined (RC_RELEASE_Flask)
#define CPP_PREDEFINES "-D__i386__ -D__MACH__ -D__LITTLE_ENDIAN__ -D__APPLE__"
#else
#define CPP_PREDEFINES "-Di386 -D__MACH__ -D__LITTLE_ENDIAN__ -D__ARCHITECTURE__=\"i386\" -D__APPLE__"
#endif
#define OBJC_FORWARDING_STACK_OFFSET 8
#define OBJC_FORWARDING_MIN_OFFSET 8
#undef LPREFIX
#define LPREFIX "L"
#undef ASM_GENERATE_INTERNAL_LABEL
#define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \
sprintf ((BUF), "*%s%d", (PREFIX), (NUMBER))
#undef ASM_OUTPUT_INTERNAL_LABEL
#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
fprintf (FILE, "%s%d:\n", PREFIX, NUM)
#undef ASM_APP_ON
#define ASM_APP_ON "#APP\n"
#undef ASM_APP_OFF
#define ASM_APP_OFF "#NO_APP\n"
#undef ASM_OUTPUT_REG_PUSH
#define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \
fprintf (FILE, "\tpushl %se%s\n", "%", reg_names[REGNO])
#undef ASM_OUTPUT_REG_POP
#define ASM_OUTPUT_REG_POP(FILE,REGNO) \
fprintf (FILE, "\tpopl %se%s\n", "%", reg_names[REGNO])
#undef FUNCTION_PROFILER
#if 0
#define FUNCTION_PROFILER(FILE, LABELNO) \
{ \
if (flag_pic) \
{ \
mcount_called = 1; \
fprintf (FILE, "\tcall Lmcount$stub\n"); \
} \
else \
fprintf (FILE, "\tcall mcount\n"); \
}
#endif
#define FUNCTION_PROFILER(FILE, LABELNO)
#if !defined (MACOSX) && !defined (RC_RELEASE_Flask)
#undef STRUCT_VALUE_INCOMING
#undef STRUCT_VALUE
#undef STRUCT_VALUE_REGNUM
#define STRUCT_VALUE_REGNUM 3
#endif
#define GO_IF_INDEXABLE_BASE(X, ADDR) \
if (GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) goto ADDR
#define LEGITIMATE_INDEX_REG_P(X) \
(GET_CODE (X) == REG && REG_OK_FOR_INDEX_P (X))
#define LEGITIMATE_INDEX_P(X) \
(LEGITIMATE_INDEX_REG_P (X) \
|| (GET_CODE (X) == MULT \
&& LEGITIMATE_INDEX_REG_P (XEXP (X, 0)) \
&& GET_CODE (XEXP (X, 1)) == CONST_INT \
&& (INTVAL (XEXP (X, 1)) == 2 \
|| INTVAL (XEXP (X, 1)) == 4 \
|| INTVAL (XEXP (X, 1)) == 8)))
#define GO_IF_INDEXING(X, ADDR) \
{ if (LEGITIMATE_INDEX_P (X)) goto ADDR; \
GO_IF_INDEXABLE_BASE (X, ADDR); \
if (GET_CODE (X) == PLUS && LEGITIMATE_INDEX_P (XEXP (X, 0))) \
{ GO_IF_INDEXABLE_BASE (XEXP (X, 1), ADDR); } \
if (GET_CODE (X) == PLUS && LEGITIMATE_INDEX_P (XEXP (X, 1))) \
{ GO_IF_INDEXABLE_BASE (XEXP (X, 0), ADDR); } }
#undef GO_IF_LEGITIMATE_ADDRESS
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
{ \
if (CONSTANT_ADDRESS_P (X) \
&& (! flag_pic || LEGITIMATE_PIC_OPERAND_P (X))) \
goto ADDR; \
GO_IF_INDEXING (X, ADDR); \
if (GET_CODE (X) == PLUS && CONSTANT_ADDRESS_P (XEXP (X, 1))) \
{ \
rtx x0 = XEXP (X, 0); \
rtx x1 = XEXP (X, 0); \
if (! flag_pic || LEGITIMATE_PIC_OPERAND_P (x1)) \
{ GO_IF_INDEXING (x0, ADDR); } \
} \
}
#ifndef MACHOPIC_OPERAND_P
#define MACHOPIC_OPERAND_P(X) machopic_operand_p (X)
#endif
#undef LEGITIMATE_PIC_OPERAND_P(X)
#define LEGITIMATE_PIC_OPERAND_P(X) \
(! SYMBOLIC_CONST (X) || MACHOPIC_OPERAND_P (X))
#if !defined (MACOSX) && !defined (RC_RELEASE_Flask)
#undef RETURN_POPS_ARGS
#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) \
((FUNDECL) && TREE_CODE (FUNDECL) == IDENTIFIER_NODE \
? 0 \
: (TARGET_RTD \
&& (TYPE_ARG_TYPES (FUNTYPE) == 0 \
|| (TREE_VALUE (tree_last (TYPE_ARG_TYPES (FUNTYPE))) \
== void_type_node))) ? (SIZE) : 0)
#endif
#ifndef NEXT_SEMANTICS
#undef ASM_OUTPUT_ALIGN
#define ASM_OUTPUT_ALIGN(FILE,LOG) \
if ((LOG)!=0) fprintf ((FILE), "\t.align %d,0x90\n", (LOG))
#endif
#undef ASM_OUTPUT_ADDR_DIFF_ELT
#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
fprintf (FILE, "\t.long %s%d-%s%d\n",LPREFIX, VALUE,LPREFIX, REL)
#define FPPC_STATES SINGLE, DOUBLE, CONFLICT
#define FPPC_INFO struct { rtx var, insn; }
#define FPPC_INFO_INIT(INFO, FIRST) \
do { \
if (FIRST) \
(INFO).var = assign_stack_local (HImode, 2, 0); \
(INFO).insn = 0; \
} while (0)
#define FPPC_CLASSIFY_INSN(INSN) \
(recog_memoized (INSN) < 0 \
? NONE \
: (enum fppc_state) ((int) get_attr_fppc (INSN) - FPPC_SINGLE + SINGLE))
#define FPPC_SET_STATE(FROM_STATE, TO_STATE, INSN, INFO) \
{ \
if (TO_STATE == SINGLE) \
{ \
(INFO).insn = INSN; \
if (FROM_STATE != SINGLE) \
emit_insn_before (gen_fppc_switch ((INFO).var), INSN); \
} \
else if (FROM_STATE == SINGLE) \
{ \
emit_insn_after (gen_fppc_switch ((INFO).var), (INFO).insn); \
(INFO).insn = 0; \
} \
}
#undef FINALIZE_PIC
#define FINALIZE_PIC i386_finalize_machopic ()
#if defined(FIXED_PIC_REG)
#undef TARGET_DEEP_BRANCH_PREDICTION
#define TARGET_DEEP_BRANCH_PREDICTION 0
#else
extern int pic86_reg_num;
#undef INIT_EXPANDERS
#define INIT_EXPANDERS \
do { rtx pic; \
pic = pic_offset_table_rtx = gen_reg_rtx (SImode); \
pic86_reg_num = REGNO (pic); \
RTX_UNCHANGING_P (pic) = 1; \
mark_reg_pointer (pic, 0); \
clear_386_stack_locals (); \
} while (0)
#undef PIC_OFFSET_TABLE_RTX
#define PIC_OFFSET_TABLE_RTX pic_offset_table_rtx
#undef PIC_OFFSET_TABLE_REGNUM
#define PIC_OFFSET_TABLE_REGNUM pic86_reg_num
#endif
#define BOOL_TYPE_SIZE BITS_PER_WORD
void machopic_define_decl ();
#define MACHOPIC_DEFINE_DECL(decl, name) machopic_define_decl (decl, name)
#undef ASM_OUTPUT_MI_THUNK
#define DWARF2_UNWIND_INFO 0
#include "apple/embedded.h"