#ifndef USE_GAS
#define MOTOROLA
#define MOTOROLA_BSR
#define SGS
#define SGS_CMP_ORDER
#define SGS_SWAP_W
#endif
#define NO_DOLLAR_IN_LABEL
#define NO_DOT_IN_LABEL
#include "m68k/m68k.h"
#define STABS_GCC_MARKER "gcc2_compiled%"
#ifndef TARGET_DEFAULT
#define TARGET_DEFAULT (MASK_68040|MASK_BITFIELD|MASK_68881|MASK_68020)
#endif
#undef ASM_SPEC
#ifndef USE_GAS
#define ASM_SPEC "%{m68000:-p 000}%{mc68000:-p 000}"
#else
#define ASM_SPEC \
"%{v:-v} %{m68000:-mc68000}%{mc68000:-mc68000}%{!mc68000:%{!m68000:-mc68020}}"
#endif
#undef LIB_SPEC
#define LIB_SPEC "%{!shlib:%{!msoft-float:-lc881}%{msoft-float:-lc}}"
#ifdef CROSS_COMPILE
#ifndef USE_GLD
#define DEFAULT_A_OUT_NAME "m68ka.out"
#endif
#endif
#ifdef USE_GLD
#undef LINK_SPEC
#define LINK_SPEC "%{v:-v}"
#endif
#define CPP_SPEC "%{!msoft-float:-D__HAVE_68881__}\
%{!mc68000:%{!m68000: -D__mc68020__}}"
#undef STARTFILE_SPEC
#ifdef CROSS_COMPILE
#define STARTFILE_SPEC \
"%{!shlib:%{pg:mcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}\
%{shlib:crt0s.o%s shlib.ifile%s} %{p:-L"TOOLDIR_BASE_PREFIX DEFAULT_TARGET_MACHINE"/lib/libp} %{pg:-L"TOOLDIR_BASE_PREFIX DEFAULT_TARGET_MACHINE"/lib/libp} "
#else
#define STARTFILE_SPEC \
"%{!shlib:%{pg:mcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}\
%{shlib:crt0s.o%s shlib.ifile%s} %{p:-L/usr/lib/libp} %{pg:-L/usr/lib/libp} "
#endif
#define TARGET_MEM_FUNCTIONS
#define SIZE_TYPE "unsigned int"
#define ADD_MISSING_POSIX 1
#define ADD_MISSING_XOPEN 1
#define STRUCTURE_SIZE_BOUNDARY 16
#define PCC_BITFIELD_TYPE_MATTERS 1
#undef PARM_BOUNDARY
#define PARM_BOUNDARY 16
#define SDB_DEBUGGING_INFO 1
#undef REGISTER_PREFIX
#define REGISTER_PREFIX "%"
#undef LOCAL_LABEL_PREFIX
#ifdef USE_GAS
#define LOCAL_LABEL_PREFIX ".L"
#else
#define LOCAL_LABEL_PREFIX "L%"
#endif
#undef USER_LABEL_PREFIX
#undef IMMEDIATE_PREFIX
#define IMMEDIATE_PREFIX "&"
#undef REGISTER_NAMES
#define REGISTER_NAMES \
{"%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", \
"%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%fp", "%sp", \
"%fp0", "%fp1", "%fp2", "%fp3", "%fp4", "%fp5", "%fp6", "%fp7"}
#undef FUNCTION_EXTRA_EPILOGUE
#define FUNCTION_EXTRA_EPILOGUE(FILE, SIZE) \
{ if (current_function_returns_pointer \
&& ! find_equiv_reg (0, get_last_insn (), 0, 0, 0, 8, Pmode)) \
asm_fprintf (FILE, "\tmov.l %Ra0,%Rd0\n"); }
#undef FUNCTION_PROFILER
#define FUNCTION_PROFILER(FILE, LABEL_NO) \
asm_fprintf (FILE, "\tmov.l %I%LLP%d,%Ra0\n\tjsr mcount%%\n", (LABEL_NO))
#undef ASM_OUTPUT_REG_PUSH
#define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \
fprintf (FILE, "\tmov.l %s,-(%%sp)\n", reg_names[REGNO])
#undef ASM_OUTPUT_REG_POP
#define ASM_OUTPUT_REG_POP(FILE,REGNO) \
fprintf (FILE, "\tmov.l (%%sp)+,%s\n", reg_names[REGNO])
#ifndef USE_GAS
#undef ASM_APP_ON
#define ASM_APP_ON ""
#undef ASM_APP_OFF
#define ASM_APP_OFF ""
#undef TEXT_SECTION_ASM_OP
#define TEXT_SECTION_ASM_OP "\ttext"
#undef DATA_SECTION_ASM_OP
#define DATA_SECTION_ASM_OP "\tdata"
#undef ASCII_DATA_ASM_OP
#define ASCII_DATA_ASM_OP "\tbyte\t"
#undef SET_ASM_OP
#define SET_ASM_OP "\tset\t"
#endif
#ifdef USE_GLD
#define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"x\""
#define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"x\""
#endif
#undef ASM_FILE_START
#ifndef USE_GAS
#define ASM_FILE_START(FILE) \
output_file_directive ((FILE), main_input_filename)
#else
#define ASM_FILE_START(FILE) \
{ \
fprintf (FILE, "%s", ASM_APP_OFF); \
output_file_directive ((FILE), main_input_filename); \
}
#endif
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "-Dm68k -Dunix -DsysV68 -D__motorola__ -Asystem=unix -Asystem=svr3 -Acpu=m68k -Amachine=m68k"
#undef TARGET_VERSION
#ifndef USE_GAS
#define TARGET_VERSION fprintf (stderr, " (68k, SGS/AT&T sysV68 syntax)");
#endif
#define RETURN_IN_MEMORY(type) \
((TYPE_MODE (type) == BLKmode) \
|| (AGGREGATE_TYPE_P (type) \
&& GET_MODE_SIZE (TYPE_MODE (type)) > UNITS_PER_WORD))
#define DEFAULT_PCC_STRUCT_RETURN 0
#undef FUNCTION_VALUE
#define FUNCTION_VALUE(VALTYPE,FUNC) \
(TREE_CODE (VALTYPE) == REAL_TYPE && TARGET_68881 \
? gen_rtx_REG (TYPE_MODE (VALTYPE), 16) \
: (POINTER_TYPE_P (VALTYPE) \
? gen_rtx_REG (TYPE_MODE (VALTYPE), 8) \
: gen_rtx_REG (TYPE_MODE (VALTYPE), 0)))
#undef LIBCALL_VALUE
#define LIBCALL_VALUE(MODE) \
gen_rtx_REG ((MODE), \
((TARGET_68881 \
&& ((MODE) == SFmode || (MODE) == DFmode \
|| (MODE) == XFmode)) \
? 16 : 0))
#undef FUNCTION_VALUE_REGNO_P
#define FUNCTION_VALUE_REGNO_P(N) \
((N) == 0 || (N) == 8 || (TARGET_68881 && (N) == 16))
#undef NEEDS_UNTYPED_CALL
#define NEEDS_UNTYPED_CALL 1
#ifndef USE_GAS
#undef GLOBAL_ASM_OP
#define GLOBAL_ASM_OP "\tglobal\t"
#endif
#undef ASM_FORMAT_PRIVATE_NAME
#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 12), \
sprintf ((OUTPUT), "%s_%%%d", (NAME), (LABELNO)))
#undef INT_OP_GROUP
#ifdef USE_GAS
#define INT_OP_GROUP INT_OP_STANDARD
#else
#define INT_OP_GROUP INT_OP_NO_DOT
#endif
#ifndef USE_GAS
#define ALIGN_ASM_OP "\teven"
#else
#define ALIGN_ASM_OP "\t.even"
#endif
#undef ASM_OUTPUT_ALIGN
#define ASM_OUTPUT_ALIGN(FILE,LOG) \
if ((LOG) >= 1) \
fprintf (FILE, "%s\n", ALIGN_ASM_OP);
#ifndef USE_GAS
#define SKIP_ASM_OP "\tspace\t"
#else
#define SKIP_ASM_OP "\t.skip\t"
#endif
#undef ASM_OUTPUT_SKIP
#define ASM_OUTPUT_SKIP(FILE,SIZE) \
fprintf (FILE, "%s%u\n", SKIP_ASM_OP, (SIZE))
#define ASM_NO_SKIP_IN_TEXT 1
#undef ASM_OUTPUT_MAIN_SOURCE_FILENAME
#ifndef USE_GAS
#define ASM_OUTPUT_SOURCE_FILENAME(FILE, FILENAME) \
do { fprintf (FILE, "\tfile\t"); \
output_quoted_string (FILE, FILENAME); \
fprintf (FILE, "\n"); \
} while (0)
#undef ASM_OUTPUT_SOURCE_LINE
#define ASM_OUTPUT_SOURCE_LINE(FILE, LINENO) \
fprintf (FILE, "\tln\t%d\n", \
(sdb_begin_function_line \
? (LINENO) - sdb_begin_function_line : 1))
#undef ASM_OUTPUT_ASCII
#define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \
do { register size_t sp = 0, lp = 0, limit = (LEN); \
fputs (integer_asm_op (1, TRUE), (FILE)); \
loop: \
if ((PTR)[sp] > ' ' && ! ((PTR)[sp] & 0x80) && (PTR)[sp] != '\\') \
{ lp += 3; \
fprintf ((FILE), "'%c", (PTR)[sp]); } \
else \
{ lp += 5; \
fprintf ((FILE), "0x%x", (PTR)[sp]); } \
if (++sp < limit) \
{ if (lp > 60) \
{ lp = 0; \
fprintf ((FILE), "\n%s", ASCII_DATA_ASM_OP); } \
else \
putc (',', (FILE)); \
goto loop; } \
putc ('\n', (FILE)); } while (0)
#endif
#ifndef USE_GAS
#undef ASM_OUTPUT_FLOAT_OPERAND
#define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \
do { long l; \
REAL_VALUE_TO_TARGET_SINGLE (r, l); \
\
fprintf ((FILE), "&0x%lx", l); \
} while (0)
#undef ASM_OUTPUT_DOUBLE_OPERAND
#define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \
do { long l[2]; \
REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \
fprintf ((FILE), "&0x%lx%08lx", l[0], l[1]); \
} while (0)
#endif
#undef ASM_GENERATE_INTERNAL_LABEL
#define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \
sprintf ((LABEL), "%s%s%ld", LOCAL_LABEL_PREFIX, (PREFIX), (long)(NUM))
#undef ASM_OUTPUT_INTERNAL_LABEL
#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
asm_fprintf (FILE, "%L%s%d:\n", PREFIX, NUM)
#undef USER_LABEL_PREFIX
#define USER_LABEL_PREFIX ""
#undef ASM_OUTPUT_ADDR_VEC_ELT
#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
asm_fprintf (FILE, "%s%LL%d\n", integer_asm_op (4, TRUE), (VALUE))
#undef ASM_OUTPUT_ADDR_DIFF_ELT
#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
asm_fprintf (FILE, "\t%s %LL%d-%LL%d\n", \
integer_asm_op (2, TRUE), (VALUE), (REL))
#ifndef USE_GAS
#define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \
asm_fprintf (FILE, "\tswbeg &%d\n%L%s%d:\n", \
XVECLEN (PATTERN (TABLE), 1), (PREFIX), (NUM))
#define SGS_NO_LI
#define ASM_OUTPUT_CASE_FETCH(file, labelno, regname)\
asm_fprintf (file, "12(%Rpc,%s.", regname)
#define ASM_RETURN_CASE_JUMP \
do { \
if (TARGET_5200) \
{ \
if (ADDRESS_REG_P (operands[0])) \
return "jmp 8(%%pc,%0.l)"; \
else \
return "ext%.l %0\n\tjmp 8(%%pc,%0.l)"; \
} \
else \
return "jmp 8(%%pc,%0.w)"; \
} while (0)
#else
#define ASM_OUTPUT_CASE_FETCH(file, labelno, regname)\
asm_fprintf (file, "%Rpc@(6,%s:", regname)
#define ASM_RETURN_CASE_JUMP return "jmp %%pc@(2,%0:w)"
#endif
#ifndef USE_GAS
#undef ASM_OUTPUT_OPCODE
#define ASM_OUTPUT_OPCODE(FILE, PTR) \
{ if ((PTR)[0] == 'j' && (PTR)[1] == 'b') \
{ ++(PTR); \
while (*(PTR) != ' ') \
{ putc (*(PTR), (FILE)); ++(PTR); } \
} \
else if ((PTR)[0] == 's') \
{ \
if (!strncmp ((PTR), "swap", 4)) \
{ fprintf ((FILE), "swap.w"); (PTR) += 4; } \
} \
else if ((PTR)[0] == 'f') \
{ \
if (!strncmp ((PTR), "fmove", 5)) \
{ fprintf ((FILE), "fmov"); (PTR) += 5; } \
else if (!strncmp ((PTR), "f%$move", 7)) \
{ if (TARGET_68040_ONLY) \
{ fprintf ((FILE), "fsmov"); (PTR) += 7; } \
else \
{ fprintf ((FILE), "fmov"); (PTR) += 7; } } \
else if (!strncmp ((PTR), "f%&move", 7)) \
{ if (TARGET_68040_ONLY) \
{ fprintf ((FILE), "fdmov"); (PTR) += 7; } \
else \
{ fprintf ((FILE), "fmov"); (PTR) += 7; } } \
else if (!strncmp ((PTR), "ftst", 4)) \
{ fprintf ((FILE), "ftest"); (PTR) += 4; } \
else if (!strncmp ((PTR), "fbne", 4)) \
{ fprintf ((FILE), "fbneq"); (PTR) += 4; } \
else if (!strncmp ((PTR), "fsne", 4)) \
{ fprintf ((FILE), "fsneq"); (PTR) += 4; } \
} \
\
else if ((PTR)[0] == 'm' && (PTR)[1] == 'o' \
&& (PTR)[2] == 'v' && (PTR)[3] == 'e') \
{ fprintf ((FILE), "mov"); (PTR) += 4; \
if ((PTR)[0] == 'q' || (PTR)[0] == 'a' \
|| (PTR)[0] == 'c') (PTR)++; } \
\
else if ((PTR)[0] == 's' && (PTR)[1] == 'u' \
&& (PTR)[2] == 'b') \
{ fprintf ((FILE), "sub"); (PTR) += 3; \
if ((PTR)[0] == 'q' || (PTR)[0] == 'i' \
|| (PTR)[0] == 'a') (PTR)++; } \
\
else if ((PTR)[0] == 'c' && (PTR)[1] == 'm' \
&& (PTR)[2] == 'p') \
{ fprintf ((FILE), "cmp"); (PTR) += 3; \
if ((PTR)[0] == 'a' || (PTR)[0] == 'i' \
|| (PTR)[0] == 'm') (PTR)++; } \
}
#endif
#undef ASM_OUTPUT_COMMON
#ifndef USE_GAS
#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
( fputs ("\tcomm ", (FILE)), \
assemble_name ((FILE), (NAME)), \
fprintf ((FILE), ",%u\n", (SIZE)))
#else
#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
( fputs ("\t.comm ", (FILE)), \
assemble_name ((FILE), (NAME)), \
fprintf ((FILE), ",%u\n", (SIZE)))
#endif
#undef ASM_OUTPUT_LOCAL
#ifndef USE_GAS
#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
( fputs ("\tlcomm ", (FILE)), \
assemble_name ((FILE), (NAME)), \
fprintf ((FILE), ",%u\n", (SIZE)))
#else
#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
( fputs ("\t.lcomm ", (FILE)), \
assemble_name ((FILE), (NAME)), \
fprintf ((FILE), ",%u\n", (SIZE)))
#endif
#ifndef USE_GAS
#define PUT_SDB_SCL(a) fprintf(asm_out_file, "\tscl\t%d;", (a))
#define PUT_SDB_INT_VAL(a) fprintf (asm_out_file, "\tval\t%d;", (a))
#define PUT_SDB_VAL(a) \
( fputs ("\tval\t", asm_out_file), \
output_addr_const (asm_out_file, (a)), \
fputc (';', asm_out_file))
#define PUT_SDB_DEF(a) \
do { fprintf (asm_out_file, "\tdef\t"); \
ASM_OUTPUT_LABELREF (asm_out_file, a); \
fprintf (asm_out_file, ";"); } while (0)
#define PUT_SDB_PLAIN_DEF(a) fprintf(asm_out_file,"\tdef\t~%s;",a)
#define PUT_SDB_ENDEF fputs("\tendef\n", asm_out_file)
#define PUT_SDB_TYPE(a) fprintf(asm_out_file, "\ttype\t0%o;", a)
#define PUT_SDB_SIZE(a) fprintf(asm_out_file, "\tsize\t%d;", a)
#define PUT_SDB_START_DIM fprintf(asm_out_file, "\tdim\t")
#define PUT_SDB_NEXT_DIM(a) fprintf(asm_out_file, "%d,", a)
#define PUT_SDB_LAST_DIM(a) fprintf(asm_out_file, "%d;", a)
#define PUT_SDB_TAG(a) \
do { fprintf (asm_out_file, "\ttag\t"); \
ASM_OUTPUT_LABELREF (asm_out_file, a); \
fprintf (asm_out_file, ";"); } while (0)
#define PUT_SDB_BLOCK_START(LINE) \
fprintf (asm_out_file, \
"\tdef\t~bb;\tval\t~;\tscl\t100;\tline\t%d;\tendef\n", \
(LINE))
#define PUT_SDB_BLOCK_END(LINE) \
fprintf (asm_out_file, \
"\tdef\t~eb;\tval\t~;\tscl\t100;\tline\t%d;\tendef\n", \
(LINE))
#define PUT_SDB_FUNCTION_START(LINE) \
fprintf (asm_out_file, \
"\tdef\t~bf;\tval\t~;\tscl\t101;\tline\t%d;\tendef\n", \
(LINE))
#define PUT_SDB_FUNCTION_END(LINE) \
fprintf (asm_out_file, \
"\tdef\t~ef;\tval\t~;\tscl\t101;\tline\t%d;\tendef\n", \
(LINE))
#define PUT_SDB_EPILOGUE_END(NAME) \
fprintf (asm_out_file, \
"\tdef\t%s;\tval\t~;\tscl\t-1;\tendef\n", \
(NAME))
#define SDB_GENERATE_FAKE(BUFFER, NUMBER) \
sprintf ((BUFFER), "~%dfake", (NUMBER));
#endif
#define DIVSI3_LIBCALL "*ldiv%%"
#define UDIVSI3_LIBCALL "*uldiv%%"
#define MODSI3_LIBCALL "*lrem%%"
#define UMODSI3_LIBCALL "*ulrem%%"
#define MULSI3_LIBCALL "*lmul%%"
struct sysV68_cumulative_args
{
int offset;
int libcall;
};
#undef CUMULATIVE_ARGS
#define CUMULATIVE_ARGS struct sysV68_cumulative_args
#undef INIT_CUMULATIVE_ARGS
#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \
do {(CUM).offset = 0;\
(CUM).libcall = (LIBNAME) && (*XSTR((LIBNAME), 0) == '*');} while(0)
#undef FUNCTION_ARG_ADVANCE
#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
((CUM).offset += ((MODE) != BLKmode \
? (GET_MODE_SIZE (MODE) + 3) & ~3 \
: (int_size_in_bytes (TYPE) + 3) & ~3))
#undef FUNCTION_ARG
#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
(((CUM).libcall && (CUM).offset == 0) ? gen_rtx_REG ((MODE), 0)\
: (TARGET_REGPARM && (CUM).offset < 8) ? gen_rtx_REG ((MODE), (CUM).offset / 4) : 0)
#undef FUNCTION_ARG_PARTIAL_NREGS
#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
((TARGET_REGPARM && (CUM).offset < 8 \
&& 8 < ((CUM).offset + ((MODE) == BLKmode \
? int_size_in_bytes (TYPE) \
: GET_MODE_SIZE (MODE)))) \
? 2 - (CUM).offset / 4 : 0)
#undef FUNCTION_ARG_REGNO_P
#define FUNCTION_ARG_REGNO_P(N) (TARGET_68020 ? 0 : (N) == 0)
#define ALT_LIBM "-lm881"
#if (TARGET_DEFAULT & MASK_68881)
#define MATH_LIBRARY "-lm881"
#endif
#define NEED_ATEXIT 1
#define EXIT_BODY \
do \
{ \
__stop_monitor (); \
_cleanup (); \
} while (0)
#undef FINALIZE_TRAMPOLINE
#define FINALIZE_TRAMPOLINE(TRAMP) \
if (!TARGET_68040) \
; \
else \
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__clear_insn_cache"), \
0, VOIDmode, 0)