diff options
author | Jason Merrill <jason@gcc.gnu.org> | 2004-06-10 11:49:49 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2004-06-10 11:49:49 -0400 |
commit | 23a60a0436f48f1de4e5bf124f29f0e4a32e7d4e (patch) | |
tree | 97aaa6402c26723b11a9196283dc0e2e9dd4e5dc /gcc/config/i386/i386.c | |
parent | 339586c817ea6e5481d1d10f604f50c81ead3645 (diff) | |
download | gcc-23a60a0436f48f1de4e5bf124f29f0e4a32e7d4e.zip gcc-23a60a0436f48f1de4e5bf124f29f0e4a32e7d4e.tar.gz gcc-23a60a0436f48f1de4e5bf124f29f0e4a32e7d4e.tar.bz2 |
target.h (struct gcc_target): Change gimplify_va_arg_expr hook signature.
* target.h (struct gcc_target): Change gimplify_va_arg_expr
hook signature.
* tree-gimple.h: Adjust.
* config/alpha/alpha.c (alpha_gimplify_va_arg): Adjust.
* config/i386/i386.c (ix86_gimplify_va_arg): Adjust.
Use fold_convert.
* config/ia64/ia64.c (ia64_gimplify_va_arg): Adjust.
* config/rs6000/rs6000.c (rs6000_gimplify_va_arg): Adjust.
Use COMPLEX_EXPR for complex numbers. Use fold_convert.
* builtins.c (std_gimplify_va_arg_expr): Adjust. Use fold_convert.
(gimplify_va_arg_expr): Return GS_ERROR in error case.
Gimplify valist rather than calling stabilize_va_list.
From-SVN: r82925
Diffstat (limited to 'gcc/config/i386/i386.c')
-rw-r--r-- | gcc/config/i386/i386.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 75e80a6..cffbadf 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -878,7 +878,7 @@ static bool ix86_expand_carry_flag_compare (enum rtx_code, rtx, rtx, rtx*); static tree ix86_build_builtin_va_list (void); static void ix86_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode, tree, int *, int); -static void ix86_gimplify_va_arg (tree *expr_p, tree *pre_p, tree *post_p); +static tree ix86_gimplify_va_arg (tree, tree, tree *, tree *); struct ix86_address { @@ -3418,11 +3418,9 @@ ix86_va_arg (tree valist, tree type) /* Lower VA_ARG_EXPR at gimplification time. */ -void -ix86_gimplify_va_arg (tree *expr_p, tree *pre_p, tree *post_p) +tree +ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p) { - tree valist = TREE_OPERAND (*expr_p, 0); - tree type = TREE_TYPE (*expr_p); static const int intreg[6] = { 0, 1, 2, 3, 4, 5 }; tree f_gpr, f_fpr, f_ovf, f_sav; tree gpr, fpr, ovf, sav, t; @@ -3435,10 +3433,7 @@ ix86_gimplify_va_arg (tree *expr_p, tree *pre_p, tree *post_p) /* Only 64bit target needs something special. */ if (!TARGET_64BIT) - { - std_gimplify_va_arg_expr (expr_p, pre_p, post_p); - return; - } + return std_gimplify_va_arg_expr (valist, type, pre_p, post_p); f_gpr = TYPE_FIELDS (TREE_TYPE (va_list_type_node)); f_fpr = TREE_CHAIN (f_gpr); @@ -3595,12 +3590,12 @@ ix86_gimplify_va_arg (tree *expr_p, tree *pre_p, tree *post_p) src_addr = int_addr; src_offset = REGNO (reg) * 8; } - src_addr = convert (addr_type, src_addr); + src_addr = fold_convert (addr_type, src_addr); src_addr = fold (build2 (PLUS_EXPR, addr_type, src_addr, size_int (src_offset))); src = build_fold_indirect_ref (src_addr); - dest_addr = convert (addr_type, addr); + dest_addr = fold_convert (addr_type, addr); dest_addr = fold (build2 (PLUS_EXPR, addr_type, dest_addr, size_int (INTVAL (XEXP (slot, 1))))); dest = build_fold_indirect_ref (dest_addr); @@ -3661,11 +3656,11 @@ ix86_gimplify_va_arg (tree *expr_p, tree *pre_p, tree *post_p) } ptrtype = build_pointer_type (type); - addr = convert (ptrtype, addr); + addr = fold_convert (ptrtype, addr); if (indirect_p) addr = build_fold_indirect_ref (addr); - *expr_p = build_fold_indirect_ref (addr); + return build_fold_indirect_ref (addr); } /* Return nonzero if OP is either a i387 or SSE fp register. */ |