1996-03-16 16:18:52 -05:00
|
|
|
/* Definitions of target machine for GNU compiler, for Alpha Linux,
|
|
|
|
using ECOFF.
|
|
|
|
Copyright (C) 1996 Free Software Foundation, Inc.
|
|
|
|
Contributed by Bob Manson.
|
|
|
|
|
|
|
|
This file is part of GNU CC.
|
|
|
|
|
|
|
|
GNU CC is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation; either version 2, or (at your option)
|
|
|
|
any later version.
|
|
|
|
|
|
|
|
GNU CC is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with GNU CC; see the file COPYING. If not, write to
|
|
|
|
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|
|
|
|
|
|
|
#undef TARGET_DEFAULT
|
|
|
|
#define TARGET_DEFAULT (3 | MASK_GAS)
|
|
|
|
|
|
|
|
#undef TARGET_VERSION
|
|
|
|
#define TARGET_VERSION fprintf (stderr, " (Linux/Alpha)");
|
|
|
|
|
|
|
|
#undef CPP_PREDEFINES
|
|
|
|
#define CPP_PREDEFINES "\
|
|
|
|
-D__alpha -D__alpha__ -D__linux__ -D__linux -D_LONGLONG -Dlinux -Dunix \
|
|
|
|
-Asystem(linux) -Acpu(alpha) -Amachine(alpha)"
|
|
|
|
|
|
|
|
/* We don't actually need any of these; the MD_ vars are ignored
|
|
|
|
anyway for cross-compilers, and the other specs won't get picked up
|
|
|
|
because the user is supposed to do ld -r (hmm, perhaps that should be
|
|
|
|
the default). In any case, setting them thus will catch some
|
|
|
|
common user errors. */
|
|
|
|
|
|
|
|
#undef MD_EXEC_PREFIX
|
|
|
|
#undef MD_STARTFILE_PREFIX
|
|
|
|
|
|
|
|
#undef LIB_SPEC
|
|
|
|
#define LIB_SPEC "%{pg:-lgmon} %{pg:-lc_p} %{!pg:-lc}"
|
|
|
|
|
|
|
|
#undef LINK_SPEC
|
|
|
|
#define LINK_SPEC "-G 8 %{O*:-O3} %{!O*:-O1}"
|
|
|
|
|
|
|
|
#undef ASM_SPEC
|
|
|
|
#define ASM_SPEC "-nocpp"
|
|
|
|
|
|
|
|
/* Can't do stabs */
|
|
|
|
#undef SDB_DEBUGGING_INFO
|
|
|
|
|
|
|
|
/* Prefer dbx. */
|
|
|
|
#undef PREFERRED_DEBUGGING_TYPE
|
|
|
|
#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
|
|
|
|
|
|
|
|
#undef FUNCTION_PROFILER
|
|
|
|
#define FUNCTION_PROFILER(FILE, LABELNO) \
|
1996-06-28 15:39:03 -04:00
|
|
|
fputs ("\tjsr $28,_mcount\n", (FILE))
|
1996-03-16 16:18:52 -05:00
|
|
|
|
|
|
|
/* Generate calls to memcpy, etc., not bcopy, etc. */
|
|
|
|
#define TARGET_MEM_FUNCTIONS
|
|
|
|
|
|
|
|
/* Show that we need a GP when profiling. */
|
|
|
|
#define TARGET_PROFILING_NEEDS_GP
|
1996-05-10 21:30:41 -04:00
|
|
|
|
|
|
|
#undef ASM_FINAL_SPEC
|
1996-06-28 14:06:52 -04:00
|
|
|
|
|
|
|
/* Emit RTL insns to initialize the variable parts of a trampoline.
|
|
|
|
FNADDR is an RTX for the address of the function's pure code.
|
|
|
|
CXT is an RTX for the static chain value for the function.
|
|
|
|
|
|
|
|
This differs from the standard version in that:
|
|
|
|
|
1996-06-28 15:39:03 -04:00
|
|
|
We do not initialize the "hint" field because it only has an 8k
|
|
|
|
range and so the target is in range of something on the stack.
|
|
|
|
Omitting the hint saves a bogus branch-prediction cache line load.
|
1996-06-28 14:06:52 -04:00
|
|
|
|
|
|
|
Linux always has an executable stack -- no need for a system call.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#undef INITIALIZE_TRAMPOLINE
|
|
|
|
#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
|
|
|
|
{ \
|
|
|
|
rtx _addr; \
|
|
|
|
\
|
|
|
|
_addr = memory_address (Pmode, plus_constant ((TRAMP), 16)); \
|
|
|
|
emit_move_insn (gen_rtx (MEM, Pmode, _addr), (FNADDR)); \
|
|
|
|
_addr = memory_address (Pmode, plus_constant ((TRAMP), 24)); \
|
|
|
|
emit_move_insn (gen_rtx (MEM, Pmode, _addr), (CXT)); \
|
|
|
|
\
|
|
|
|
emit_insn (gen_rtx (UNSPEC_VOLATILE, VOIDmode, \
|
|
|
|
gen_rtvec (1, const0_rtx), 0)); \
|
|
|
|
}
|