From 3650b6953db819a6ba3c173fe3440d3e565b42eb Mon Sep 17 00:00:00 2001
From: Alexandre Oliva <aoliva@redhat.com>
Date: Sat, 11 Nov 2000 06:04:59 +0000
Subject: [PATCH] builtins.c (std_expand_builtin_va_start): Take PARM_BOUNDARY
 into account.

* builtins.c (std_expand_builtin_va_start): Take PARM_BOUNDARY
into account.

From-SVN: r37381
---
 gcc/ChangeLog  |  3 +++
 gcc/builtins.c | 10 +++++++---
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0b2e121efded..d1db1dc3bd6c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,8 @@
 2000-11-11  Alexandre Oliva  <aoliva@redhat.com>
 
+	* builtins.c (std_expand_builtin_va_start): Take PARM_BOUNDARY
+	into account.
+
 	* config/sh/sh.h (MODES_TIEABLE_P): Don't tie SFmode to other FP
 	modes.
 
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 8430a23f82ee..68a0e41a22fe 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -2250,14 +2250,18 @@ stabilize_va_list (valist, needs_lvalue)
    the variable.  */
 void
 std_expand_builtin_va_start (stdarg_p, valist, nextarg)
-     int stdarg_p ATTRIBUTE_UNUSED;
+     int stdarg_p;
      tree valist;
      rtx nextarg;
 {
   tree t;
 
-  if (!stdarg_p)
-    nextarg = plus_constant (nextarg, -UNITS_PER_WORD);
+  if (! stdarg_p)
+    {
+      int align = PARM_BOUNDARY / BITS_PER_UNIT;
+      int offset = (((UNITS_PER_WORD + align - 1) / align) * align);
+      nextarg = plus_constant (nextarg, -offset);
+    }
 
   t = build (MODIFY_EXPR, TREE_TYPE (valist), valist,
 	     make_tree (ptr_type_node, nextarg));
-- 
GitLab