Hi Catherine, I missed a couple of testsuite changes that are needed to deal with the fallout of fixing the ABI issues for floating point vectors. I had them in my tree but forgot to post. The ABI change for V2SF i.e. paired single is a bug fix as the behaviour was unintended and violates the goal of having FP64 a compatible ABI extension for o32. The probability of having code dependent on this corner case of the calling convention in the wild is exceptionally low so I see no significant risk still.
The tests for paired single just need a little encouragement to still produce the necessary instructions now that paired single is not returned in registers. Does it look OK to you? Thanks, Matthew gcc/testsuite/ * gcc.target/mips/mips-ps-type-2.c (move): Force generation of mov.ps. * gcc.target/mips/mips-ps-type.c (move): Likewise. (cond_move1): Simplify condition to force generation of mov[nz].ps. (cond_move2): Likewise. --- diff --git a/gcc/testsuite/gcc.target/mips/mips-ps-type-2.c b/gcc/testsuite/gcc.target/mips/mips-ps-type-2.c index fecc35b..ed5d6ee 100644 --- a/gcc/testsuite/gcc.target/mips/mips-ps-type-2.c +++ b/gcc/testsuite/gcc.target/mips/mips-ps-type-2.c @@ -32,6 +32,11 @@ NOMIPS16 v2sf init (float a, float b) /* Move between registers */ NOMIPS16 v2sf move (v2sf a) { + register v2sf b __asm__("$f0") = a; + register v2sf c __asm__("$f2"); + __asm__ __volatile__ ("" : "+f" (b)); + c = b; + __asm__ __volatile__ ("" : : "f" (c)); return a; } diff --git a/gcc/testsuite/gcc.target/mips/mips-ps-type.c b/gcc/testsuite/gcc.target/mips/mips-ps-type.c index d74d4b5..731649c 100644 --- a/gcc/testsuite/gcc.target/mips/mips-ps-type.c +++ b/gcc/testsuite/gcc.target/mips/mips-ps-type.c @@ -30,6 +30,11 @@ NOMIPS16 v2sf init (float a, float b) /* Move between registers */ NOMIPS16 v2sf move (v2sf a) { + register v2sf b __asm__("$f0") = a; + register v2sf c __asm__("$f2"); + __asm__ __volatile__ ("" : "+f" (b)); + c = b; + __asm__ __volatile__ ("" : : "f" (c)); return a; } @@ -96,7 +101,7 @@ NOMIPS16 v2sf nmsub (v2sf a, v2sf b, v2sf c) /* Conditional Move */ NOMIPS16 v2sf cond_move1 (v2sf a, v2sf b, long i) { - if (i > 0) + if (i != 0) return a; else return b; @@ -105,7 +110,7 @@ NOMIPS16 v2sf cond_move1 (v2sf a, v2sf b, long i) /* Conditional Move */ NOMIPS16 v2sf cond_move2 (v2sf a, v2sf b, int i) { - if (i > 0) + if (i != 0) return a; else return b; -- 2.2.1