aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSegher Boessenkool <segher@kernel.crashing.org>2018-10-05 12:52:33 +0200
committerSegher Boessenkool <segher@gcc.gnu.org>2018-10-05 12:52:33 +0200
commit49022a8b837e77020b0e03ce8b9c70e67bd59872 (patch)
tree15fd212e7641714976b9b20a7af8bd75e1cce615 /gcc
parent3665f77c7f63737252fea0e153a6426aa1241a7a (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/config/rs6000/rs6000-builtin.def2
-rw-r--r--gcc/config/rs6000/rs6000.md7
-rw-r--r--gcc/testsuite/ChangeLog11
-rw-r--r--gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin.c4
-rw-r--r--gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin_error.c6
-rw-r--r--gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin_error.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/test_mffsl.c2
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