From: Sameera Deshpande Date: Wed, 22 Feb 2017 23:09:43 +0000 (+0000) Subject: Fix MIPS o32 calling convention for MSA and FP vector types X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0a864a97e9ab9b1bb6dbf13d6b471460c451be88;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f6168c93a54..9654753153e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-02-22 Sameera Deshpande + + * 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 * dwarf2out.c (gen_variable_die): For -gdwarf-5, use DW_TAG_variable diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 7974a16541d..4e13fbe1ec3 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -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. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9279d5842db..ea5e2515d86 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2017-02-22 Sameera Deshpande + + * gcc.target/mips/msa-fp-cc.c: New test. + 2017-02-22 Jakub Jelinek PR c++/79664 diff --git a/gcc/testsuite/gcc.target/mips/msa-fp-cc.c b/gcc/testsuite/gcc.target/mips/msa-fp-cc.c new file mode 100644 index 00000000000..3d293f30805 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/msa-fp-cc.c @@ -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" } } */