]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rs6000: Change mode and insn condition for scalar extract exp instruction
authorHaochen Gui <guihaoc@gcc.gnu.org>
Thu, 11 May 2023 02:07:01 +0000 (10:07 +0800)
committerHaochen Gui <guihaoc@gcc.gnu.org>
Fri, 12 May 2023 01:46:59 +0000 (09:46 +0800)
gcc/
* config/rs6000/rs6000-builtins.def
(__builtin_vsx_scalar_extract_exp): Set return type to const signed
int and set its bif-pattern to xsxexpdp_si, move it from power9-64
to power9 catalog.
* config/rs6000/vsx.md (xsxexpdp): Rename to ...
(xsxexpdp_<mode>): ..., set mode of operand 0 to GPR and remove
TARGET_64BIT check.
* doc/extend.texi (scalar_extract_exp): Remove 64-bit environment
requirement when it has a 64-bit argument.

gcc/testsuite/
* gcc.target/powerpc/bfp/scalar-extract-exp-0.c: Remove lp64 check.
* gcc.target/powerpc/bfp/scalar-extract-exp-1.c: Likewise.
* gcc.target/powerpc/bfp/scalar-extract-exp-2.c: Delete as the case
is invalid now.
* gcc.target/powerpc/bfp/scalar-extract-exp-6.c: Remove lp64 check.

gcc/config/rs6000/rs6000-builtins.def
gcc/config/rs6000/vsx.md
gcc/doc/extend.texi
gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-0.c
gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-1.c
gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c [deleted file]
gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-6.c

index 638d0bc72caf524a57349c2e84a5c29d01989f99..6240a6ae6c051e40b33871792a67e1b05c1826e4 100644 (file)
   const signed int __builtin_dtstsfi_ov_td (const int<6>, _Decimal128);
     TSTSFI_OV_TD dfptstsfi_unordered_td {}
 
+  const signed int  __builtin_vsx_scalar_extract_exp (double);
+    VSEEDP xsxexpdp_si {}
 
 [power9-64]
   void __builtin_altivec_xst_len_r (vsc, void *, long);
   pure vsc __builtin_vsx_lxvl (const void *, signed long);
     LXVL lxvl {}
 
-  const signed long __builtin_vsx_scalar_extract_exp (double);
-    VSEEDP xsxexpdp {}
-
   const signed long __builtin_vsx_scalar_extract_sig (double);
     VSESDP xsxsigdp {}
 
index 7d845df5c2d9aea94f7e37eaafa760ec73da9160..3f3f76e711b07e7f59b44f88644b24a4d41ce3b4 100644 (file)
   [(set_attr "type" "vecmove")])
 
 ;; VSX Scalar Extract Exponent Double-Precision
-(define_insn "xsxexpdp"
-  [(set (match_operand:DI 0 "register_operand" "=r")
-       (unspec:DI [(match_operand:DF 1 "vsx_register_operand" "wa")]
+(define_insn "xsxexpdp_<mode>"
+  [(set (match_operand:GPR 0 "register_operand" "=r")
+       (unspec:GPR [(match_operand:DF 1 "vsx_register_operand" "wa")]
         UNSPEC_VSX_SXEXPDP))]
-  "TARGET_P9_VECTOR && TARGET_64BIT"
+  "TARGET_P9_VECTOR"
   "xsxexpdp %0,%x1"
   [(set_attr "type" "integer")])
 
index e426a2eb7d81fed7ab838d931aaa71e3e56579df..69b21a75e6214f74ce1228ba15f8ec3eec7d73a9 100644 (file)
@@ -19739,7 +19739,10 @@ bool scalar_test_neg (double source);
 bool scalar_test_neg (__ieee128 source);
 @end smallexample
 
-The @code{scalar_extract_exp} and @code{scalar_extract_sig}
+The @code{scalar_extract_exp} with a 64-bit source argument
+function requires an environment supporting ISA 3.0 or later.
+The @code{scalar_extract_exp} with a 128-bit source argument
+and @code{scalar_extract_sig}
 functions require a 64-bit environment supporting ISA 3.0 or later.
 The @code{scalar_extract_exp} and @code{scalar_extract_sig} built-in
 functions return the significand and the biased exponent value
index 35bf1b240f3bab7773d8251e1d7cf3218730c628..d971833748e8fe99ae736cebeabb54d2ec6bef3c 100644 (file)
@@ -1,9 +1,7 @@
 /* { dg-do compile { target { powerpc*-*-* } } } */
-/* { dg-require-effective-target lp64 } */
 /* { dg-require-effective-target powerpc_p9vector_ok } */
 /* { dg-options "-mdejagnu-cpu=power9" } */
 
-/* This test should succeed only on 64-bit configurations.  */
 #include <altivec.h>
 
 unsigned int
index 9737762c1d43c88c23f575c39437ed2f965cf6be..1cb438f9b7014add4aa21bd3e45be25b75225fb8 100644 (file)
@@ -1,9 +1,7 @@
 /* { dg-do compile { target { powerpc*-*-* } } } */
-/* { dg-require-effective-target lp64 } */
 /* { dg-require-effective-target powerpc_p9vector_ok } */
 /* { dg-options "-mdejagnu-cpu=power8" } */
 
-/* This test should succeed only on 64-bit configurations.  */
 #include <altivec.h>
 
 unsigned int
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c
deleted file mode 100644 (file)
index 53b67c9..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/* { dg-do compile { target { powerpc*-*-* } } } */
-/* { dg-require-effective-target ilp32 } */
-/* { dg-require-effective-target powerpc_p9vector_ok } */
-/* { dg-options "-mdejagnu-cpu=power9" } */
-
-/* This test only runs on 32-bit configurations, where a compiler error
-   should be issued because this builtin is not available on 
-   32-bit configurations.  */
-
-#include <altivec.h>
-
-unsigned int
-get_exponent (double *p)
-{
-  double source = *p;
-
-  return scalar_extract_exp (source);  /* { dg-error "'__builtin_vsx_scalar_extract_exp' requires the" } */
-}
-
-
index b9dd7d61aaecf43fdd5760523a59098e25c6c837..e0581cd3dee769ab366e9bc6c3b0ce36c324bdde 100644 (file)
@@ -1,9 +1,7 @@
 /* { dg-do run { target { powerpc*-*-* } } } */
-/* { dg-require-effective-target lp64 } */
 /* { dg-require-effective-target p9vector_hw } */
 /* { dg-options "-mdejagnu-cpu=power9" } */
 
-/* This test should succeed only on 64-bit configurations.  */
 #include <altivec.h>
 #include <stdlib.h>