On most hardware, FCSR.ABS2008 is set the value same with FCSR.NAN2008. Let's use this behaivor by default in GCC, aka gcc -mnan=2008 -c fabs.c will imply `-mabs=2008`.
And of course, `gcc -mnan=2008 -mabs=legacy` can continue workable like previous. gcc/ChangeLog: * config/mips/mips.cc(mips_option_override): Set mips_abs to 2008, if mips_abs is default and mips_nan is 2008. * testsuite/gcc.target/mips/fabs-nan2008.c: New test. * testsuite/gcc.target/mips/fabsf-nan2008.c: New test. --- gcc/config/mips/mips.cc | 2 ++ gcc/testsuite/gcc.target/mips/fabs-nan2008.c | 10 ++++++++++ gcc/testsuite/gcc.target/mips/fabsf-nan2008.c | 10 ++++++++++ 3 files changed, 22 insertions(+) create mode 100644 gcc/testsuite/gcc.target/mips/fabs-nan2008.c create mode 100644 gcc/testsuite/gcc.target/mips/fabsf-nan2008.c diff --git a/gcc/config/mips/mips.cc b/gcc/config/mips/mips.cc index f9861020902..7fd54503660 100644 --- a/gcc/config/mips/mips.cc +++ b/gcc/config/mips/mips.cc @@ -20549,6 +20549,8 @@ mips_option_override (void) /* Set NaN and ABS defaults. */ if (mips_nan == MIPS_IEEE_754_DEFAULT && !ISA_HAS_IEEE_754_LEGACY) mips_nan = MIPS_IEEE_754_2008; + if (mips_abs == MIPS_IEEE_754_DEFAULT && mips_nan == MIPS_IEEE_754_2008) + mips_abs = MIPS_IEEE_754_2008; if (mips_abs == MIPS_IEEE_754_DEFAULT && !ISA_HAS_IEEE_754_LEGACY) mips_abs = MIPS_IEEE_754_2008; diff --git a/gcc/testsuite/gcc.target/mips/fabs-nan2008.c b/gcc/testsuite/gcc.target/mips/fabs-nan2008.c new file mode 100644 index 00000000000..9e2719bbf36 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/fabs-nan2008.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-mnan=2008" } */ + +NOMIPS16 double +fabs_2008 (double d) +{ + return __builtin_fabs (d); +} + +/* { dg-final { scan-assembler "\tabs\\.d\t" } } */ diff --git a/gcc/testsuite/gcc.target/mips/fabsf-nan2008.c b/gcc/testsuite/gcc.target/mips/fabsf-nan2008.c new file mode 100644 index 00000000000..11c423429d6 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/fabsf-nan2008.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-mnan=2008" } */ + +NOMIPS16 float +fabsf_2008 (float f) +{ + return __builtin_fabsf (f); +} + +/* { dg-final { scan-assembler "\tabs\\.s\t" } } */ -- 2.39.2