aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1995-08-31 18:17:13 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1995-08-31 18:17:13 -0400
commit653a996d860db18ac866140102109f8fb30b8670 (patch)
tree0ac0bf42672fbfbb35fb1f3d7e0cd2a18aac8382 /gcc
parent1d820a2a0d8f41f94df565d8053873b7a4adf198 (diff)
downloadgcc-653a996d860db18ac866140102109f8fb30b8670.zip
gcc-653a996d860db18ac866140102109f8fb30b8670.tar.gz
gcc-653a996d860db18ac866140102109f8fb30b8670.tar.bz2
(alpha_builtin_saveregs): Properly compute address of __offset both
both OSF and WINNT. From-SVN: r10300
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/alpha/alpha.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index cd67fe3..e26e8be 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -1158,14 +1158,12 @@ alpha_builtin_saveregs (arglist)
addr = force_operand (addr, NULL_RTX);
- /* Allocate the va_list constructor */
+- /* 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 __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). */
+ /* Store the address of the first integer register in the __base member. */
#ifdef POINTERS_EXTEND_UNSIGNED
addr = convert_memory_address (ptr_mode, addr);
@@ -1174,10 +1172,10 @@ alpha_builtin_saveregs (arglist)
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, ptr_mode,
+ emit_move_insn (change_address (block, TYPE_MODE (integer_type_node),
plus_constant (XEXP (block, 0),
- GET_MODE_SIZE (ptr_mode))),
- force_operand (argsize, NULL_RTX));
+ POINTER_SIZE/BITS_PER_UNIT)),
+ argsize);
/* Return the address of the va_list constructor, but don't put it in a
register. Doing so would fail when not optimizing and produce worse