alpha.c (alpha_va_start, [...]): Use buildN and fold_buildN where applicable.
2005-12-02 Richard Guenther <rguenther@suse.de> * config/alpha/alpha.c (alpha_va_start, alpha_gimplify_va_arg_1i, alpha_gimplify_va_arg): Use buildN and fold_buildN where applicable. * config/frv/frv.c (frv_expand_builtin_va_start): Likewise. * config/s390/s390.c (s390_va_start, s390_gimplify_va_arg): Likewise. * config/ia64/ia64.c (ia64_gimplify_va_arg): Likewise. * config/i386/i386.c (ix86_va_start, ix86_gimplify_va_arg): Likewise. * config/rs6000/rs6000.c (rs6000_va_start, rs6000_gimplify_va_arg): Likewise. * config/sh/sh.c (sh_va_start, sh_gimplify_va_arg_expr, sh_adjust_unroll_max): Likewise. * config/c4x/c4x.c (c4x_gimplify_va_arg_expr): Likewise. * config/pa/pa.c (hppa_gimplify_va_arg_expr): Likewise. * config/xtensa/xtensa.c (xtensa_va_start, xtensa_gimplify_va_arg_expr): Likewise. * config/stormy16/stormy16.c (xstormy16_expand_builtin_va_start): Likewise. * config/mips/mips.c (mips_va_start, mips_gimplify_va_arg_expr): Likewise. From-SVN: r107906
This commit is contained in:
parent
a380cd0a38
commit
47a25a46d3
|
@ -1,3 +1,24 @@
|
|||
2005-12-02 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* config/alpha/alpha.c (alpha_va_start, alpha_gimplify_va_arg_1i,
|
||||
alpha_gimplify_va_arg): Use buildN and fold_buildN where applicable.
|
||||
* config/frv/frv.c (frv_expand_builtin_va_start): Likewise.
|
||||
* config/s390/s390.c (s390_va_start, s390_gimplify_va_arg): Likewise.
|
||||
* config/ia64/ia64.c (ia64_gimplify_va_arg): Likewise.
|
||||
* config/i386/i386.c (ix86_va_start, ix86_gimplify_va_arg): Likewise.
|
||||
* config/rs6000/rs6000.c (rs6000_va_start, rs6000_gimplify_va_arg):
|
||||
Likewise.
|
||||
* config/sh/sh.c (sh_va_start, sh_gimplify_va_arg_expr,
|
||||
sh_adjust_unroll_max): Likewise.
|
||||
* config/c4x/c4x.c (c4x_gimplify_va_arg_expr): Likewise.
|
||||
* config/pa/pa.c (hppa_gimplify_va_arg_expr): Likewise.
|
||||
* config/xtensa/xtensa.c (xtensa_va_start, xtensa_gimplify_va_arg_expr):
|
||||
Likewise.
|
||||
* config/stormy16/stormy16.c (xstormy16_expand_builtin_va_start):
|
||||
Likewise.
|
||||
* config/mips/mips.c (mips_va_start, mips_gimplify_va_arg_expr):
|
||||
Likewise.
|
||||
|
||||
2005-12-02 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* tree-vrp.c (build_assert_expr_for, process_assert_insertions_for,
|
||||
|
|
|
@ -6148,8 +6148,8 @@ alpha_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED)
|
|||
{
|
||||
nextarg = plus_constant (nextarg, offset);
|
||||
nextarg = plus_constant (nextarg, NUM_ARGS * UNITS_PER_WORD);
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (valist), valist,
|
||||
make_tree (ptr_type_node, nextarg));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist,
|
||||
make_tree (ptr_type_node, nextarg));
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
@ -6159,20 +6159,20 @@ alpha_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED)
|
|||
base_field = TYPE_FIELDS (TREE_TYPE (valist));
|
||||
offset_field = TREE_CHAIN (base_field);
|
||||
|
||||
base_field = build (COMPONENT_REF, TREE_TYPE (base_field),
|
||||
valist, base_field, NULL_TREE);
|
||||
offset_field = build (COMPONENT_REF, TREE_TYPE (offset_field),
|
||||
valist, offset_field, NULL_TREE);
|
||||
base_field = build3 (COMPONENT_REF, TREE_TYPE (base_field),
|
||||
valist, base_field, NULL_TREE);
|
||||
offset_field = build3 (COMPONENT_REF, TREE_TYPE (offset_field),
|
||||
valist, offset_field, NULL_TREE);
|
||||
|
||||
t = make_tree (ptr_type_node, virtual_incoming_args_rtx);
|
||||
t = build (PLUS_EXPR, ptr_type_node, t,
|
||||
build_int_cst (NULL_TREE, offset));
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (base_field), base_field, t);
|
||||
t = build2 (PLUS_EXPR, ptr_type_node, t,
|
||||
build_int_cst (NULL_TREE, offset));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (base_field), base_field, t);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
||||
t = build_int_cst (NULL_TREE, NUM_ARGS * UNITS_PER_WORD);
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (offset_field), offset_field, t);
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (offset_field), offset_field, t);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
@ -6188,8 +6188,8 @@ alpha_gimplify_va_arg_1 (tree type, tree base, tree offset, tree *pre_p)
|
|||
if (targetm.calls.must_pass_in_stack (TYPE_MODE (type), type))
|
||||
{
|
||||
t = build_int_cst (TREE_TYPE (offset), 6*8);
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (offset), offset,
|
||||
build (MAX_EXPR, TREE_TYPE (offset), offset, t));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (offset), offset,
|
||||
build2 (MAX_EXPR, TREE_TYPE (offset), offset, t));
|
||||
gimplify_and_add (t, pre_p);
|
||||
}
|
||||
|
||||
|
@ -6210,23 +6210,23 @@ alpha_gimplify_va_arg_1 (tree type, tree base, tree offset, tree *pre_p)
|
|||
imag_part = alpha_gimplify_va_arg_1 (TREE_TYPE (type), base,
|
||||
offset, pre_p);
|
||||
|
||||
return build (COMPLEX_EXPR, type, real_temp, imag_part);
|
||||
return build2 (COMPLEX_EXPR, type, real_temp, imag_part);
|
||||
}
|
||||
else if (TREE_CODE (type) == REAL_TYPE)
|
||||
{
|
||||
tree fpaddend, cond, fourtyeight;
|
||||
|
||||
fourtyeight = build_int_cst (TREE_TYPE (addend), 6*8);
|
||||
fpaddend = fold (build (MINUS_EXPR, TREE_TYPE (addend),
|
||||
addend, fourtyeight));
|
||||
cond = fold (build (LT_EXPR, boolean_type_node, addend, fourtyeight));
|
||||
addend = fold (build (COND_EXPR, TREE_TYPE (addend), cond,
|
||||
fpaddend, addend));
|
||||
fpaddend = fold_build2 (MINUS_EXPR, TREE_TYPE (addend),
|
||||
addend, fourtyeight);
|
||||
cond = fold_build2 (LT_EXPR, boolean_type_node, addend, fourtyeight);
|
||||
addend = fold_build3 (COND_EXPR, TREE_TYPE (addend), cond,
|
||||
fpaddend, addend);
|
||||
}
|
||||
|
||||
/* Build the final address and force that value into a temporary. */
|
||||
addr = build (PLUS_EXPR, ptr_type, fold_convert (ptr_type, base),
|
||||
fold_convert (ptr_type, addend));
|
||||
addr = build2 (PLUS_EXPR, ptr_type, fold_convert (ptr_type, base),
|
||||
fold_convert (ptr_type, addend));
|
||||
internal_post = NULL;
|
||||
gimplify_expr (&addr, pre_p, &internal_post, is_gimple_val, fb_rvalue);
|
||||
append_to_statement_list (internal_post, pre_p);
|
||||
|
@ -6242,8 +6242,8 @@ alpha_gimplify_va_arg_1 (tree type, tree base, tree offset, tree *pre_p)
|
|||
t = size_binop (MULT_EXPR, t, size_int (8));
|
||||
}
|
||||
t = fold_convert (TREE_TYPE (offset), t);
|
||||
t = build (MODIFY_EXPR, void_type_node, offset,
|
||||
build (PLUS_EXPR, TREE_TYPE (offset), offset, t));
|
||||
t = build2 (MODIFY_EXPR, void_type_node, offset,
|
||||
build2 (PLUS_EXPR, TREE_TYPE (offset), offset, t));
|
||||
gimplify_and_add (t, pre_p);
|
||||
|
||||
return build_va_arg_indirect_ref (addr);
|
||||
|
@ -6260,10 +6260,10 @@ alpha_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
|
|||
|
||||
base_field = TYPE_FIELDS (va_list_type_node);
|
||||
offset_field = TREE_CHAIN (base_field);
|
||||
base_field = build (COMPONENT_REF, TREE_TYPE (base_field),
|
||||
valist, base_field, NULL_TREE);
|
||||
offset_field = build (COMPONENT_REF, TREE_TYPE (offset_field),
|
||||
valist, offset_field, NULL_TREE);
|
||||
base_field = build3 (COMPONENT_REF, TREE_TYPE (base_field),
|
||||
valist, base_field, NULL_TREE);
|
||||
offset_field = build3 (COMPONENT_REF, TREE_TYPE (offset_field),
|
||||
valist, offset_field, NULL_TREE);
|
||||
|
||||
/* Pull the fields of the structure out into temporaries. Since we never
|
||||
modify the base field, we can use a formal temporary. Sign-extend the
|
||||
|
@ -6282,8 +6282,8 @@ alpha_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
|
|||
r = alpha_gimplify_va_arg_1 (type, base, offset, pre_p);
|
||||
|
||||
/* Stuff the offset temporary back into its field. */
|
||||
t = build (MODIFY_EXPR, void_type_node, offset_field,
|
||||
fold_convert (TREE_TYPE (offset_field), offset));
|
||||
t = build2 (MODIFY_EXPR, void_type_node, offset_field,
|
||||
fold_convert (TREE_TYPE (offset_field), offset));
|
||||
gimplify_and_add (t, pre_p);
|
||||
|
||||
if (indirect)
|
||||
|
|
|
@ -722,8 +722,8 @@ c4x_gimplify_va_arg_expr (tree valist, tree type,
|
|||
if (indirect)
|
||||
type = build_pointer_type (type);
|
||||
|
||||
t = build (PREDECREMENT_EXPR, TREE_TYPE (valist), valist,
|
||||
build_int_cst (NULL_TREE, int_size_in_bytes (type)));
|
||||
t = build2 (PREDECREMENT_EXPR, TREE_TYPE (valist), valist,
|
||||
build_int_cst (NULL_TREE, int_size_in_bytes (type)));
|
||||
t = fold_convert (build_pointer_type (type), t);
|
||||
t = build_va_arg_indirect_ref (t);
|
||||
|
||||
|
|
|
@ -2203,8 +2203,8 @@ frv_expand_builtin_va_start (tree valist, rtx nextarg)
|
|||
debug_rtx (nextarg);
|
||||
}
|
||||
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (valist), valist,
|
||||
make_tree (ptr_type_node, nextarg));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist,
|
||||
make_tree (ptr_type_node, nextarg));
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
|
|
@ -3804,10 +3804,10 @@ ix86_va_start (tree valist, rtx nextarg)
|
|||
f_sav = TREE_CHAIN (f_ovf);
|
||||
|
||||
valist = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (valist)), valist);
|
||||
gpr = build (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr, NULL_TREE);
|
||||
fpr = build (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr, NULL_TREE);
|
||||
ovf = build (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf, NULL_TREE);
|
||||
sav = build (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav, NULL_TREE);
|
||||
gpr = build3 (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr, NULL_TREE);
|
||||
fpr = build3 (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr, NULL_TREE);
|
||||
ovf = build3 (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf, NULL_TREE);
|
||||
sav = build3 (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav, NULL_TREE);
|
||||
|
||||
/* Count number of gp and fp argument registers used. */
|
||||
words = current_function_args_info.words;
|
||||
|
@ -3820,16 +3820,16 @@ ix86_va_start (tree valist, rtx nextarg)
|
|||
|
||||
if (cfun->va_list_gpr_size)
|
||||
{
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (gpr), gpr,
|
||||
build_int_cst (NULL_TREE, n_gpr * 8));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (gpr), gpr,
|
||||
build_int_cst (NULL_TREE, n_gpr * 8));
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
||||
if (cfun->va_list_fpr_size)
|
||||
{
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (fpr), fpr,
|
||||
build_int_cst (NULL_TREE, n_fpr * 16 + 8*REGPARM_MAX));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (fpr), fpr,
|
||||
build_int_cst (NULL_TREE, n_fpr * 16 + 8*REGPARM_MAX));
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
@ -3837,9 +3837,9 @@ ix86_va_start (tree valist, rtx nextarg)
|
|||
/* Find the overflow area. */
|
||||
t = make_tree (TREE_TYPE (ovf), virtual_incoming_args_rtx);
|
||||
if (words != 0)
|
||||
t = build (PLUS_EXPR, TREE_TYPE (ovf), t,
|
||||
build_int_cst (NULL_TREE, words * UNITS_PER_WORD));
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (ovf), ovf, t);
|
||||
t = build2 (PLUS_EXPR, TREE_TYPE (ovf), t,
|
||||
build_int_cst (NULL_TREE, words * UNITS_PER_WORD));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (ovf), ovf, t);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
||||
|
@ -3848,7 +3848,7 @@ ix86_va_start (tree valist, rtx nextarg)
|
|||
/* Find the register save area.
|
||||
Prologue of the function save it right above stack frame. */
|
||||
t = make_tree (TREE_TYPE (sav), frame_pointer_rtx);
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (sav), sav, t);
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (sav), sav, t);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
@ -3880,10 +3880,10 @@ ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
|
|||
f_sav = TREE_CHAIN (f_ovf);
|
||||
|
||||
valist = build_va_arg_indirect_ref (valist);
|
||||
gpr = build (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr, NULL_TREE);
|
||||
fpr = build (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr, NULL_TREE);
|
||||
ovf = build (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf, NULL_TREE);
|
||||
sav = build (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav, NULL_TREE);
|
||||
gpr = build3 (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr, NULL_TREE);
|
||||
fpr = build3 (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr, NULL_TREE);
|
||||
ovf = build3 (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf, NULL_TREE);
|
||||
sav = build3 (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav, NULL_TREE);
|
||||
|
||||
indirect_p = pass_by_reference (NULL, TYPE_MODE (type), type, false);
|
||||
if (indirect_p)
|
||||
|
@ -3965,7 +3965,7 @@ ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
|
|||
(REGPARM_MAX - needed_intregs + 1) * 8);
|
||||
t = build2 (GE_EXPR, boolean_type_node, gpr, t);
|
||||
t2 = build1 (GOTO_EXPR, void_type_node, lab_false);
|
||||
t = build (COND_EXPR, void_type_node, t, t2, NULL_TREE);
|
||||
t = build3 (COND_EXPR, void_type_node, t, t2, NULL_TREE);
|
||||
gimplify_and_add (t, pre_p);
|
||||
}
|
||||
if (needed_sseregs)
|
||||
|
@ -3975,7 +3975,7 @@ ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
|
|||
+ REGPARM_MAX * 8);
|
||||
t = build2 (GE_EXPR, boolean_type_node, fpr, t);
|
||||
t2 = build1 (GOTO_EXPR, void_type_node, lab_false);
|
||||
t = build (COND_EXPR, void_type_node, t, t2, NULL_TREE);
|
||||
t = build3 (COND_EXPR, void_type_node, t, t2, NULL_TREE);
|
||||
gimplify_and_add (t, pre_p);
|
||||
}
|
||||
|
||||
|
@ -4072,10 +4072,10 @@ ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
|
|||
else
|
||||
{
|
||||
HOST_WIDE_INT align = FUNCTION_ARG_BOUNDARY (VOIDmode, type) / 8;
|
||||
t = build (PLUS_EXPR, TREE_TYPE (ovf), ovf,
|
||||
build_int_cst (TREE_TYPE (ovf), align - 1));
|
||||
t = build (BIT_AND_EXPR, TREE_TYPE (t), t,
|
||||
build_int_cst (TREE_TYPE (t), -align));
|
||||
t = build2 (PLUS_EXPR, TREE_TYPE (ovf), ovf,
|
||||
build_int_cst (TREE_TYPE (ovf), align - 1));
|
||||
t = build2 (BIT_AND_EXPR, TREE_TYPE (t), t,
|
||||
build_int_cst (TREE_TYPE (t), -align));
|
||||
}
|
||||
gimplify_expr (&t, pre_p, NULL, is_gimple_val, fb_rvalue);
|
||||
|
||||
|
|
|
@ -4260,11 +4260,11 @@ ia64_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
|
|||
if ((TREE_CODE (type) == REAL_TYPE || TREE_CODE (type) == INTEGER_TYPE)
|
||||
? int_size_in_bytes (type) > 8 : TYPE_ALIGN (type) > 8 * BITS_PER_UNIT)
|
||||
{
|
||||
tree t = build (PLUS_EXPR, TREE_TYPE (valist), valist,
|
||||
build_int_cst (NULL_TREE, 2 * UNITS_PER_WORD - 1));
|
||||
t = build (BIT_AND_EXPR, TREE_TYPE (t), t,
|
||||
build_int_cst (NULL_TREE, -2 * UNITS_PER_WORD));
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (valist), valist, t);
|
||||
tree t = build2 (PLUS_EXPR, TREE_TYPE (valist), valist,
|
||||
build_int_cst (NULL_TREE, 2 * UNITS_PER_WORD - 1));
|
||||
t = build2 (BIT_AND_EXPR, TREE_TYPE (t), t,
|
||||
build_int_cst (NULL_TREE, -2 * UNITS_PER_WORD));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist, t);
|
||||
gimplify_and_add (t, pre_p);
|
||||
}
|
||||
|
||||
|
|
|
@ -4092,31 +4092,31 @@ mips_va_start (tree valist, rtx nextarg)
|
|||
f_goff = TREE_CHAIN (f_ftop);
|
||||
f_foff = TREE_CHAIN (f_goff);
|
||||
|
||||
ovfl = build (COMPONENT_REF, TREE_TYPE (f_ovfl), valist, f_ovfl,
|
||||
NULL_TREE);
|
||||
gtop = build (COMPONENT_REF, TREE_TYPE (f_gtop), valist, f_gtop,
|
||||
NULL_TREE);
|
||||
ftop = build (COMPONENT_REF, TREE_TYPE (f_ftop), valist, f_ftop,
|
||||
NULL_TREE);
|
||||
goff = build (COMPONENT_REF, TREE_TYPE (f_goff), valist, f_goff,
|
||||
NULL_TREE);
|
||||
foff = build (COMPONENT_REF, TREE_TYPE (f_foff), valist, f_foff,
|
||||
NULL_TREE);
|
||||
ovfl = build3 (COMPONENT_REF, TREE_TYPE (f_ovfl), valist, f_ovfl,
|
||||
NULL_TREE);
|
||||
gtop = build3 (COMPONENT_REF, TREE_TYPE (f_gtop), valist, f_gtop,
|
||||
NULL_TREE);
|
||||
ftop = build3 (COMPONENT_REF, TREE_TYPE (f_ftop), valist, f_ftop,
|
||||
NULL_TREE);
|
||||
goff = build3 (COMPONENT_REF, TREE_TYPE (f_goff), valist, f_goff,
|
||||
NULL_TREE);
|
||||
foff = build3 (COMPONENT_REF, TREE_TYPE (f_foff), valist, f_foff,
|
||||
NULL_TREE);
|
||||
|
||||
/* Emit code to initialize OVFL, which points to the next varargs
|
||||
stack argument. CUM->STACK_WORDS gives the number of stack
|
||||
words used by named arguments. */
|
||||
t = make_tree (TREE_TYPE (ovfl), virtual_incoming_args_rtx);
|
||||
if (cum->stack_words > 0)
|
||||
t = build (PLUS_EXPR, TREE_TYPE (ovfl), t,
|
||||
build_int_cst (NULL_TREE,
|
||||
cum->stack_words * UNITS_PER_WORD));
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (ovfl), ovfl, t);
|
||||
t = build2 (PLUS_EXPR, TREE_TYPE (ovfl), t,
|
||||
build_int_cst (NULL_TREE,
|
||||
cum->stack_words * UNITS_PER_WORD));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (ovfl), ovfl, t);
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
||||
/* Emit code to initialize GTOP, the top of the GPR save area. */
|
||||
t = make_tree (TREE_TYPE (gtop), virtual_incoming_args_rtx);
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (gtop), gtop, t);
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (gtop), gtop, t);
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
||||
/* Emit code to initialize FTOP, the top of the FPR save area.
|
||||
|
@ -4126,21 +4126,21 @@ mips_va_start (tree valist, rtx nextarg)
|
|||
fpr_offset = gpr_save_area_size + UNITS_PER_FPVALUE - 1;
|
||||
fpr_offset &= ~(UNITS_PER_FPVALUE - 1);
|
||||
if (fpr_offset)
|
||||
t = build (PLUS_EXPR, TREE_TYPE (ftop), t,
|
||||
build_int_cst (NULL_TREE, -fpr_offset));
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (ftop), ftop, t);
|
||||
t = build2 (PLUS_EXPR, TREE_TYPE (ftop), t,
|
||||
build_int_cst (NULL_TREE, -fpr_offset));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (ftop), ftop, t);
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
||||
/* Emit code to initialize GOFF, the offset from GTOP of the
|
||||
next GPR argument. */
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (goff), goff,
|
||||
build_int_cst (NULL_TREE, gpr_save_area_size));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (goff), goff,
|
||||
build_int_cst (NULL_TREE, gpr_save_area_size));
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
||||
/* Likewise emit code to initialize FOFF, the offset from FTOP
|
||||
of the next FPR argument. */
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (foff), foff,
|
||||
build_int_cst (NULL_TREE, fpr_save_area_size));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (foff), foff,
|
||||
build_int_cst (NULL_TREE, fpr_save_area_size));
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
else
|
||||
|
@ -4214,16 +4214,16 @@ mips_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p)
|
|||
|
||||
[1] and [9] can sometimes be optimized away. */
|
||||
|
||||
ovfl = build (COMPONENT_REF, TREE_TYPE (f_ovfl), valist, f_ovfl,
|
||||
NULL_TREE);
|
||||
ovfl = build3 (COMPONENT_REF, TREE_TYPE (f_ovfl), valist, f_ovfl,
|
||||
NULL_TREE);
|
||||
|
||||
if (GET_MODE_CLASS (TYPE_MODE (type)) == MODE_FLOAT
|
||||
&& GET_MODE_SIZE (TYPE_MODE (type)) <= UNITS_PER_FPVALUE)
|
||||
{
|
||||
top = build (COMPONENT_REF, TREE_TYPE (f_ftop), valist, f_ftop,
|
||||
NULL_TREE);
|
||||
off = build (COMPONENT_REF, TREE_TYPE (f_foff), valist, f_foff,
|
||||
NULL_TREE);
|
||||
top = build3 (COMPONENT_REF, TREE_TYPE (f_ftop), valist, f_ftop,
|
||||
NULL_TREE);
|
||||
off = build3 (COMPONENT_REF, TREE_TYPE (f_foff), valist, f_foff,
|
||||
NULL_TREE);
|
||||
|
||||
/* When floating-point registers are saved to the stack,
|
||||
each one will take up UNITS_PER_HWFPVALUE bytes, regardless
|
||||
|
@ -4251,42 +4251,42 @@ mips_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p)
|
|||
}
|
||||
else
|
||||
{
|
||||
top = build (COMPONENT_REF, TREE_TYPE (f_gtop), valist, f_gtop,
|
||||
NULL_TREE);
|
||||
off = build (COMPONENT_REF, TREE_TYPE (f_goff), valist, f_goff,
|
||||
NULL_TREE);
|
||||
top = build3 (COMPONENT_REF, TREE_TYPE (f_gtop), valist, f_gtop,
|
||||
NULL_TREE);
|
||||
off = build3 (COMPONENT_REF, TREE_TYPE (f_goff), valist, f_goff,
|
||||
NULL_TREE);
|
||||
if (rsize > UNITS_PER_WORD)
|
||||
{
|
||||
/* [1] Emit code for: off &= -rsize. */
|
||||
t = build (BIT_AND_EXPR, TREE_TYPE (off), off,
|
||||
build_int_cst (NULL_TREE, -rsize));
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (off), off, t);
|
||||
t = build2 (BIT_AND_EXPR, TREE_TYPE (off), off,
|
||||
build_int_cst (NULL_TREE, -rsize));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (off), off, t);
|
||||
gimplify_and_add (t, pre_p);
|
||||
}
|
||||
osize = rsize;
|
||||
}
|
||||
|
||||
/* [2] Emit code to branch if off == 0. */
|
||||
t = build (NE_EXPR, boolean_type_node, off,
|
||||
build_int_cst (TREE_TYPE (off), 0));
|
||||
addr = build (COND_EXPR, ptr_type_node, t, NULL, NULL);
|
||||
t = build2 (NE_EXPR, boolean_type_node, off,
|
||||
build_int_cst (TREE_TYPE (off), 0));
|
||||
addr = build3 (COND_EXPR, ptr_type_node, t, NULL_TREE, NULL_TREE);
|
||||
|
||||
/* [5] Emit code for: off -= rsize. We do this as a form of
|
||||
post-increment not available to C. Also widen for the
|
||||
coming pointer arithmetic. */
|
||||
t = fold_convert (TREE_TYPE (off), build_int_cst (NULL_TREE, rsize));
|
||||
t = build (POSTDECREMENT_EXPR, TREE_TYPE (off), off, t);
|
||||
t = build2 (POSTDECREMENT_EXPR, TREE_TYPE (off), off, t);
|
||||
t = fold_convert (sizetype, t);
|
||||
t = fold_convert (TREE_TYPE (top), t);
|
||||
|
||||
/* [4] Emit code for: addr_rtx = top - off. On big endian machines,
|
||||
the argument has RSIZE - SIZE bytes of leading padding. */
|
||||
t = build (MINUS_EXPR, TREE_TYPE (top), top, t);
|
||||
t = build2 (MINUS_EXPR, TREE_TYPE (top), top, t);
|
||||
if (BYTES_BIG_ENDIAN && rsize > size)
|
||||
{
|
||||
u = fold_convert (TREE_TYPE (t), build_int_cst (NULL_TREE,
|
||||
rsize - size));
|
||||
t = build (PLUS_EXPR, TREE_TYPE (t), t, u);
|
||||
t = build2 (PLUS_EXPR, TREE_TYPE (t), t, u);
|
||||
}
|
||||
COND_EXPR_THEN (addr) = t;
|
||||
|
||||
|
@ -4295,11 +4295,11 @@ mips_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p)
|
|||
/* [9] Emit: ovfl += ((intptr_t) ovfl + osize - 1) & -osize. */
|
||||
u = fold_convert (TREE_TYPE (ovfl),
|
||||
build_int_cst (NULL_TREE, osize - 1));
|
||||
t = build (PLUS_EXPR, TREE_TYPE (ovfl), ovfl, u);
|
||||
t = build2 (PLUS_EXPR, TREE_TYPE (ovfl), ovfl, u);
|
||||
u = fold_convert (TREE_TYPE (ovfl),
|
||||
build_int_cst (NULL_TREE, -osize));
|
||||
t = build (BIT_AND_EXPR, TREE_TYPE (ovfl), t, u);
|
||||
align = build (MODIFY_EXPR, TREE_TYPE (ovfl), ovfl, t);
|
||||
t = build2 (BIT_AND_EXPR, TREE_TYPE (ovfl), t, u);
|
||||
align = build2 (MODIFY_EXPR, TREE_TYPE (ovfl), ovfl, t);
|
||||
}
|
||||
else
|
||||
align = NULL;
|
||||
|
@ -4309,17 +4309,17 @@ mips_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p)
|
|||
the argument has OSIZE - SIZE bytes of leading padding. */
|
||||
u = fold_convert (TREE_TYPE (ovfl),
|
||||
build_int_cst (NULL_TREE, osize));
|
||||
t = build (POSTINCREMENT_EXPR, TREE_TYPE (ovfl), ovfl, u);
|
||||
t = build2 (POSTINCREMENT_EXPR, TREE_TYPE (ovfl), ovfl, u);
|
||||
if (BYTES_BIG_ENDIAN && osize > size)
|
||||
{
|
||||
u = fold_convert (TREE_TYPE (t),
|
||||
build_int_cst (NULL_TREE, osize - size));
|
||||
t = build (PLUS_EXPR, TREE_TYPE (t), t, u);
|
||||
t = build2 (PLUS_EXPR, TREE_TYPE (t), t, u);
|
||||
}
|
||||
|
||||
/* String [9] and [10,11] together. */
|
||||
if (align)
|
||||
t = build (COMPOUND_EXPR, TREE_TYPE (t), align, t);
|
||||
t = build2 (COMPOUND_EXPR, TREE_TYPE (t), align, t);
|
||||
COND_EXPR_ELSE (addr) = t;
|
||||
|
||||
addr = fold_convert (build_pointer_type (type), addr);
|
||||
|
|
|
@ -5853,20 +5853,20 @@ hppa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p)
|
|||
/* Args grow down. Not handled by generic routines. */
|
||||
|
||||
u = fold_convert (valist_type, size_in_bytes (type));
|
||||
t = build (MINUS_EXPR, valist_type, valist, u);
|
||||
t = build2 (MINUS_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 = build_int_cst (valist_type, (size > 4 ? -8 : -4));
|
||||
t = build (BIT_AND_EXPR, valist_type, t, u);
|
||||
t = build2 (BIT_AND_EXPR, valist_type, t, u);
|
||||
|
||||
t = build (MODIFY_EXPR, valist_type, valist, t);
|
||||
t = build2 (MODIFY_EXPR, valist_type, valist, t);
|
||||
|
||||
ofs = (8 - size) % 4;
|
||||
if (ofs != 0)
|
||||
{
|
||||
u = fold_convert (valist_type, size_int (ofs));
|
||||
t = build (PLUS_EXPR, valist_type, t, u);
|
||||
t = build2 (PLUS_EXPR, valist_type, t, u);
|
||||
}
|
||||
|
||||
t = fold_convert (ptr, t);
|
||||
|
|
|
@ -5658,10 +5658,10 @@ rs6000_va_start (tree valist, rtx nextarg)
|
|||
f_sav = TREE_CHAIN (f_ovf);
|
||||
|
||||
valist = build_va_arg_indirect_ref (valist);
|
||||
gpr = build (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr, NULL_TREE);
|
||||
fpr = build (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr, NULL_TREE);
|
||||
ovf = build (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf, NULL_TREE);
|
||||
sav = build (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav, NULL_TREE);
|
||||
gpr = build3 (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr, NULL_TREE);
|
||||
fpr = build3 (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr, NULL_TREE);
|
||||
ovf = build3 (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf, NULL_TREE);
|
||||
sav = build3 (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav, NULL_TREE);
|
||||
|
||||
/* Count number of gp and fp argument registers used. */
|
||||
words = current_function_args_info.words;
|
||||
|
@ -5677,16 +5677,16 @@ rs6000_va_start (tree valist, rtx nextarg)
|
|||
|
||||
if (cfun->va_list_gpr_size)
|
||||
{
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (gpr), gpr,
|
||||
build_int_cst (NULL_TREE, n_gpr));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (gpr), gpr,
|
||||
build_int_cst (NULL_TREE, n_gpr));
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
||||
if (cfun->va_list_fpr_size)
|
||||
{
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (fpr), fpr,
|
||||
build_int_cst (NULL_TREE, n_fpr));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (fpr), fpr,
|
||||
build_int_cst (NULL_TREE, n_fpr));
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
@ -5694,9 +5694,9 @@ 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 = build (PLUS_EXPR, TREE_TYPE (ovf), t,
|
||||
build_int_cst (NULL_TREE, words * UNITS_PER_WORD));
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (ovf), ovf, t);
|
||||
t = build2 (PLUS_EXPR, TREE_TYPE (ovf), t,
|
||||
build_int_cst (NULL_TREE, words * UNITS_PER_WORD));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (ovf), ovf, t);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
||||
|
@ -5711,9 +5711,9 @@ rs6000_va_start (tree valist, rtx nextarg)
|
|||
/* Find the register save area. */
|
||||
t = make_tree (TREE_TYPE (sav), virtual_stack_vars_rtx);
|
||||
if (cfun->machine->varargs_save_offset)
|
||||
t = build (PLUS_EXPR, TREE_TYPE (sav), t,
|
||||
build_int_cst (NULL_TREE, cfun->machine->varargs_save_offset));
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (sav), sav, t);
|
||||
t = build2 (PLUS_EXPR, TREE_TYPE (sav), t,
|
||||
build_int_cst (NULL_TREE, cfun->machine->varargs_save_offset));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (sav), sav, t);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
@ -5759,7 +5759,7 @@ rs6000_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
|
|||
imag_part = rs6000_gimplify_va_arg (valist, elem_type, pre_p,
|
||||
post_p);
|
||||
|
||||
return build (COMPLEX_EXPR, type, real_part, imag_part);
|
||||
return build2 (COMPLEX_EXPR, type, real_part, imag_part);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5773,10 +5773,10 @@ rs6000_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
|
|||
f_sav = TREE_CHAIN (f_ovf);
|
||||
|
||||
valist = build_va_arg_indirect_ref (valist);
|
||||
gpr = build (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr, NULL_TREE);
|
||||
fpr = build (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr, NULL_TREE);
|
||||
ovf = build (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf, NULL_TREE);
|
||||
sav = build (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav, NULL_TREE);
|
||||
gpr = build3 (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr, NULL_TREE);
|
||||
fpr = build3 (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr, NULL_TREE);
|
||||
ovf = build3 (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf, NULL_TREE);
|
||||
sav = build3 (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav, NULL_TREE);
|
||||
|
||||
size = int_size_in_bytes (type);
|
||||
rsize = (size + 3) / 4;
|
||||
|
@ -5857,7 +5857,7 @@ rs6000_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
|
|||
{
|
||||
/* Ensure that we don't find any more args in regs.
|
||||
Alignment has taken care of the n_reg == 2 case. */
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (reg), reg, size_int (8));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (reg), reg, size_int (8));
|
||||
gimplify_and_add (t, pre_p);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7493,10 +7493,10 @@ s390_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED)
|
|||
f_sav = TREE_CHAIN (f_ovf);
|
||||
|
||||
valist = build_va_arg_indirect_ref (valist);
|
||||
gpr = build (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr, NULL_TREE);
|
||||
fpr = build (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr, NULL_TREE);
|
||||
ovf = build (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf, NULL_TREE);
|
||||
sav = build (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav, NULL_TREE);
|
||||
gpr = build3 (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr, NULL_TREE);
|
||||
fpr = build3 (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr, NULL_TREE);
|
||||
ovf = build3 (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf, NULL_TREE);
|
||||
sav = build3 (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav, NULL_TREE);
|
||||
|
||||
/* Count number of gp and fp argument registers used. */
|
||||
|
||||
|
@ -7505,16 +7505,16 @@ s390_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED)
|
|||
|
||||
if (cfun->va_list_gpr_size)
|
||||
{
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (gpr), gpr,
|
||||
build_int_cst (NULL_TREE, n_gpr));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (gpr), gpr,
|
||||
build_int_cst (NULL_TREE, n_gpr));
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
||||
if (cfun->va_list_fpr_size)
|
||||
{
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (fpr), fpr,
|
||||
build_int_cst (NULL_TREE, n_fpr));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (fpr), fpr,
|
||||
build_int_cst (NULL_TREE, n_fpr));
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
@ -7531,9 +7531,9 @@ s390_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED)
|
|||
fprintf (stderr, "va_start: n_gpr = %d, n_fpr = %d off %d\n",
|
||||
(int)n_gpr, (int)n_fpr, off);
|
||||
|
||||
t = build (PLUS_EXPR, TREE_TYPE (ovf), t, build_int_cst (NULL_TREE, off));
|
||||
t = build2 (PLUS_EXPR, TREE_TYPE (ovf), t, build_int_cst (NULL_TREE, off));
|
||||
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (ovf), ovf, t);
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (ovf), ovf, t);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
@ -7543,10 +7543,10 @@ s390_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED)
|
|||
|| (cfun->va_list_fpr_size && n_fpr < FP_ARG_NUM_REG))
|
||||
{
|
||||
t = make_tree (TREE_TYPE (sav), return_address_pointer_rtx);
|
||||
t = build (PLUS_EXPR, TREE_TYPE (sav), t,
|
||||
build_int_cst (NULL_TREE, -RETURN_REGNUM * UNITS_PER_WORD));
|
||||
t = build2 (PLUS_EXPR, TREE_TYPE (sav), t,
|
||||
build_int_cst (NULL_TREE, -RETURN_REGNUM * UNITS_PER_WORD));
|
||||
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (sav), sav, t);
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (sav), sav, t);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
@ -7591,10 +7591,10 @@ s390_gimplify_va_arg (tree valist, tree type, tree *pre_p,
|
|||
f_sav = TREE_CHAIN (f_ovf);
|
||||
|
||||
valist = build_va_arg_indirect_ref (valist);
|
||||
gpr = build (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr, NULL_TREE);
|
||||
fpr = build (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr, NULL_TREE);
|
||||
ovf = build (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf, NULL_TREE);
|
||||
sav = build (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav, NULL_TREE);
|
||||
gpr = build3 (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr, NULL_TREE);
|
||||
fpr = build3 (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr, NULL_TREE);
|
||||
ovf = build3 (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf, NULL_TREE);
|
||||
sav = build3 (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav, NULL_TREE);
|
||||
|
||||
size = int_size_in_bytes (type);
|
||||
|
||||
|
|
|
@ -6658,20 +6658,20 @@ sh_va_start (tree valist, rtx nextarg)
|
|||
f_next_fp_limit = TREE_CHAIN (f_next_fp);
|
||||
f_next_stack = TREE_CHAIN (f_next_fp_limit);
|
||||
|
||||
next_o = build (COMPONENT_REF, TREE_TYPE (f_next_o), valist, f_next_o,
|
||||
NULL_TREE);
|
||||
next_o_limit = build (COMPONENT_REF, TREE_TYPE (f_next_o_limit),
|
||||
valist, f_next_o_limit, NULL_TREE);
|
||||
next_fp = build (COMPONENT_REF, TREE_TYPE (f_next_fp), valist, f_next_fp,
|
||||
next_o = build3 (COMPONENT_REF, TREE_TYPE (f_next_o), valist, f_next_o,
|
||||
NULL_TREE);
|
||||
next_fp_limit = build (COMPONENT_REF, TREE_TYPE (f_next_fp_limit),
|
||||
valist, f_next_fp_limit, NULL_TREE);
|
||||
next_stack = build (COMPONENT_REF, TREE_TYPE (f_next_stack),
|
||||
valist, f_next_stack, NULL_TREE);
|
||||
next_o_limit = build3 (COMPONENT_REF, TREE_TYPE (f_next_o_limit),
|
||||
valist, f_next_o_limit, NULL_TREE);
|
||||
next_fp = build3 (COMPONENT_REF, TREE_TYPE (f_next_fp), valist, f_next_fp,
|
||||
NULL_TREE);
|
||||
next_fp_limit = build3 (COMPONENT_REF, TREE_TYPE (f_next_fp_limit),
|
||||
valist, f_next_fp_limit, NULL_TREE);
|
||||
next_stack = build3 (COMPONENT_REF, TREE_TYPE (f_next_stack),
|
||||
valist, f_next_stack, NULL_TREE);
|
||||
|
||||
/* Call __builtin_saveregs. */
|
||||
u = make_tree (ptr_type_node, expand_builtin_saveregs ());
|
||||
t = build (MODIFY_EXPR, ptr_type_node, next_fp, u);
|
||||
t = build2 (MODIFY_EXPR, ptr_type_node, next_fp, u);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
||||
|
@ -6680,13 +6680,13 @@ sh_va_start (tree valist, rtx nextarg)
|
|||
nfp = 8 - nfp;
|
||||
else
|
||||
nfp = 0;
|
||||
u = fold (build (PLUS_EXPR, ptr_type_node, u,
|
||||
build_int_cst (NULL_TREE, UNITS_PER_WORD * nfp)));
|
||||
t = build (MODIFY_EXPR, ptr_type_node, next_fp_limit, u);
|
||||
u = fold_build2 (PLUS_EXPR, ptr_type_node, u,
|
||||
build_int_cst (NULL_TREE, UNITS_PER_WORD * nfp));
|
||||
t = build2 (MODIFY_EXPR, ptr_type_node, next_fp_limit, u);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
||||
t = build (MODIFY_EXPR, ptr_type_node, next_o, u);
|
||||
t = build2 (MODIFY_EXPR, ptr_type_node, next_o, u);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
||||
|
@ -6695,14 +6695,14 @@ sh_va_start (tree valist, rtx nextarg)
|
|||
nint = 4 - nint;
|
||||
else
|
||||
nint = 0;
|
||||
u = fold (build (PLUS_EXPR, ptr_type_node, u,
|
||||
build_int_cst (NULL_TREE, UNITS_PER_WORD * nint)));
|
||||
t = build (MODIFY_EXPR, ptr_type_node, next_o_limit, u);
|
||||
u = fold_build2 (PLUS_EXPR, ptr_type_node, u,
|
||||
build_int_cst (NULL_TREE, UNITS_PER_WORD * nint));
|
||||
t = build2 (MODIFY_EXPR, ptr_type_node, next_o_limit, u);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
||||
u = make_tree (ptr_type_node, nextarg);
|
||||
t = build (MODIFY_EXPR, ptr_type_node, next_stack, u);
|
||||
t = build2 (MODIFY_EXPR, ptr_type_node, next_stack, u);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
@ -6761,16 +6761,16 @@ sh_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p,
|
|||
f_next_fp_limit = TREE_CHAIN (f_next_fp);
|
||||
f_next_stack = TREE_CHAIN (f_next_fp_limit);
|
||||
|
||||
next_o = build (COMPONENT_REF, TREE_TYPE (f_next_o), valist, f_next_o,
|
||||
NULL_TREE);
|
||||
next_o_limit = build (COMPONENT_REF, TREE_TYPE (f_next_o_limit),
|
||||
valist, f_next_o_limit, NULL_TREE);
|
||||
next_fp = build (COMPONENT_REF, TREE_TYPE (f_next_fp),
|
||||
valist, f_next_fp, NULL_TREE);
|
||||
next_fp_limit = build (COMPONENT_REF, TREE_TYPE (f_next_fp_limit),
|
||||
valist, f_next_fp_limit, NULL_TREE);
|
||||
next_stack = build (COMPONENT_REF, TREE_TYPE (f_next_stack),
|
||||
valist, f_next_stack, NULL_TREE);
|
||||
next_o = build3 (COMPONENT_REF, TREE_TYPE (f_next_o), valist, f_next_o,
|
||||
NULL_TREE);
|
||||
next_o_limit = build3 (COMPONENT_REF, TREE_TYPE (f_next_o_limit),
|
||||
valist, f_next_o_limit, NULL_TREE);
|
||||
next_fp = build3 (COMPONENT_REF, TREE_TYPE (f_next_fp),
|
||||
valist, f_next_fp, NULL_TREE);
|
||||
next_fp_limit = build3 (COMPONENT_REF, TREE_TYPE (f_next_fp_limit),
|
||||
valist, f_next_fp_limit, NULL_TREE);
|
||||
next_stack = build3 (COMPONENT_REF, TREE_TYPE (f_next_stack),
|
||||
valist, f_next_stack, NULL_TREE);
|
||||
|
||||
/* Structures with a single member with a distinct mode are passed
|
||||
like their member. This is relevant if the latter has a REAL_TYPE
|
||||
|
@ -6829,19 +6829,19 @@ sh_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p,
|
|||
if (size > 4 && !is_double)
|
||||
tmp = build2 (PLUS_EXPR, TREE_TYPE (tmp), tmp,
|
||||
fold_convert (TREE_TYPE (tmp), size_int (4 - size)));
|
||||
tmp = build (GE_EXPR, boolean_type_node, next_fp_tmp, tmp);
|
||||
cmp = build (COND_EXPR, void_type_node, tmp,
|
||||
build (GOTO_EXPR, void_type_node, lab_false),
|
||||
NULL);
|
||||
tmp = build2 (GE_EXPR, boolean_type_node, next_fp_tmp, tmp);
|
||||
cmp = build3 (COND_EXPR, void_type_node, tmp,
|
||||
build1 (GOTO_EXPR, void_type_node, lab_false),
|
||||
NULL_TREE);
|
||||
if (!is_double)
|
||||
gimplify_and_add (cmp, pre_p);
|
||||
|
||||
if (TYPE_ALIGN (type) > BITS_PER_WORD || (is_double || size == 16))
|
||||
{
|
||||
tmp = fold_convert (ptr_type_node, size_int (UNITS_PER_WORD));
|
||||
tmp = build (BIT_AND_EXPR, ptr_type_node, next_fp_tmp, tmp);
|
||||
tmp = build (PLUS_EXPR, ptr_type_node, next_fp_tmp, tmp);
|
||||
tmp = build (MODIFY_EXPR, ptr_type_node, next_fp_tmp, tmp);
|
||||
tmp = build2 (BIT_AND_EXPR, ptr_type_node, next_fp_tmp, tmp);
|
||||
tmp = build2 (PLUS_EXPR, ptr_type_node, next_fp_tmp, tmp);
|
||||
tmp = build2 (MODIFY_EXPR, ptr_type_node, next_fp_tmp, tmp);
|
||||
gimplify_and_add (tmp, pre_p);
|
||||
}
|
||||
if (is_double)
|
||||
|
@ -6861,19 +6861,19 @@ sh_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p,
|
|||
= std_gimplify_va_arg_expr (next_fp_tmp, subtype, pre_p, NULL);
|
||||
real = get_initialized_tmp_var (real, pre_p, NULL);
|
||||
|
||||
result = build (COMPLEX_EXPR, type, real, imag);
|
||||
result = build2 (COMPLEX_EXPR, type, real, imag);
|
||||
result = get_initialized_tmp_var (result, pre_p, NULL);
|
||||
}
|
||||
#endif /* FUNCTION_ARG_SCmode_WART */
|
||||
|
||||
tmp = build (GOTO_EXPR, void_type_node, lab_over);
|
||||
tmp = build1 (GOTO_EXPR, void_type_node, lab_over);
|
||||
gimplify_and_add (tmp, pre_p);
|
||||
|
||||
tmp = build (LABEL_EXPR, void_type_node, lab_false);
|
||||
tmp = build1 (LABEL_EXPR, void_type_node, lab_false);
|
||||
gimplify_and_add (tmp, pre_p);
|
||||
|
||||
tmp = build1 (ADDR_EXPR, pptr_type_node, next_stack);
|
||||
tmp = build (MODIFY_EXPR, void_type_node, addr, tmp);
|
||||
tmp = build2 (MODIFY_EXPR, void_type_node, addr, tmp);
|
||||
gimplify_and_add (tmp, pre_p);
|
||||
tmp = build2 (MODIFY_EXPR, ptr_type_node, next_fp_tmp, valist);
|
||||
gimplify_and_add (tmp, pre_p);
|
||||
|
@ -6885,37 +6885,37 @@ sh_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p,
|
|||
else
|
||||
{
|
||||
tmp = fold_convert (ptr_type_node, size_int (rsize));
|
||||
tmp = build (PLUS_EXPR, ptr_type_node, next_o, tmp);
|
||||
tmp = build (GT_EXPR, boolean_type_node, tmp, next_o_limit);
|
||||
tmp = build (COND_EXPR, void_type_node, tmp,
|
||||
build (GOTO_EXPR, void_type_node, lab_false),
|
||||
NULL);
|
||||
tmp = build2 (PLUS_EXPR, ptr_type_node, next_o, tmp);
|
||||
tmp = build2 (GT_EXPR, boolean_type_node, tmp, next_o_limit);
|
||||
tmp = build3 (COND_EXPR, void_type_node, tmp,
|
||||
build1 (GOTO_EXPR, void_type_node, lab_false),
|
||||
NULL_TREE);
|
||||
gimplify_and_add (tmp, pre_p);
|
||||
|
||||
tmp = build1 (ADDR_EXPR, pptr_type_node, next_o);
|
||||
tmp = build (MODIFY_EXPR, void_type_node, addr, tmp);
|
||||
tmp = build2 (MODIFY_EXPR, void_type_node, addr, tmp);
|
||||
gimplify_and_add (tmp, pre_p);
|
||||
|
||||
tmp = build (GOTO_EXPR, void_type_node, lab_over);
|
||||
tmp = build1 (GOTO_EXPR, void_type_node, lab_over);
|
||||
gimplify_and_add (tmp, pre_p);
|
||||
|
||||
tmp = build (LABEL_EXPR, void_type_node, lab_false);
|
||||
tmp = build1 (LABEL_EXPR, void_type_node, lab_false);
|
||||
gimplify_and_add (tmp, pre_p);
|
||||
|
||||
if (size > 4 && ! TARGET_SH4)
|
||||
{
|
||||
tmp = build (MODIFY_EXPR, ptr_type_node, next_o, next_o_limit);
|
||||
tmp = build2 (MODIFY_EXPR, ptr_type_node, next_o, next_o_limit);
|
||||
gimplify_and_add (tmp, pre_p);
|
||||
}
|
||||
|
||||
tmp = build1 (ADDR_EXPR, pptr_type_node, next_stack);
|
||||
tmp = build (MODIFY_EXPR, void_type_node, addr, tmp);
|
||||
tmp = build2 (MODIFY_EXPR, void_type_node, addr, tmp);
|
||||
gimplify_and_add (tmp, pre_p);
|
||||
}
|
||||
|
||||
if (!result)
|
||||
{
|
||||
tmp = build (LABEL_EXPR, void_type_node, lab_over);
|
||||
tmp = build1 (LABEL_EXPR, void_type_node, lab_over);
|
||||
gimplify_and_add (tmp, pre_p);
|
||||
}
|
||||
}
|
||||
|
@ -6926,10 +6926,10 @@ sh_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p,
|
|||
tmp = std_gimplify_va_arg_expr (valist, type, pre_p, NULL);
|
||||
if (result)
|
||||
{
|
||||
tmp = build (MODIFY_EXPR, void_type_node, result, tmp);
|
||||
tmp = build2 (MODIFY_EXPR, void_type_node, result, tmp);
|
||||
gimplify_and_add (tmp, pre_p);
|
||||
|
||||
tmp = build (LABEL_EXPR, void_type_node, lab_over);
|
||||
tmp = build1 (LABEL_EXPR, void_type_node, lab_over);
|
||||
gimplify_and_add (tmp, pre_p);
|
||||
}
|
||||
else
|
||||
|
@ -10279,10 +10279,10 @@ sh_adjust_unroll_max (struct loop * loop, int insn_count,
|
|||
if (TREE_CODE (type) != ARRAY_TYPE
|
||||
|| ! TYPE_SIZE (type) || ! TYPE_SIZE_UNIT (type))
|
||||
break;
|
||||
size_tree = fold (build (TRUNC_DIV_EXPR,
|
||||
size_tree = fold_build2 (TRUNC_DIV_EXPR,
|
||||
bitsizetype,
|
||||
TYPE_SIZE (type),
|
||||
TYPE_SIZE_UNIT (type)));
|
||||
TYPE_SIZE_UNIT (type));
|
||||
if (TREE_CODE (size_tree) == INTEGER_CST
|
||||
&& ! TREE_INT_CST_HIGH (size_tree)
|
||||
&& TREE_INT_CST_LOW (size_tree) < max_iterations)
|
||||
|
|
|
@ -1365,20 +1365,20 @@ xstormy16_expand_builtin_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED)
|
|||
f_base = TYPE_FIELDS (va_list_type_node);
|
||||
f_count = TREE_CHAIN (f_base);
|
||||
|
||||
base = build (COMPONENT_REF, TREE_TYPE (f_base), valist, f_base, NULL_TREE);
|
||||
count = build (COMPONENT_REF, TREE_TYPE (f_count), valist, f_count,
|
||||
NULL_TREE);
|
||||
base = build3 (COMPONENT_REF, TREE_TYPE (f_base), valist, f_base, NULL_TREE);
|
||||
count = build3 (COMPONENT_REF, TREE_TYPE (f_count), valist, f_count,
|
||||
NULL_TREE);
|
||||
|
||||
t = make_tree (TREE_TYPE (base), virtual_incoming_args_rtx);
|
||||
t = build (PLUS_EXPR, TREE_TYPE (base), t,
|
||||
build_int_cst (NULL_TREE, INCOMING_FRAME_SP_OFFSET));
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (base), base, t);
|
||||
t = build2 (PLUS_EXPR, TREE_TYPE (base), t,
|
||||
build_int_cst (NULL_TREE, INCOMING_FRAME_SP_OFFSET));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (base), base, t);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (count), count,
|
||||
build_int_cst (NULL_TREE,
|
||||
current_function_args_info * UNITS_PER_WORD));
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (count), count,
|
||||
build_int_cst (NULL_TREE,
|
||||
current_function_args_info * UNITS_PER_WORD));
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
@ -1401,9 +1401,9 @@ xstormy16_expand_builtin_va_arg (tree valist, tree type, tree *pre_p,
|
|||
f_base = TYPE_FIELDS (va_list_type_node);
|
||||
f_count = TREE_CHAIN (f_base);
|
||||
|
||||
base = build (COMPONENT_REF, TREE_TYPE (f_base), valist, f_base, NULL_TREE);
|
||||
count = build (COMPONENT_REF, TREE_TYPE (f_count), valist, f_count,
|
||||
NULL_TREE);
|
||||
base = build3 (COMPONENT_REF, TREE_TYPE (f_base), valist, f_base, NULL_TREE);
|
||||
count = build3 (COMPONENT_REF, TREE_TYPE (f_count), valist, f_count,
|
||||
NULL_TREE);
|
||||
|
||||
must_stack = targetm.calls.must_pass_in_stack (TYPE_MODE (type), type);
|
||||
size_tree = round_up (size_in_bytes (type), UNITS_PER_WORD);
|
||||
|
@ -1421,23 +1421,23 @@ xstormy16_expand_builtin_va_arg (tree valist, tree type, tree *pre_p,
|
|||
tree r;
|
||||
|
||||
t = fold_convert (TREE_TYPE (count), size_tree);
|
||||
t = build (PLUS_EXPR, TREE_TYPE (count), count_tmp, t);
|
||||
t = build2 (PLUS_EXPR, TREE_TYPE (count), count_tmp, t);
|
||||
r = fold_convert (TREE_TYPE (count), size_int (size_of_reg_args));
|
||||
t = build (GT_EXPR, boolean_type_node, t, r);
|
||||
t = build (COND_EXPR, void_type_node, t,
|
||||
build (GOTO_EXPR, void_type_node, lab_fromstack),
|
||||
NULL);
|
||||
t = build2 (GT_EXPR, boolean_type_node, t, r);
|
||||
t = build3 (COND_EXPR, void_type_node, t,
|
||||
build1 (GOTO_EXPR, void_type_node, lab_fromstack),
|
||||
NULL_TREE);
|
||||
gimplify_and_add (t, pre_p);
|
||||
|
||||
t = fold_convert (ptr_type_node, count_tmp);
|
||||
t = build (PLUS_EXPR, ptr_type_node, base, t);
|
||||
t = build (MODIFY_EXPR, void_type_node, addr, t);
|
||||
t = build2 (PLUS_EXPR, ptr_type_node, base, t);
|
||||
t = build2 (MODIFY_EXPR, void_type_node, addr, t);
|
||||
gimplify_and_add (t, pre_p);
|
||||
|
||||
t = build (GOTO_EXPR, void_type_node, lab_gotaddr);
|
||||
t = build1 (GOTO_EXPR, void_type_node, lab_gotaddr);
|
||||
gimplify_and_add (t, pre_p);
|
||||
|
||||
t = build (LABEL_EXPR, void_type_node, lab_fromstack);
|
||||
t = build1 (LABEL_EXPR, void_type_node, lab_fromstack);
|
||||
gimplify_and_add (t, pre_p);
|
||||
}
|
||||
|
||||
|
@ -1450,31 +1450,31 @@ xstormy16_expand_builtin_va_arg (tree valist, tree type, tree *pre_p,
|
|||
tree r, u;
|
||||
|
||||
r = size_int (NUM_ARGUMENT_REGISTERS * UNITS_PER_WORD);
|
||||
u = build (MODIFY_EXPR, void_type_node, count_tmp, r);
|
||||
u = build2 (MODIFY_EXPR, void_type_node, count_tmp, r);
|
||||
|
||||
t = fold_convert (TREE_TYPE (count), r);
|
||||
t = build (GE_EXPR, boolean_type_node, count_tmp, t);
|
||||
t = build (COND_EXPR, void_type_node, t, NULL, u);
|
||||
t = build2 (GE_EXPR, boolean_type_node, count_tmp, t);
|
||||
t = build3 (COND_EXPR, void_type_node, t, NULL_TREE, u);
|
||||
gimplify_and_add (t, pre_p);
|
||||
}
|
||||
|
||||
t = size_int (NUM_ARGUMENT_REGISTERS * UNITS_PER_WORD
|
||||
- INCOMING_FRAME_SP_OFFSET);
|
||||
t = fold_convert (TREE_TYPE (count), t);
|
||||
t = build (MINUS_EXPR, TREE_TYPE (count), count_tmp, t);
|
||||
t = build (PLUS_EXPR, TREE_TYPE (count), t,
|
||||
fold_convert (TREE_TYPE (count), size_tree));
|
||||
t = build2 (MINUS_EXPR, TREE_TYPE (count), count_tmp, t);
|
||||
t = build2 (PLUS_EXPR, TREE_TYPE (count), t,
|
||||
fold_convert (TREE_TYPE (count), size_tree));
|
||||
t = fold_convert (TREE_TYPE (base), fold (t));
|
||||
t = build (MINUS_EXPR, TREE_TYPE (base), base, t);
|
||||
t = build (MODIFY_EXPR, void_type_node, addr, t);
|
||||
t = build2 (MINUS_EXPR, TREE_TYPE (base), base, t);
|
||||
t = build2 (MODIFY_EXPR, void_type_node, addr, t);
|
||||
gimplify_and_add (t, pre_p);
|
||||
|
||||
t = build (LABEL_EXPR, void_type_node, lab_gotaddr);
|
||||
t = build1 (LABEL_EXPR, void_type_node, lab_gotaddr);
|
||||
gimplify_and_add (t, pre_p);
|
||||
|
||||
t = fold_convert (TREE_TYPE (count), size_tree);
|
||||
t = build (PLUS_EXPR, TREE_TYPE (count), count_tmp, t);
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (count), count, t);
|
||||
t = build2 (PLUS_EXPR, TREE_TYPE (count), count_tmp, t);
|
||||
t = build2 (MODIFY_EXPR, TREE_TYPE (count), count, t);
|
||||
gimplify_and_add (t, pre_p);
|
||||
|
||||
addr = fold_convert (build_pointer_type (type), addr);
|
||||
|
|
|
@ -2098,21 +2098,21 @@ xtensa_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED)
|
|||
f_reg = TREE_CHAIN (f_stk);
|
||||
f_ndx = TREE_CHAIN (f_reg);
|
||||
|
||||
stk = build (COMPONENT_REF, TREE_TYPE (f_stk), valist, f_stk, NULL_TREE);
|
||||
reg = build (COMPONENT_REF, TREE_TYPE (f_reg), valist, f_reg, NULL_TREE);
|
||||
ndx = build (COMPONENT_REF, TREE_TYPE (f_ndx), valist, f_ndx, NULL_TREE);
|
||||
stk = build3 (COMPONENT_REF, TREE_TYPE (f_stk), valist, f_stk, NULL_TREE);
|
||||
reg = build3 (COMPONENT_REF, TREE_TYPE (f_reg), valist, f_reg, NULL_TREE);
|
||||
ndx = build3 (COMPONENT_REF, TREE_TYPE (f_ndx), valist, f_ndx, NULL_TREE);
|
||||
|
||||
/* Call __builtin_saveregs; save the result in __va_reg */
|
||||
u = make_tree (ptr_type_node, expand_builtin_saveregs ());
|
||||
t = build (MODIFY_EXPR, ptr_type_node, reg, u);
|
||||
t = build2 (MODIFY_EXPR, ptr_type_node, reg, u);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
||||
/* Set the __va_stk member to ($arg_ptr - 32). */
|
||||
u = make_tree (ptr_type_node, virtual_incoming_args_rtx);
|
||||
u = fold (build (PLUS_EXPR, ptr_type_node, u,
|
||||
build_int_cst (NULL_TREE, -32)));
|
||||
t = build (MODIFY_EXPR, ptr_type_node, stk, u);
|
||||
u = fold_build2 (PLUS_EXPR, ptr_type_node, u,
|
||||
build_int_cst (NULL_TREE, -32));
|
||||
t = build2 (MODIFY_EXPR, ptr_type_node, stk, u);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
||||
|
@ -2122,7 +2122,7 @@ xtensa_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED)
|
|||
if (arg_words >= MAX_ARGS_IN_REGISTERS)
|
||||
arg_words += 2;
|
||||
u = build_int_cst (NULL_TREE, arg_words * UNITS_PER_WORD);
|
||||
t = build (MODIFY_EXPR, integer_type_node, ndx, u);
|
||||
t = build2 (MODIFY_EXPR, integer_type_node, ndx, u);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
@ -2158,16 +2158,16 @@ xtensa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p,
|
|||
pre_p, NULL);
|
||||
imag_part = get_initialized_tmp_var (imag_part, pre_p, NULL);
|
||||
|
||||
return build (COMPLEX_EXPR, type, real_part, imag_part);
|
||||
return build2 (COMPLEX_EXPR, type, real_part, imag_part);
|
||||
}
|
||||
|
||||
f_stk = TYPE_FIELDS (va_list_type_node);
|
||||
f_reg = TREE_CHAIN (f_stk);
|
||||
f_ndx = TREE_CHAIN (f_reg);
|
||||
|
||||
stk = build (COMPONENT_REF, TREE_TYPE (f_stk), valist, f_stk, NULL_TREE);
|
||||
reg = build (COMPONENT_REF, TREE_TYPE (f_reg), valist, f_reg, NULL_TREE);
|
||||
ndx = build (COMPONENT_REF, TREE_TYPE (f_ndx), valist, f_ndx, NULL_TREE);
|
||||
stk = build3 (COMPONENT_REF, TREE_TYPE (f_stk), valist, f_stk, NULL_TREE);
|
||||
reg = build3 (COMPONENT_REF, TREE_TYPE (f_reg), valist, f_reg, NULL_TREE);
|
||||
ndx = build3 (COMPONENT_REF, TREE_TYPE (f_ndx), valist, f_ndx, NULL_TREE);
|
||||
|
||||
type_size = size_in_bytes (type);
|
||||
va_size = round_up (type_size, UNITS_PER_WORD);
|
||||
|
@ -2187,11 +2187,11 @@ xtensa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p,
|
|||
{
|
||||
int align = TYPE_ALIGN (type) / BITS_PER_UNIT;
|
||||
|
||||
t = build (PLUS_EXPR, integer_type_node, orig_ndx,
|
||||
build_int_cst (NULL_TREE, align - 1));
|
||||
t = build (BIT_AND_EXPR, integer_type_node, t,
|
||||
build_int_cst (NULL_TREE, -align));
|
||||
t = build (MODIFY_EXPR, integer_type_node, orig_ndx, t);
|
||||
t = build2 (PLUS_EXPR, integer_type_node, orig_ndx,
|
||||
build_int_cst (NULL_TREE, align - 1));
|
||||
t = build2 (BIT_AND_EXPR, integer_type_node, t,
|
||||
build_int_cst (NULL_TREE, -align));
|
||||
t = build2 (MODIFY_EXPR, integer_type_node, orig_ndx, t);
|
||||
gimplify_and_add (t, pre_p);
|
||||
}
|
||||
|
||||
|
@ -2201,8 +2201,8 @@ xtensa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p,
|
|||
(AP).__va_ndx = orig_ndx + __va_size (TYPE); */
|
||||
|
||||
t = fold_convert (integer_type_node, va_size);
|
||||
t = build (PLUS_EXPR, integer_type_node, orig_ndx, t);
|
||||
t = build (MODIFY_EXPR, integer_type_node, ndx, t);
|
||||
t = build2 (PLUS_EXPR, integer_type_node, orig_ndx, t);
|
||||
t = build2 (MODIFY_EXPR, integer_type_node, ndx, t);
|
||||
gimplify_and_add (t, pre_p);
|
||||
|
||||
|
||||
|
@ -2221,19 +2221,19 @@ xtensa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p,
|
|||
lab_over = create_artificial_label ();
|
||||
|
||||
t = build_int_cst (NULL_TREE, MAX_ARGS_IN_REGISTERS * UNITS_PER_WORD);
|
||||
t = build (GT_EXPR, boolean_type_node, ndx, t);
|
||||
t = build (COND_EXPR, void_type_node, t,
|
||||
build (GOTO_EXPR, void_type_node, lab_false),
|
||||
NULL);
|
||||
t = build2 (GT_EXPR, boolean_type_node, ndx, t);
|
||||
t = build3 (COND_EXPR, void_type_node, t,
|
||||
build1 (GOTO_EXPR, void_type_node, lab_false),
|
||||
NULL_TREE);
|
||||
gimplify_and_add (t, pre_p);
|
||||
|
||||
t = build (MODIFY_EXPR, void_type_node, array, reg);
|
||||
t = build2 (MODIFY_EXPR, void_type_node, array, reg);
|
||||
gimplify_and_add (t, pre_p);
|
||||
|
||||
t = build (GOTO_EXPR, void_type_node, lab_over);
|
||||
t = build1 (GOTO_EXPR, void_type_node, lab_over);
|
||||
gimplify_and_add (t, pre_p);
|
||||
|
||||
t = build (LABEL_EXPR, void_type_node, lab_false);
|
||||
t = build1 (LABEL_EXPR, void_type_node, lab_false);
|
||||
gimplify_and_add (t, pre_p);
|
||||
}
|
||||
|
||||
|
@ -2251,26 +2251,26 @@ xtensa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p,
|
|||
lab_false2 = create_artificial_label ();
|
||||
|
||||
t = build_int_cst (NULL_TREE, MAX_ARGS_IN_REGISTERS * UNITS_PER_WORD);
|
||||
t = build (GT_EXPR, boolean_type_node, orig_ndx, t);
|
||||
t = build (COND_EXPR, void_type_node, t,
|
||||
build (GOTO_EXPR, void_type_node, lab_false2),
|
||||
NULL);
|
||||
t = build2 (GT_EXPR, boolean_type_node, orig_ndx, t);
|
||||
t = build3 (COND_EXPR, void_type_node, t,
|
||||
build1 (GOTO_EXPR, void_type_node, lab_false2),
|
||||
NULL_TREE);
|
||||
gimplify_and_add (t, pre_p);
|
||||
|
||||
t = size_binop (PLUS_EXPR, va_size, size_int (32));
|
||||
t = fold_convert (integer_type_node, t);
|
||||
t = build (MODIFY_EXPR, integer_type_node, ndx, t);
|
||||
t = build2 (MODIFY_EXPR, integer_type_node, ndx, t);
|
||||
gimplify_and_add (t, pre_p);
|
||||
|
||||
t = build (LABEL_EXPR, void_type_node, lab_false2);
|
||||
t = build1 (LABEL_EXPR, void_type_node, lab_false2);
|
||||
gimplify_and_add (t, pre_p);
|
||||
|
||||
t = build (MODIFY_EXPR, void_type_node, array, stk);
|
||||
t = build2 (MODIFY_EXPR, void_type_node, array, stk);
|
||||
gimplify_and_add (t, pre_p);
|
||||
|
||||
if (lab_over)
|
||||
{
|
||||
t = build (LABEL_EXPR, void_type_node, lab_over);
|
||||
t = build1 (LABEL_EXPR, void_type_node, lab_over);
|
||||
gimplify_and_add (t, pre_p);
|
||||
}
|
||||
|
||||
|
@ -2289,17 +2289,17 @@ xtensa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p,
|
|||
if (BYTES_BIG_ENDIAN && TREE_CODE (type_size) == INTEGER_CST)
|
||||
{
|
||||
t = size_int (PARM_BOUNDARY / BITS_PER_UNIT);
|
||||
t = fold (build (GE_EXPR, boolean_type_node, type_size, t));
|
||||
t = fold (build (COND_EXPR, sizetype, t, va_size, type_size));
|
||||
t = fold_build2 (GE_EXPR, boolean_type_node, type_size, t);
|
||||
t = fold_build3 (COND_EXPR, sizetype, t, va_size, type_size);
|
||||
size = t;
|
||||
}
|
||||
else
|
||||
size = va_size;
|
||||
|
||||
t = fold_convert (ptr_type_node, ndx);
|
||||
addr = build (PLUS_EXPR, ptr_type_node, array, t);
|
||||
addr = build2 (PLUS_EXPR, ptr_type_node, array, t);
|
||||
t = fold_convert (ptr_type_node, size);
|
||||
addr = build (MINUS_EXPR, ptr_type_node, addr, t);
|
||||
addr = build2 (MINUS_EXPR, ptr_type_node, addr, t);
|
||||
|
||||
addr = fold_convert (build_pointer_type (type), addr);
|
||||
if (indirect)
|
||||
|
|
Loading…
Reference in New Issue