94 lines
2.4 KiB
C
94 lines
2.4 KiB
C
#include <m68k/m68k.h>
|
||
|
||
/* Get generic NetBSD definitions. */
|
||
|
||
#include <netbsd.h>
|
||
|
||
|
||
/* See m68k.h. 7 means 68020 with 68881. */
|
||
|
||
#define TARGET_DEFAULT 7
|
||
|
||
/* Define __HAVE_68881__ in preprocessor, unless -msoft-float is specified.
|
||
This will control the use of inline 68881 insns in certain macros. */
|
||
|
||
#undef CPP_SPEC
|
||
#define CPP_SPEC "%{!msoft-float:-D__HAVE_68881__ -D__HAVE_FPU__} %{posix:-D_POSIX_SOURCE}"
|
||
|
||
#undef ASM_SPEC
|
||
#define ASM_SPEC " %| %{m68030} %{m68040} %{m68060} %{fpic:-k} %{fPIC:-k -K}"
|
||
|
||
/* Names to predefine in the preprocessor for this target machine. */
|
||
|
||
#define CPP_PREDEFINES "-Dunix -Dm68k -Dmc68000 -Dmc68020 -D__NetBSD__ -D__KPRINTF_ATTRIBUTE__ -Asystem(unix) -Asystem(NetBSD) -Acpu(m68k) -Amachine(m68k)"
|
||
|
||
/* Make gcc agree with <machine/ansi.h> */
|
||
|
||
#undef SIZE_TYPE
|
||
#define SIZE_TYPE "unsigned int"
|
||
|
||
#undef PTRDIFF_TYPE
|
||
#define PTRDIFF_TYPE "int"
|
||
|
||
#undef WCHAR_TYPE
|
||
#define WCHAR_TYPE "int"
|
||
|
||
#undef WCHAR_UNSIGNED
|
||
#define WCHAR_UNSIGNED 0
|
||
|
||
#undef WCHAR_TYPE_SIZE
|
||
#define WCHAR_TYPE_SIZE 32
|
||
|
||
/* Every structure or union's size must be a multiple of 2 bytes. */
|
||
|
||
#define STRUCTURE_SIZE_BOUNDARY 16
|
||
|
||
/* This is BSD, so it wants DBX format. */
|
||
|
||
#define DBX_DEBUGGING_INFO
|
||
|
||
/* Do not break .stabs pseudos into continuations. */
|
||
|
||
#define DBX_CONTIN_LENGTH 0
|
||
|
||
/* This is the char to use for continuation (in case we need to turn
|
||
continuation back on). */
|
||
|
||
#define DBX_CONTIN_CHAR '?'
|
||
|
||
/* Don't default to pcc-struct-return, because gcc is the only compiler, and
|
||
we want to retain compatibility with older gcc versions. */
|
||
#define DEFAULT_PCC_STRUCT_RETURN 0
|
||
|
||
/* Finalize the trampoline by flushing the insn cache. */
|
||
|
||
#undef FINALIZE_TRAMPOLINE
|
||
#define FINALIZE_TRAMPOLINE(TRAMP) \
|
||
emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "__cachectl"), \
|
||
0, VOIDmode, 2, TRAMP, Pmode, \
|
||
GEN_INT(TRAMPOLINE_SIZE), SImode);
|
||
|
||
#undef TRANSFER_FROM_TRAMPOLINE
|
||
#define TRANSFER_FROM_TRAMPOLINE \
|
||
asm ( \
|
||
GLOBAL_ASM_OP " ___cachectl; \
|
||
___cachectl: \
|
||
movel sp@(4),a1; \
|
||
movel sp@(8),d1; \
|
||
movel #0x80000004,d0; \
|
||
trap #12; \
|
||
rts"); \
|
||
\
|
||
void \
|
||
__transfer_from_trampoline () \
|
||
{ \
|
||
register char *a0 asm ("%a0"); \
|
||
asm (GLOBAL_ASM_OP " ___trampoline"); \
|
||
asm ("___trampoline:"); \
|
||
asm volatile ("move%.l %0,%@" : : "m" (a0[22])); \
|
||
asm volatile ("move%.l %1,%0" : "=a" (a0) : "m" (a0[18])); \
|
||
asm ("rts":); \
|
||
}
|
||
|
||
|