[PATCH] powerpc-linux argument passing for 128-bit types
Janis Johnson
janis187@us.ibm.com
Thu Apr 3 20:33:00 GMT 2008
Enabling type checking by default resulted in ICEs on powerpc-linux
for passing arguments of types _Decimal128, _Complex double, and
long double. This patch fixes that and allows lots of tests in the
GCC testsuite to pass again.
Bootstrapped and regression tested on powerpc64-linux with -m32/-m64.
OK for trunk?
2008-04-03 Janis Johnson <janis187@us.ibm.com>
PR target/35713
* config/rs6000/rs6000.c (rs6000_gimplify_va_arg): Use integer
constants of the appropriate size for runtime calculations.
Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c (revision 133794)
+++ gcc/config/rs6000/rs6000.c (working copy)
@@ -6832,7 +6832,8 @@ rs6000_gimplify_va_arg (tree valist, tre
else if (reg == fpr && TYPE_MODE (type) == TDmode)
{
regalign = 1;
- t = build2 (BIT_IOR_EXPR, TREE_TYPE (reg), reg, size_int (1));
+ t = build2 (BIT_IOR_EXPR, TREE_TYPE (reg), reg,
+ build_int_cst (TREE_TYPE (reg), 1));
u = build2 (MODIFY_EXPR, void_type_node, reg, t);
}
@@ -6870,7 +6871,8 @@ rs6000_gimplify_va_arg (tree valist, tre
{
/* Ensure that we don't find any more args in regs.
Alignment has taken care of for special cases. */
- t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (reg), reg, size_int (8));
+ t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (reg), reg,
+ build_int_cst (TREE_TYPE (reg), 8));
gimplify_and_add (t, pre_p);
}
}
More information about the Gcc-patches
mailing list