aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1995-04-17 14:05:40 -0700
committerJim Wilson <wilson@gcc.gnu.org>1995-04-17 14:05:40 -0700
commitc009da4ff82c5dcc50b0384e52720c405e425aad (patch)
tree884eafb74cf92e03985362e639a10f0827ccaa96
parente340018d59ced3ea94209a8c28ba6330865eb18d (diff)
downloadgcc-c009da4ff82c5dcc50b0384e52720c405e425aad.zip
gcc-c009da4ff82c5dcc50b0384e52720c405e425aad.tar.gz
gcc-c009da4ff82c5dcc50b0384e52720c405e425aad.tar.bz2
(CPP_SPECS): Define and use _ABI64 instead of _MIPS_SIM_ABI64.
(CPP_SPECS): Define and use _ABI64 instead of _MIPS_SIM_ABI64. (SETUP_INCOMING_VARARGS): Set MEM_IN_STRUCT_P if big endian target. From-SVN: r9398
-rw-r--r--gcc/config/mips/abi64.h31
1 files changed, 20 insertions, 11 deletions
diff --git a/gcc/config/mips/abi64.h b/gcc/config/mips/abi64.h
index 53d7d37..6ecb79e 100644
--- a/gcc/config/mips/abi64.h
+++ b/gcc/config/mips/abi64.h
@@ -52,9 +52,9 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
%{!mips1: %{!mips2: %{!mips3: %{!mips4: -D_MIPS_ISA=_MIPS_ISA_MIPS4}}}} \
%{mips1: -D_MIPS_SIM=_MIPS_SIM_ABI32} \
%{mips2: -D_MIPS_SIM=_MIPS_SIM_ABI32} \
-%{mips3: -D_MIPS_SIM=_MIPS_SIM_ABI64} \
-%{mips4: -D_MIPS_SIM=_MIPS_SIM_ABI64} \
-%{!mips1: %{!mips2: %{!mips3: %{!mips4: -D_MIPS_SIM=_MIPS_SIM_ABI64}}}} \
+%{mips3: -D_ABI64=3 -D_MIPS_SIM=_ABI64} \
+%{mips4: -D_ABI64=3 -D_MIPS_SIM=_ABI64} \
+%{!mips1: %{!mips2: %{!mips3: %{!mips4: -D_ABI64=3 -D_MIPS_SIM=_ABI64}}}} \
%{!mint64: -D_MIPS_SZINT=32}%{mint64: -D_MIPS_SZINT=64} \
%{mips1: -D_MIPS_SZLONG=32}%{mips2: -D_MIPS_SZLONG=32} \
%{!mips1:%{!mips2: -D_MIPS_SZLONG=64}} \
@@ -137,14 +137,23 @@ extern struct rtx_def *mips_function_value ();
- ! current_function_varargs) * UNITS_PER_WORD; \
\
if (! (NO_RTL)) \
- move_block_from_reg \
- ((CUM).arg_words + GP_ARG_FIRST + ! current_function_varargs, \
- gen_rtx (MEM, BLKmode, \
- plus_constant (virtual_incoming_args_rtx, \
- - PRETEND_SIZE)), \
- (MAX_ARGS_IN_REGISTERS - (CUM).arg_words \
- - ! current_function_varargs), \
- PRETEND_SIZE); \
+ { \
+ rtx mem = gen_rtx (MEM, BLKmode, \
+ plus_constant (virtual_incoming_args_rtx, \
+ - PRETEND_SIZE)); \
+ /* va_arg is an array access in this case, which causes it to \
+ get MEM_IN_STRUCT_P set. We must set it here so that the \
+ insn scheduler won't assume that these stores can't \
+ possibly overlap with the va_arg loads. */ \
+ if (BYTES_BIG_ENDIAN) \
+ MEM_IN_STRUCT_P (mem) = 1; \
+ move_block_from_reg \
+ ((CUM).arg_words + GP_ARG_FIRST + ! current_function_varargs, \
+ mem, \
+ (MAX_ARGS_IN_REGISTERS - (CUM).arg_words \
+ - ! current_function_varargs), \
+ PRETEND_SIZE); \
+ } \
} \
}