diff options
author | danglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-07-02 20:51:58 +0000 |
---|---|---|
committer | danglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-07-02 20:51:58 +0000 |
commit | 175fd0a93bbc8fa721fb2fab972c09debbfe91e1 (patch) | |
tree | 81a7e2d4655679b1e71182d74ed3ececbc3ec07e /gcc/config/pa | |
parent | 42de07e7430d2c0d3128dd0f689ae9ddb9d65bc1 (diff) | |
download | gcc-175fd0a93bbc8fa721fb2fab972c09debbfe91e1.tar.gz |
PR target/43958
* config/pa/pa.c (hppa_gimplify_va_arg_expr): Use pointer arithmetic
for argument alignment.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161746 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/pa')
-rw-r--r-- | gcc/config/pa/pa.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 2640f05e1bc..a96bbacca3c 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -6040,11 +6040,10 @@ hppa_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p, u = fold_build1 (NEGATE_EXPR, sizetype, u); t = build2 (POINTER_PLUS_EXPR, valist_type, valist, u); - /* Copied from va-pa.h, but we probably don't need to align to - word size, since we generate and preserve that invariant. */ - u = size_int (size > 4 ? -8 : -4); - t = fold_convert (sizetype, t); - t = build2 (BIT_AND_EXPR, sizetype, t, u); + /* Align to 4 or 8 byte boundary depending on argument size. */ + + u = build_int_cst (TREE_TYPE (t), (HOST_WIDE_INT)(size > 4 ? -8 : -4)); + t = build2 (BIT_AND_EXPR, TREE_TYPE (t), t, u); t = fold_convert (valist_type, t); t = build2 (MODIFY_EXPR, valist_type, valist, t); |