Commit 1fcd592b by Richard Henderson Committed by Richard Henderson

alpha.c (alpha_va_arg): Manipulate the type size as a tree.

        * config/alpha/alpha.c (alpha_va_arg): Manipulate the type
        size as a tree.

From-SVN: r50857
parent e67e72c7
2002-03-15 Richard Henderson <rth@redhat.com>
* config/alpha/alpha.c (alpha_va_arg): Manipulate the type
size as a tree.
2002-03-15 Stephane Carrez <Stephane.Carrez@worldnet.fr> 2002-03-15 Stephane Carrez <Stephane.Carrez@worldnet.fr>
* config/m68hc11/m68hc11.md ("tstqi_1"): Try to use ldab instead of tst. * config/m68hc11/m68hc11.md ("tstqi_1"): Try to use ldab instead of tst.
......
...@@ -5767,9 +5767,8 @@ rtx ...@@ -5767,9 +5767,8 @@ rtx
alpha_va_arg (valist, type) alpha_va_arg (valist, type)
tree valist, type; tree valist, type;
{ {
HOST_WIDE_INT tsize;
rtx addr; rtx addr;
tree t; tree t, type_size, rounded_size;
tree offset_field, base_field, addr_tree, addend; tree offset_field, base_field, addr_tree, addend;
tree wide_type, wide_ofs; tree wide_type, wide_ofs;
int indirect = 0; int indirect = 0;
...@@ -5777,7 +5776,18 @@ alpha_va_arg (valist, type) ...@@ -5777,7 +5776,18 @@ alpha_va_arg (valist, type)
if (TARGET_ABI_OPEN_VMS || TARGET_ABI_UNICOSMK) if (TARGET_ABI_OPEN_VMS || TARGET_ABI_UNICOSMK)
return std_expand_builtin_va_arg (valist, type); return std_expand_builtin_va_arg (valist, type);
tsize = ((TREE_INT_CST_LOW (TYPE_SIZE (type)) / BITS_PER_UNIT + 7) / 8) * 8; if (type == error_mark_node
|| (type_size = TYPE_SIZE_UNIT (TYPE_MAIN_VARIANT (type))) == NULL
|| TREE_OVERFLOW (type_size))
rounded_size = size_zero_node;
else
rounded_size = fold (build (MULT_EXPR, sizetype,
fold (build (TRUNC_DIV_EXPR, sizetype,
fold (build (PLUS_EXPR, sizetype,
type_size,
size_int (7))),
size_int (8))),
size_int (8)));
base_field = TYPE_FIELDS (TREE_TYPE (valist)); base_field = TYPE_FIELDS (TREE_TYPE (valist));
offset_field = TREE_CHAIN (base_field); offset_field = TREE_CHAIN (base_field);
...@@ -5795,7 +5805,7 @@ alpha_va_arg (valist, type) ...@@ -5795,7 +5805,7 @@ alpha_va_arg (valist, type)
if (TYPE_MODE (type) == TFmode || TYPE_MODE (type) == TCmode) if (TYPE_MODE (type) == TFmode || TYPE_MODE (type) == TCmode)
{ {
indirect = 1; indirect = 1;
tsize = UNITS_PER_WORD; rounded_size = size_int (UNITS_PER_WORD);
} }
else if (FLOAT_TYPE_P (type)) else if (FLOAT_TYPE_P (type))
{ {
...@@ -5819,7 +5829,7 @@ alpha_va_arg (valist, type) ...@@ -5819,7 +5829,7 @@ alpha_va_arg (valist, type)
t = build (MODIFY_EXPR, TREE_TYPE (offset_field), offset_field, t = build (MODIFY_EXPR, TREE_TYPE (offset_field), offset_field,
build (PLUS_EXPR, TREE_TYPE (offset_field), build (PLUS_EXPR, TREE_TYPE (offset_field),
offset_field, build_int_2 (tsize, 0))); offset_field, rounded_size));
TREE_SIDE_EFFECTS (t) = 1; TREE_SIDE_EFFECTS (t) = 1;
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment