Hi, I have submitted a patch to handle -frounding-math for C-SKY
Index: gcc/ChangeLog =================================================================== --- gcc/ChangeLog (revision 266023) +++ gcc/ChangeLog (working copy) @@ -1,3 +1,8 @@ +2018-11-11 Xianmiao Qu <xianmiao...@c-sky.com> + + * config/csky/csky.md (*fpuv2_nmulsf3_1, *fpuv2_nmuldf3_1): Handle + -frounding-math. + 2018-11-11 Sandra Loosemore <san...@codesourcery.com> PR c++/43105 Index: gcc/config/csky/csky_insn_fpu.md =================================================================== --- gcc/config/csky/csky_insn_fpu.md (revision 266023) +++ gcc/config/csky/csky_insn_fpu.md (working copy) @@ -131,7 +131,7 @@ [(set (match_operand:SF 0 "register_operand" "=v") (mult:SF (neg:SF (match_operand:SF 1 "register_operand" "%v")) (match_operand:SF 2 "register_operand" "v")))] - "CSKY_ISA_FEATURE (fpv2_sf)" + "CSKY_ISA_FEATURE (fpv2_sf) && !flag_rounding_math" "fnmuls\t%0, %1, %2") (define_insn "*fpuv2_nmulsf3_2" @@ -145,7 +145,7 @@ [(set (match_operand:DF 0 "register_operand" "=v") (mult:DF (neg:DF (match_operand:DF 1 "register_operand" "%v")) (match_operand:DF 2 "register_operand" "v")))] - "CSKY_ISA_FEATURE (fpv2_df)" + "CSKY_ISA_FEATURE (fpv2_df) && !flag_rounding_math" "fnmuld\t%0, %1, %2") (define_insn "*fpuv2_nmuldf3_2" Index: gcc/testsuite/ChangeLog =================================================================== --- gcc/testsuite/ChangeLog (revision 266023) +++ gcc/testsuite/ChangeLog (working copy) @@ -1,3 +1,10 @@ +2018-11-11 Xianmiao Qu <xianmiao...@c-sky.com> + + * gcc.target/csky/fnmul-1.c: New. + * gcc.target/csky/fnmul-2.c: New. + * gcc.target/csky/fnmul-3.c: New. + * gcc.target/csky/fnmul-4.c: New. + 2018-11-11 Uros Bizjak <ubiz...@gmail.com> PR target/87928 Index: gcc/testsuite/gcc.target/csky/fnmul-1.c =================================================================== --- gcc/testsuite/gcc.target/csky/fnmul-1.c (nonexistent) +++ gcc/testsuite/gcc.target/csky/fnmul-1.c (working copy) @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-mcpu=ck810f -mhard-float -O2" } */ + +double +fnmuld (double a, double b) +{ + /* { dg-final { scan-assembler "fnmuld" } } */ + return -a * b; +} + +float +fnmuls (float a, float b) +{ + /* { dg-final { scan-assembler "fnmuls" } } */ + return -a * b; +} + Index: gcc/testsuite/gcc.target/csky/fnmul-2.c =================================================================== --- gcc/testsuite/gcc.target/csky/fnmul-2.c (nonexistent) +++ gcc/testsuite/gcc.target/csky/fnmul-2.c (working copy) @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-mcpu=ck810f -mhard-float -O2 -frounding-math" } */ + +double +fnmuld (double a, double b) +{ + /* { dg-final { scan-assembler "fnegd" } } */ + /* { dg-final { scan-assembler "fmuld" } } */ + return -a * b; +} + +float +fnmuls (float a, float b) +{ + /* { dg-final { scan-assembler "fnegs" } } */ + /* { dg-final { scan-assembler "fmuls" } } */ + return -a * b; +} + Index: gcc/testsuite/gcc.target/csky/fnmul-3.c =================================================================== --- gcc/testsuite/gcc.target/csky/fnmul-3.c (nonexistent) +++ gcc/testsuite/gcc.target/csky/fnmul-3.c (working copy) @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-mcpu=ck810f -mhard-float -O2" } */ + +double +fnmuld (double a, double b) +{ + /* { dg-final { scan-assembler "fnmuld" } } */ + return -(a * b); +} + +float +fnmuls (float a, float b) +{ + /* { dg-final { scan-assembler "fnmuls" } } */ + return -(a * b); +} + Index: gcc/testsuite/gcc.target/csky/fnmul-4.c =================================================================== --- gcc/testsuite/gcc.target/csky/fnmul-4.c (nonexistent) +++ gcc/testsuite/gcc.target/csky/fnmul-4.c (working copy) @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-mcpu=ck810f -mhard-float -O2 -frounding-math" } */ + +double +fnmuld (double a, double b) +{ + /* { dg-final { scan-assembler "fnmuld" } } */ + return -(a * b); +} + +float +fnmuls (float a, float b) +{ + /* { dg-final { scan-assembler "fnmuls" } } */ + return -(a * b); +} +