diff mbox

rs6000: Fix va_start handling for -m32 -mpowerpc64 ABI_V4

Message ID b634eda540e45370d0b4ce75021bbcaeb21fdf01.1420800460.git.segher@kernel.crashing.org
State New
Headers show

Commit Message

Segher Boessenkool Jan. 9, 2015, 10:52 a.m. UTC
This fixes 88 testsuite FAILs.

-mpowerpc64 does not change the ABI, but it does change the value of
UNITS_PER_WORD.  We could use POINTER_SIZE_UNITS instead of 4 here,
but that does not seem quite right.  This code is for SVR4 only, so
a literal 4 isn't so bad I think.  Better suggestions welcome though.

Bootstrapped and tested as usual.  Okay for mainline?


Segher


2015-01-09  Segher Boessenkool  <segher@kernel.crashing.org>

gcc/
	* config/rs6000/rs6000.c (rs6000_va_start): Use a literal 4 instead
	of UNITS_PER_WORD to describe the size of stack slots.

---
 gcc/config/rs6000/rs6000.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

David Edelsohn Jan. 9, 2015, 4:06 p.m. UTC | #1
On Fri, Jan 9, 2015 at 5:52 AM, Segher Boessenkool
<segher@kernel.crashing.org> wrote:
> This fixes 88 testsuite FAILs.
>
> -mpowerpc64 does not change the ABI, but it does change the value of
> UNITS_PER_WORD.  We could use POINTER_SIZE_UNITS instead of 4 here,
> but that does not seem quite right.  This code is for SVR4 only, so
> a literal 4 isn't so bad I think.  Better suggestions welcome though.
>
> Bootstrapped and tested as usual.  Okay for mainline?
>
>
> Segher
>
>
> 2015-01-09  Segher Boessenkool  <segher@kernel.crashing.org>
>
> gcc/
>         * config/rs6000/rs6000.c (rs6000_va_start): Use a literal 4 instead
>         of UNITS_PER_WORD to describe the size of stack slots.
>
> ---
>  gcc/config/rs6000/rs6000.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
> index 66a1399..cc7b2a4 100644
> --- a/gcc/config/rs6000/rs6000.c
> +++ b/gcc/config/rs6000/rs6000.c
> @@ -11225,7 +11225,7 @@ rs6000_va_start (tree valist, rtx nextarg)
>    /* Find the overflow area.  */
>    t = make_tree (TREE_TYPE (ovf), virtual_incoming_args_rtx);
>    if (words != 0)
> -    t = fold_build_pointer_plus_hwi (t, words * UNITS_PER_WORD);
> +    t = fold_build_pointer_plus_hwi (t, 4 * words);
>    t = build2 (MODIFY_EXPR, TREE_TYPE (ovf), ovf, t);
>    TREE_SIDE_EFFECTS (t) = 1;
>    expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);

MIN_UNITS_PER_WORD

Okay with that change.

Thanks, David
diff mbox

Patch

diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 66a1399..cc7b2a4 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -11225,7 +11225,7 @@  rs6000_va_start (tree valist, rtx nextarg)
   /* Find the overflow area.  */
   t = make_tree (TREE_TYPE (ovf), virtual_incoming_args_rtx);
   if (words != 0)
-    t = fold_build_pointer_plus_hwi (t, words * UNITS_PER_WORD);
+    t = fold_build_pointer_plus_hwi (t, 4 * words);
   t = build2 (MODIFY_EXPR, TREE_TYPE (ovf), ovf, t);
   TREE_SIDE_EFFECTS (t) = 1;
   expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);