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:
parent
349c635163
commit
0a864a97e9
|
@ -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
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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" } } */
|
Loading…
Reference in New Issue