aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2005-06-18 12:56:42 +0100
committerJoseph Myers <jsm28@gcc.gnu.org>2005-06-18 12:56:42 +0100
commit6d409ca872d76ffce2b945153486992787e74250 (patch)
treef05c8531caa36a1bfb5ac10864d6e0c8e637dd7d /gcc/config
parent189ed82c09bb8bfc5243bd0f60f6bdca4b4daf9a (diff)
downloadgcc-6d409ca872d76ffce2b945153486992787e74250.zip
gcc-6d409ca872d76ffce2b945153486992787e74250.tar.gz
gcc-6d409ca872d76ffce2b945153486992787e74250.tar.bz2
ia64.c (ia64_function_arg): Set up a PARALLEL for a big-endian unnamed __float80 value.
* config/ia64/ia64.c (ia64_function_arg): Set up a PARALLEL for a big-endian unnamed __float80 value. testsuite: * gcc.target/ia64/float80-varargs-1.c: New test. From-SVN: r101153
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/ia64/ia64.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index 8d20992..0475c94 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -3822,6 +3822,19 @@ ia64_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode, tree type,
gen_rtx_EXPR_LIST (VOIDmode,
gen_rtx_REG (DImode, basereg + cum->words + offset),
const0_rtx)));
+ /* Similarly, an anonymous XFmode value must be split into two
+ registers and padded appropriately. */
+ else if (BYTES_BIG_ENDIAN && mode == XFmode)
+ {
+ rtx loc[2];
+ loc[0] = gen_rtx_EXPR_LIST (VOIDmode,
+ gen_rtx_REG (DImode, basereg + cum->words + offset),
+ const0_rtx);
+ loc[1] = gen_rtx_EXPR_LIST (VOIDmode,
+ gen_rtx_REG (DImode, basereg + cum->words + offset + 1),
+ GEN_INT (UNITS_PER_WORD));
+ return gen_rtx_PARALLEL (mode, gen_rtvec_v (2, loc));
+ }
else
return gen_rtx_REG (mode, basereg + cum->words + offset);
}