From: Richard Sandiford Date: Wed, 22 Sep 2004 07:27:51 +0000 (+0000) Subject: mips.c (mips_function_value): For o32, o64, n32 and n64, use FPRs for scalar, complex... X-Git-Tag: releases/gcc-4.0.0~4733 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e1aeeae90eceed7dff8fb37292df258456f6fdd7;p=thirdparty%2Fgcc.git mips.c (mips_function_value): For o32, o64, n32 and n64, use FPRs for scalar, complex and vector types only. * config/mips/mips.c (mips_function_value): For o32, o64, n32 and n64, use FPRs for scalar, complex and vector types only. From-SVN: r87848 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0902a1dff3ba..dce40399ab27 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-09-22 Richard Sandiford + + * config/mips/mips.c (mips_function_value): For o32, o64, n32 and n64, + use FPRs for scalar, complex and vector types only. + 2004-09-21 Jeff Law * tree-ssa-dom.c (opt_stats): Move so that it lives just after diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index c564f4e7f186..a1de622dbbf6 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -6764,6 +6764,13 @@ mips_function_value (tree valtype, tree func ATTRIBUTE_UNUSED, mode = mode_for_size (size * BITS_PER_UNIT, MODE_INT, 0); } } + + /* For EABI, the class of return register depends entirely on MODE. + For example, "struct { some_type x; }" and "union { some_type x; }" + are returned in the same way as a bare "some_type" would be. + Other ABIs only use FPRs for scalar, complex or vector types. */ + if (mips_abi != ABI_EABI && !FLOAT_TYPE_P (valtype)) + return gen_rtx_REG (mode, GP_RETURN); } if ((GET_MODE_CLASS (mode) == MODE_FLOAT