Fix MIPS o32 calling convention for MSA and FP vector types

gcc/
	* config/mips/mips.c (mips_return_in_memory): Force FP
	vector types to be returned in memory for o32 ABI.

gcc/testsuite/

	* gcc.target/mips/msa-fp-cc.c: New test.

From-SVN: r245666
This commit is contained in:
Sameera Deshpande 2017-02-22 23:09:43 +00:00 committed by Matthew Fortune
parent 349c635163
commit 0a864a97e9
4 changed files with 35 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2017-02-22 Sameera Deshpande <sameera.deshpande@imgtec.com>
* config/mips/mips.c (mips_return_in_memory): Force FP
vector types to be returned in memory for o32 ABI.
2017-02-22 Jakub Jelinek <jakub@redhat.com>
* dwarf2out.c (gen_variable_die): For -gdwarf-5, use DW_TAG_variable

View File

@ -6472,9 +6472,13 @@ mips_function_value_regno_p (const unsigned int regno)
static bool
mips_return_in_memory (const_tree type, const_tree fndecl ATTRIBUTE_UNUSED)
{
return (TARGET_OLDABI
? TYPE_MODE (type) == BLKmode
: !IN_RANGE (int_size_in_bytes (type), 0, 2 * UNITS_PER_WORD));
if (TARGET_OLDABI)
/* Ensure that any floating point vector types are returned via memory
even if they are supported through a vector mode with some ASEs. */
return (VECTOR_FLOAT_TYPE_P (type)
|| TYPE_MODE (type) == BLKmode);
return (!IN_RANGE (int_size_in_bytes (type), 0, 2 * UNITS_PER_WORD));
}
/* Implement TARGET_SETUP_INCOMING_VARARGS. */

View File

@ -1,3 +1,7 @@
2017-02-22 Sameera Deshpande <sameera.deshpande@imgtec.com>
* gcc.target/mips/msa-fp-cc.c: New test.
2017-02-22 Jakub Jelinek <jakub@redhat.com>
PR c++/79664

View File

@ -0,0 +1,19 @@
/* { dg-do compile } */
/* { dg-options "-mabi=32 -mfp64 -mhard-float -mmsa" } */
typedef float v4f32 __attribute__((vector_size(16)));
typedef double v2f64 __attribute__((vector_size(16)));
v4f32
fcmpOeqVector4 (v4f32 a, v4f32 b)
{
return a + b;
}
v2f64
fcmpOeqVector2 (v2f64 a, v2f64 b)
{
return a + b;
}
/* { dg-final { scan-assembler-not "copy_s" } } */
/* { dg-final { scan-assembler-not "insert" } } */