diff options
author | Segher Boessenkool <segher@kernel.crashing.org> | 2018-10-05 12:52:33 +0200 |
---|---|---|
committer | Segher Boessenkool <segher@gcc.gnu.org> | 2018-10-05 12:52:33 +0200 |
commit | 49022a8b837e77020b0e03ce8b9c70e67bd59872 (patch) | |
tree | 15fd212e7641714976b9b20a7af8bd75e1cce615 /gcc | |
parent | 3665f77c7f63737252fea0e153a6426aa1241a7a (diff) | |
download | gcc-49022a8b837e77020b0e03ce8b9c70e67bd59872.zip gcc-49022a8b837e77020b0e03ce8b9c70e67bd59872.tar.gz gcc-49022a8b837e77020b0e03ce8b9c70e67bd59872.tar.bz2 |
rs6000: Various fixes for the new fpscr builtins (PR87509)
With these fixes all testcases test clean for me, both on
powerpc64-linux {-m32,-m64} and on powerpc64le-linux, with all
relevant -mcpu= settings.
PR target/87509
* config/rs6000/rs6000-builtin.def (RS6000_BUILTIN_SET_FPSCR_DRN): Use
RS6000_BTM_DFP.
* config/rs6000/rs6000.md (rs6000_set_fpscr_rn): Require the operand
to be DImode. When using mffscrn, force the operand to a register.
gcc/testsuite/
PR target/87509
* gcc.target/powerpc/test_fpscr_drn_builtin.c: Use hard_dfp instead
of dfp_hw. Don't include <altivec.h>.
* gcc.target/powerpc/test_fpscr_drn_builtin_error.c: Ditto. Require
lp64.
* gcc.target/powerpc/test_fpscr_rn_builtin.c: Don't include <altivec.h>.
* gcc.target/powerpc/test_fpscr_rn_builtin_error.c: Ditto.
* gcc.target/powerpc/test_mffsl.c: Ditto.
From-SVN: r264863
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000-builtin.def | 2 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin_error.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin_error.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/test_mffsl.c | 2 |
9 files changed, 26 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9504cfe..e5575fe 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2018-10-05 Segher Boessenkool <segher@kernel.crashing.org> + + PR target/87509 + * config/rs6000/rs6000-builtin.def (RS6000_BUILTIN_SET_FPSCR_DRN): Use + RS6000_BTM_DFP. + * config/rs6000/rs6000.md (rs6000_set_fpscr_rn): Require the operand + to be DImode. When using mffscrn, force the operand to a register. + 2018-10-04 Uros Bizjak <ubizjak@gmail.com> * config/i386/i386.md (*fop_<X87MODEF:mode>_2_i387): Macroize insn diff --git a/gcc/config/rs6000/rs6000-builtin.def b/gcc/config/rs6000/rs6000-builtin.def index 976c36b..ec0528a 100644 --- a/gcc/config/rs6000/rs6000-builtin.def +++ b/gcc/config/rs6000/rs6000-builtin.def @@ -2510,7 +2510,7 @@ RS6000_BUILTIN_X (RS6000_BUILTIN_SET_FPSCR_RN, "__builtin_set_fpscr_rn", CODE_FOR_rs6000_set_fpscr_rn) RS6000_BUILTIN_X (RS6000_BUILTIN_SET_FPSCR_DRN, "__builtin_set_fpscr_drn", - RS6000_BTM_ALWAYS, + RS6000_BTM_DFP, RS6000_BTC_MISC | RS6000_BTM_64BIT | RS6000_BTC_UNARY | RS6000_BTC_VOID, CODE_FOR_rs6000_set_fpscr_drn) diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 31a74ca..5db3e57 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -5848,7 +5848,7 @@ [(set_attr "type" "fp")]) (define_expand "rs6000_set_fpscr_rn" - [(match_operand 0 "reg_or_cint_operand")] + [(match_operand:DI 0 "reg_or_cint_operand")] "TARGET_HARD_FLOAT" { rtx tmp_df = gen_reg_rtx (DFmode); @@ -5857,9 +5857,8 @@ new rounding mode bits from operands[0][62:63] into FPSCR[62:63]. */ if (TARGET_P9_MISC) { - rtx src_df = gen_reg_rtx (DImode); - - src_df = simplify_gen_subreg (DFmode, operands[0], DImode, 0); + rtx src_df = force_reg (DImode, operands[0]); + src_df = simplify_gen_subreg (DFmode, src_df, DImode, 0); emit_insn (gen_rs6000_mffscrn (tmp_df, src_df)); DONE; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1e0029b..d621194 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2018-10-05 Segher Boessenkool <segher@kernel.crashing.org> + + PR target/87509 + * gcc.target/powerpc/test_fpscr_drn_builtin.c: Use hard_dfp instead + of dfp_hw. Don't include <altivec.h>. + * gcc.target/powerpc/test_fpscr_drn_builtin_error.c: Ditto. Require + lp64. + * gcc.target/powerpc/test_fpscr_rn_builtin.c: Don't include <altivec.h>. + * gcc.target/powerpc/test_fpscr_rn_builtin_error.c: Ditto. + * gcc.target/powerpc/test_mffsl.c: Ditto. + 2018-10-04 Vinay Kumar <vinay.kumar@blackfigtech.com> * c-c++-common/Wprio-ctor-dtor.c: New test. diff --git a/gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin.c b/gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin.c index 685bf97..00b11f8 100644 --- a/gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin.c +++ b/gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin.c @@ -1,9 +1,7 @@ /* { dg-do run { target { powerpc*-*-* && lp64 } } } */ -/* { dg-require-effective-target dfp_hw } */ +/* { dg-require-effective-target hard_dfp } */ /* { dg-options "-O2 -std=c99" } */ -#include <altivec.h> - #ifdef DEBUG #include <stdio.h> #endif diff --git a/gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin_error.c b/gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin_error.c index 58453f0..028ab0b 100644 --- a/gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin_error.c +++ b/gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin_error.c @@ -1,9 +1,7 @@ -/* { dg-do compile { target powerpc*-*-* } } */ -/* { dg-require-effective-target dfp_hw } */ +/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ +/* { dg-require-effective-target hard_dfp } */ /* { dg-options "-O2 -std=c99" } */ -#include <altivec.h> - int main () { diff --git a/gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin.c b/gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin.c index be05dcf..0d0d3f0 100644 --- a/gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin.c +++ b/gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin.c @@ -1,8 +1,6 @@ /* { dg-do run { target { powerpc*-*-* } } } */ /* { dg-options "-O2 -std=c99" } */ -#include <altivec.h> - #ifdef DEBUG #include <stdio.h> #endif diff --git a/gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin_error.c b/gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin_error.c index a529ce6..aea6509 100644 --- a/gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin_error.c +++ b/gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin_error.c @@ -1,8 +1,6 @@ /* { dg-do compile { target powerpc*-*-* } } */ /* { dg-options "-O2 -std=c99" } */ -#include <altivec.h> - int main () { diff --git a/gcc/testsuite/gcc.target/powerpc/test_mffsl.c b/gcc/testsuite/gcc.target/powerpc/test_mffsl.c index 278dfbf..93a8ec2 100644 --- a/gcc/testsuite/gcc.target/powerpc/test_mffsl.c +++ b/gcc/testsuite/gcc.target/powerpc/test_mffsl.c @@ -1,8 +1,6 @@ /* { dg-do run { target { powerpc*-*-* } } } */ /* { dg-options "-O2 -std=c99" } */ -#include <altivec.h> - #ifdef DEBUG #include <stdio.h> #endif |