From d096370e8528b24f745ffe547d49493368f6d172 Mon Sep 17 00:00:00 2001 From: kenner Date: Fri, 16 Jun 1995 10:53:32 +0000 Subject: [PATCH] (alpha_builtin_saveregs): Use ptr_mode and conversions when need so works for both OSF and NT. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@9995 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/config/alpha/alpha.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index bdcd305..cd67fe3 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -1156,20 +1156,27 @@ alpha_builtin_saveregs (arglist) ? plus_constant (virtual_incoming_args_rtx, 6 * UNITS_PER_WORD) : plus_constant (virtual_incoming_args_rtx, - (6 * UNITS_PER_WORD))); + addr = force_operand (addr, NULL_RTX); + /* Allocate the va_list constructor */ block = assign_stack_local (BLKmode, 2 * UNITS_PER_WORD, BITS_PER_WORD); RTX_UNCHANGING_P (block) = 1; RTX_UNCHANGING_P (XEXP (block, 0)) = 1; - /* Store the address of the first integer register in the - __va_base member. */ - emit_move_insn (change_address (block, Pmode, XEXP (block, 0)), - force_operand (addr, NULL_RTX)); + /* Store the address of the first integer register in the __base member. + Note that our offsets are correct for both 32- and 64-bit pointers + due to the alignment of the __offset field (a long). */ + +#ifdef POINTERS_EXTEND_UNSIGNED + addr = convert_memory_address (ptr_mode, addr); +#endif + + emit_move_insn (change_address (block, ptr_mode, XEXP (block, 0)), addr); /* Store the argsize as the __va_offset member. */ - emit_move_insn (change_address (block, Pmode, + emit_move_insn (change_address (block, ptr_mode, plus_constant (XEXP (block, 0), - UNITS_PER_WORD)), + GET_MODE_SIZE (ptr_mode))), force_operand (argsize, NULL_RTX)); /* Return the address of the va_list constructor, but don't put it in a -- 2.7.4