From c009da4ff82c5dcc50b0384e52720c405e425aad Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Mon, 17 Apr 1995 14:05:40 -0700 Subject: [PATCH] (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 --- gcc/config/mips/abi64.h | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/gcc/config/mips/abi64.h b/gcc/config/mips/abi64.h index 53d7d37316d..6ecb79ecee0 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); \ + } \ } \ } -- 2.30.2