scalar-insert-exp-3.c: New test.
authorKelvin Nilsen <kelvin@gcc.gnu.org>
Mon, 23 Jan 2017 21:56:58 +0000 (21:56 +0000)
committerKelvin Nilsen <kelvin@gcc.gnu.org>
Mon, 23 Jan 2017 21:56:58 +0000 (21:56 +0000)
gcc/testsuite/ChangeLog:

2017-01-23  Kelvin Nilsen  <kelvin@gcc.gnu.org>

* gcc.target/powerpc/bfp/scalar-insert-exp-3.c: New test.
* gcc.target/powerpc/bfp/scalar-insert-exp-4.c: New test.
* gcc.target/powerpc/bfp/scalar-insert-exp-5.c: New test.
* gcc.target/powerpc/bfp/scalar-test-data-class-0.c: Adjust return
type of test function to reflect change in built-in function's
return type.
* gcc.target/powerpc/bfp/scalar-test-data-class-1.c: Likewise.
* gcc.target/powerpc/bfp/scalar-test-data-class-2.c: Likewise.
* gcc.target/powerpc/bfp/scalar-test-data-class-3.c: Likewise.
* gcc.target/powerpc/bfp/scalar-test-data-class-4.c: Adjust return
type and second argument type to reflect change in built-in
function's type signature.
* gcc.target/powerpc/bfp/scalar-test-data-class-5.c: Likewise.
* gcc.target/powerpc/bfp/scalar-test-data-class-6.c: Adjust return
type of test function to reflect change in built-in function's
return type.
* gcc.target/powerpc/bfp/scalar-test-data-class-7.c: Likewise.
* gcc.target/powerpc/bfp/scalar-test-neg-0.c: Likewise.
* gcc.target/powerpc/bfp/scalar-test-neg-1.c: Likewise.
* gcc.target/powerpc/bfp/scalar-test-neg-2.c: Likewise.
* gcc.target/powerpc/bfp/scalar-test-neg-3.c: Likewise.
* gcc.target/powerpc/bfp/vec-extract-exp-0.c: Likewise.
* gcc.target/powerpc/bfp/vec-extract-exp-1.c: Likewise.
* gcc.target/powerpc/bfp/vec-extract-exp-2.c: Likewise.
* gcc.target/powerpc/bfp/vec-extract-exp-3.c: Likewise.
* gcc.target/powerpc/bfp/vec-extract-sig-0.c: Likewise.
* gcc.target/powerpc/bfp/vec-extract-sig-1.c: Likewise.
* gcc.target/powerpc/bfp/vec-extract-sig-2.c: Likewise.
* gcc.target/powerpc/bfp/vec-extract-sig-3.c: Likewise.
* gcc.target/powerpc/bfp/vec-insert-exp-4.c: New test.
* gcc.target/powerpc/bfp/vec-insert-exp-5.c: New test.
* gcc.target/powerpc/bfp/vec-insert-exp-6.c: New test.
* gcc.target/powerpc/bfp/vec-insert-exp-7.c: New test.
* gcc.target/powerpc/bfp/vec-test-data-class-0.c: Adjust return
type of test function to reflect change in built-in function's
return type.
* gcc.target/powerpc/bfp/vec-test-data-class-1.c: Likewise.
* gcc.target/powerpc/bfp/vec-test-data-class-2.c: Likewise.
* gcc.target/powerpc/bfp/vec-test-data-class-3.c: Likewise.
* gcc.target/powerpc/bfp/vec-test-data-class-4.c: Likewise.
* gcc.target/powerpc/bfp/vec-test-data-class-5.c: Likewise.
* gcc.target/powerpc/bfp/vec-test-data-class-6.c: Adjust types of
test function's result and second argument to reflect change in
built-in function's type signature.
* gcc.target/powerpc/bfp/vec-test-data-class-7.c: Likewise.

gcc/ChangeLog:

2017-01-23  Kelvin Nilsen  <kelvin@gcc.gnu.org>

* config/rs6000/rs6000-builtin.def (VSIEDPF): Add scalar insert
exponent support with double type for first argument.
* config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Changed
type returned by __builtin_vec_extract_sig,
__builtin_vec_extract_sig_sp, and __builtin_vec_extract_sig_dp
functions from "vector int" to "vector unsigned int" or from
"vector long long int" to "vector unsigned long long int".
Changed type returned by __builtin_vec_extract_exp,
__builtin_vec_extract_exp_sp, and __builtin_vec_extract_exp_dp
functions from "vector int" to "vector unsigned int" or from
"vector long long int" to "vector unsigned long long int".
Changed return type of __builtin_vec_test_data_class,
__builtin_vec_test_data_class_sp, and
__builtin_vec_test_data_class_dp from "vector int" to
"vector bool int" or from "vector long long int" to "vector bool
long long int" and changed second argument type from "unsigned
int" to "int".  Added new overloaded function forms "vector float
__builtin_vec_insert_exp (vector float, vector unsigned int)" and
"vector float __builtin_vec_insert_exp_sp (vector float, vector
unsigned int)" and "vector double __builtin_vec_insert_exp (vector
double, vector unsigned long long int)" and "vector double
__builtin_vec_insert_exp_dp (vector double, vector unsigned long
long int)".  Changed return type of
__builtin_scalar_test_data_class and
__builtin_scalar_test_data_class_sp and
__builtin_scalar_test_data_class_dp from "unsigned int" to "bool
int" and changed second argument from "unsigned int" to "int".
Changed type returned by __builtin_scalar_test_neg,
__builtin_scalar_test_neg_sp, and __builtin_scalar_test_neg_dp
from "int" to "bool int".  Added new overloaded function form
"double __builtin_scalar_insert_exp (double, unsigned long long int)".
* config/rs6000/vsx.md (xsiexpdpf): New insn for scalar insert
exponent double-precision with floating point first argument.
* doc/extend.texi (PowerPC AltiVec Built-in Functions): Adjust
documentation of scalar_test_data_class, scalar_test_neg,
scalar_extract_sig, scalar_extract_exp, scalar_insert_exp,
vector_extract_exp, vec_extract_sig, vec_insert_exp, and
vec_test_data_class built-in functions to reflect refinements in
their type signatures.

From-SVN: r244834

41 files changed:
gcc/ChangeLog
gcc/config/rs6000/rs6000-builtin.def
gcc/config/rs6000/rs6000-c.c
gcc/config/rs6000/vsx.md
gcc/doc/extend.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-0.c
gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-1.c
gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-2.c
gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-3.c
gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-4.c
gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-5.c
gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-6.c
gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-7.c
gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-0.c
gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-1.c
gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-exp-0.c
gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-exp-1.c
gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-exp-2.c
gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-exp-3.c
gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-sig-0.c
gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-sig-1.c
gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-sig-2.c
gcc/testsuite/gcc.target/powerpc/bfp/vec-extract-sig-3.c
gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-6.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-7.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-0.c
gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-1.c
gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-2.c
gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-3.c
gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-4.c
gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-5.c
gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-6.c
gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-7.c

index 29d55742cc1d118290a4f088549cc3d0288c1976..468e012b14e14c51bf1ac338d720ee57645966b9 100644 (file)
@@ -1,3 +1,45 @@
+2017-01-23  Kelvin Nilsen  <kelvin@gcc.gnu.org>
+
+       * config/rs6000/rs6000-builtin.def (VSIEDPF): Add scalar insert
+       exponent support with double type for first argument.
+       * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Changed
+       type returned by __builtin_vec_extract_sig,
+       __builtin_vec_extract_sig_sp, and __builtin_vec_extract_sig_dp
+       functions from "vector int" to "vector unsigned int" or from
+       "vector long long int" to "vector unsigned long long int".
+       Changed type returned by __builtin_vec_extract_exp,
+       __builtin_vec_extract_exp_sp, and __builtin_vec_extract_exp_dp
+       functions from "vector int" to "vector unsigned int" or from
+       "vector long long int" to "vector unsigned long long int".
+       Changed return type of __builtin_vec_test_data_class,
+       __builtin_vec_test_data_class_sp, and
+       __builtin_vec_test_data_class_dp from "vector int" to
+       "vector bool int" or from "vector long long int" to "vector bool
+       long long int" and changed second argument type from "unsigned
+       int" to "int".  Added new overloaded function forms "vector float
+       __builtin_vec_insert_exp (vector float, vector unsigned int)" and
+       "vector float __builtin_vec_insert_exp_sp (vector float, vector
+       unsigned int)" and "vector double __builtin_vec_insert_exp (vector
+       double, vector unsigned long long int)" and "vector double
+       __builtin_vec_insert_exp_dp (vector double, vector unsigned long
+       long int)".  Changed return type of
+       __builtin_scalar_test_data_class and
+       __builtin_scalar_test_data_class_sp and
+       __builtin_scalar_test_data_class_dp from "unsigned int" to "bool
+       int" and changed second argument from "unsigned int" to "int".
+       Changed type returned by __builtin_scalar_test_neg,
+       __builtin_scalar_test_neg_sp, and __builtin_scalar_test_neg_dp
+       from "int" to "bool int".  Added new overloaded function form
+       "double __builtin_scalar_insert_exp (double, unsigned long long int)".
+       * config/rs6000/vsx.md (xsiexpdpf): New insn for scalar insert
+       exponent double-precision with floating point first argument.
+       * doc/extend.texi (PowerPC AltiVec Built-in Functions): Adjust
+       documentation of scalar_test_data_class, scalar_test_neg,
+       scalar_extract_sig, scalar_extract_exp, scalar_insert_exp,
+       vector_extract_exp, vec_extract_sig, vec_insert_exp, and
+       vec_test_data_class built-in functions to reflect refinements in
+       their type signatures.
+
 2017-01-23  Andreas Tobler  <andreast@gcc.gnu.org>
 
        * config/aarch64/aarch64.c (aarch64_elf_asm_constructor): Increase
index d17aeae754c4dc2d1f3247edc13bcfda8b20238a..61aed2ba98aaf66e0e4315e9be0b50932bc63ffd 100644 (file)
@@ -1964,6 +1964,7 @@ BU_P9V_VSX_1 (XXBRH_V8HI, "xxbrh_v8hi",   CONST,  p9_xxbrh_v8hi)
 
 /* 2 argument vsx scalar functions added in ISA 3.0 (power9).  */
 BU_P9V_64BIT_VSX_2 (VSIEDP,    "scalar_insert_exp",    CONST,  xsiexpdp)
+BU_P9V_64BIT_VSX_2 (VSIEDPF,   "scalar_insert_exp_dp", CONST,  xsiexpdpf)
 
 BU_P9V_VSX_2 (VSCEDPGT,        "scalar_cmp_exp_dp_gt", CONST,  xscmpexpdp_gt)
 BU_P9V_VSX_2 (VSCEDPLT,        "scalar_cmp_exp_dp_lt", CONST,  xscmpexpdp_lt)
index 8b87a0a441ae84dedeb6863fea3a541680671369..fd6da7e77e0144186d9ac209d1c1e6fb80a604c7 100644 (file)
@@ -4360,64 +4360,74 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
     RS6000_BTI_unsigned_V4SI, 0 },
 
   { P9V_BUILTIN_VEC_VES, P9V_BUILTIN_VESSP,
-    RS6000_BTI_V4SI, RS6000_BTI_V4SF, 0, 0 },
+    RS6000_BTI_unsigned_V4SI, RS6000_BTI_V4SF, 0, 0 },
   { P9V_BUILTIN_VEC_VES, P9V_BUILTIN_VESDP,
-    RS6000_BTI_V2DI, RS6000_BTI_V2DF, 0, 0 },
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_V2DF, 0, 0 },
 
   { P9V_BUILTIN_VEC_VESSP, P9V_BUILTIN_VESSP,
-    RS6000_BTI_V4SI, RS6000_BTI_V4SF, 0, 0 },
+    RS6000_BTI_unsigned_V4SI, RS6000_BTI_V4SF, 0, 0 },
   { P9V_BUILTIN_VEC_VESDP, P9V_BUILTIN_VESDP,
-    RS6000_BTI_V2DI, RS6000_BTI_V2DF, 0, 0 },
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_V2DF, 0, 0 },
 
   { P9V_BUILTIN_VEC_VEE, P9V_BUILTIN_VEESP,
-    RS6000_BTI_V4SI, RS6000_BTI_V4SF, 0, 0 },
+    RS6000_BTI_unsigned_V4SI, RS6000_BTI_V4SF, 0, 0 },
   { P9V_BUILTIN_VEC_VEE, P9V_BUILTIN_VEEDP,
-    RS6000_BTI_V2DI, RS6000_BTI_V2DF, 0, 0 },
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_V2DF, 0, 0 },
 
   { P9V_BUILTIN_VEC_VEESP, P9V_BUILTIN_VEESP,
-    RS6000_BTI_V4SI, RS6000_BTI_V4SF, 0, 0 },
+    RS6000_BTI_unsigned_V4SI, RS6000_BTI_V4SF, 0, 0 },
   { P9V_BUILTIN_VEC_VEEDP, P9V_BUILTIN_VEEDP,
-    RS6000_BTI_V2DI, RS6000_BTI_V2DF, 0, 0 },
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_V2DF, 0, 0 },
 
   { P9V_BUILTIN_VEC_VTDC, P9V_BUILTIN_VTDCSP,
-    RS6000_BTI_V4SI, RS6000_BTI_V4SF, RS6000_BTI_UINTSI, 0 },
+    RS6000_BTI_bool_V4SI, RS6000_BTI_V4SF, RS6000_BTI_INTSI, 0 },
   { P9V_BUILTIN_VEC_VTDC, P9V_BUILTIN_VTDCDP,
-    RS6000_BTI_V2DI, RS6000_BTI_V2DF, RS6000_BTI_UINTSI, 0 },
+    RS6000_BTI_bool_V2DI, RS6000_BTI_V2DF, RS6000_BTI_INTSI, 0 },
 
   { P9V_BUILTIN_VEC_VTDCSP, P9V_BUILTIN_VTDCSP,
-    RS6000_BTI_V4SI, RS6000_BTI_V4SF, RS6000_BTI_UINTSI, 0 },
+    RS6000_BTI_bool_V4SI, RS6000_BTI_V4SF, RS6000_BTI_INTSI, 0 },
   { P9V_BUILTIN_VEC_VTDCDP, P9V_BUILTIN_VTDCDP,
-    RS6000_BTI_V2DI, RS6000_BTI_V2DF, RS6000_BTI_UINTSI, 0 },
+    RS6000_BTI_bool_V2DI, RS6000_BTI_V2DF, RS6000_BTI_INTSI, 0 },
 
   { P9V_BUILTIN_VEC_VIE, P9V_BUILTIN_VIESP,
     RS6000_BTI_V4SF, RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
+  { P9V_BUILTIN_VEC_VIE, P9V_BUILTIN_VIESP,
+    RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_unsigned_V4SI, 0 },
+
   { P9V_BUILTIN_VEC_VIE, P9V_BUILTIN_VIEDP,
     RS6000_BTI_V2DF, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+  { P9V_BUILTIN_VEC_VIE, P9V_BUILTIN_VIEDP,
+    RS6000_BTI_V2DF, RS6000_BTI_V2DF, RS6000_BTI_unsigned_V2DI, 0 },
 
   { P9V_BUILTIN_VEC_VIESP, P9V_BUILTIN_VIESP,
     RS6000_BTI_V4SF, RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
+  { P9V_BUILTIN_VEC_VIESP, P9V_BUILTIN_VIESP,
+    RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_unsigned_V4SI, 0 },
+
   { P9V_BUILTIN_VEC_VIEDP, P9V_BUILTIN_VIEDP,
     RS6000_BTI_V2DF, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+  { P9V_BUILTIN_VEC_VIEDP, P9V_BUILTIN_VIEDP,
+    RS6000_BTI_V2DF, RS6000_BTI_V2DF, RS6000_BTI_unsigned_V2DI, 0 },
 
   { P9V_BUILTIN_VEC_VSTDC, P9V_BUILTIN_VSTDCSP,
-    RS6000_BTI_UINTSI, RS6000_BTI_float, RS6000_BTI_UINTSI, 0 },
+    RS6000_BTI_bool_int, RS6000_BTI_float, RS6000_BTI_INTSI, 0 },
   { P9V_BUILTIN_VEC_VSTDC, P9V_BUILTIN_VSTDCDP,
-    RS6000_BTI_UINTSI, RS6000_BTI_double, RS6000_BTI_UINTSI, 0 },
+    RS6000_BTI_bool_int, RS6000_BTI_double, RS6000_BTI_INTSI, 0 },
 
   { P9V_BUILTIN_VEC_VSTDCSP, P9V_BUILTIN_VSTDCSP,
-    RS6000_BTI_UINTSI, RS6000_BTI_float, RS6000_BTI_UINTSI, 0 },
+    RS6000_BTI_bool_int, RS6000_BTI_float, RS6000_BTI_INTSI, 0 },
   { P9V_BUILTIN_VEC_VSTDCDP, P9V_BUILTIN_VSTDCDP,
-    RS6000_BTI_UINTSI, RS6000_BTI_double, RS6000_BTI_UINTSI, 0 },
+    RS6000_BTI_bool_int, RS6000_BTI_double, RS6000_BTI_INTSI, 0 },
 
   { P9V_BUILTIN_VEC_VSTDCN, P9V_BUILTIN_VSTDCNSP,
-    RS6000_BTI_INTSI, RS6000_BTI_float, 0, 0 },
+    RS6000_BTI_bool_int, RS6000_BTI_float, 0, 0 },
   { P9V_BUILTIN_VEC_VSTDCN, P9V_BUILTIN_VSTDCNDP,
-    RS6000_BTI_INTSI, RS6000_BTI_double, 0, 0 },
+    RS6000_BTI_bool_int, RS6000_BTI_double, 0, 0 },
 
   { P9V_BUILTIN_VEC_VSTDCNSP, P9V_BUILTIN_VSTDCNSP,
-    RS6000_BTI_INTSI, RS6000_BTI_float, 0, 0 },
+    RS6000_BTI_bool_int, RS6000_BTI_float, 0, 0 },
   { P9V_BUILTIN_VEC_VSTDCNDP, P9V_BUILTIN_VSTDCNDP,
-    RS6000_BTI_INTSI, RS6000_BTI_double, 0, 0 },
+    RS6000_BTI_bool_int, RS6000_BTI_double, 0, 0 },
 
   { P9V_BUILTIN_VEC_VSEEDP, P9V_BUILTIN_VSEEDP,
     RS6000_BTI_UINTSI, RS6000_BTI_double, 0, 0 },
@@ -4427,6 +4437,8 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
 
   { P9V_BUILTIN_VEC_VSIEDP, P9V_BUILTIN_VSIEDP,
     RS6000_BTI_double, RS6000_BTI_UINTDI, RS6000_BTI_UINTDI, 0 },
+  { P9V_BUILTIN_VEC_VSIEDP, P9V_BUILTIN_VSIEDPF,
+    RS6000_BTI_double, RS6000_BTI_double, RS6000_BTI_UINTDI, 0 },
 
   { P9V_BUILTIN_VEC_VSCEDPGT, P9V_BUILTIN_VSCEDPGT,
     RS6000_BTI_INTSI, RS6000_BTI_double, RS6000_BTI_double, 0 },
index 52686881700b383ee30364008727c654ee18f511..28bbeb2a7d97d193db1b037fbe3ae20df73e29cf 100644 (file)
   "xsiexpdp %x0,%1,%2"
   [(set_attr "type" "fpsimple")])
 
+;; VSX Scalar Insert Exponent Double-Precision Floating Point Argument
+(define_insn "xsiexpdpf"
+  [(set (match_operand:DF 0 "vsx_register_operand" "=wa")
+       (unspec:DF [(match_operand:DF 1 "register_operand" "r")
+                   (match_operand:DI 2 "register_operand" "r")]
+        UNSPEC_VSX_SIEXPDP))]
+  "TARGET_P9_VECTOR && TARGET_64BIT"
+  "xsiexpdp %x0,%1,%2"
+  [(set_attr "type" "fpsimple")])
+
 ;; VSX Scalar Compare Exponents Double-Precision
 (define_expand "xscmpexpdp_<code>"
   [(set (match_dup 3)
index f575806ed994f10ea2e8c7e1a47e772c3b2de98e..5cb4748e0323620b563cf24a6e61ec577c733a08 100644 (file)
@@ -15133,17 +15133,19 @@ unsigned long long int scalar_extract_sig (double source);
 
 double
 scalar_insert_exp (unsigned long long int significand, unsigned long long int exponent);
+double
+scalar_insert_exp (double significand, unsigned long long int exponent);
 
 int scalar_cmp_exp_gt (double arg1, double arg2);
 int scalar_cmp_exp_lt (double arg1, double arg2);
 int scalar_cmp_exp_eq (double arg1, double arg2);
 int scalar_cmp_exp_unordered (double arg1, double arg2);
 
-int scalar_test_data_class (float source, unsigned int condition);
-int scalar_test_data_class (double source, unsigned int condition);
+bool scalar_test_data_class (float source, const int condition);
+bool scalar_test_data_class (double source, const int condition);
 
-int scalar_test_neg (float source);
-int scalar_test_neg (double source);
+bool scalar_test_neg (float source);
+bool scalar_test_neg (double source);
 
 int __builtin_byte_in_set (unsigned char u, unsigned long long set);
 int __builtin_byte_in_range (unsigned char u, unsigned int range);
@@ -15178,19 +15180,30 @@ random number.  The @code{__builtin_darn_raw} function provides a
 64-bit raw random number.  The @code{__builtin_darn_32} function
 provides a 32-bit random number.
 
-The @code{scalar_extract_sig} and @code{scalar_insert_exp}
+The @code{scalar_extract_exp} and @code{scalar_extract_sig}
 functions require a 64-bit environment supporting ISA 3.0 or later.
-The @code{scalar_extract_exp} and @code{vec_extract_sig} built-in
-functions return the significand and exponent respectively of their
-@code{source} arguments.  The
-@code{scalar_insert_exp} built-in function returns a double-precision
+The @code{scalar_extract_exp} and @code{scalar_extract_sig} built-in
+functions return the significand and the biased exponent value
+respectively of their @code{source} arguments.
+Within the result returned by @code{scalar_extract_sig},
+the @code{0x10000000000000} bit is set if the
+function's @code{source} argument is in normalized form.
+Otherwise, this bit is set to 0.
+Note that the sign of the significand is not represented in the result
+returned from the @code{scalar_extract_sig} function.  Use the
+@code{scalar_test_neg} function to test the sign of its @code{double}
+argument.
+
+The @code{scalar_insert_exp} 
+function requires a 64-bit environment supporting ISA 3.0 or later.
+The @code{scalar_insert_exp} built-in function returns a double-precision
 floating point value that is constructed by assembling the values of its
 @code{significand} and @code{exponent} arguments.  The sign of the
 result is copied from the most significant bit of the
 @code{significand} argument.  The significand and exponent components
 of the result are composed of the least significant 11 bits of the
-@code{significand} argument and the least significant 52 bits of the
-@code{exponent} argument.
+@code{exponent} argument and the least significant 52 bits of the
+@code{significand} argument.
 
 The @code{scalar_cmp_exp_gt}, @code{scalar_cmp_exp_lt},
 @code{scalar_cmp_exp_eq}, and @code{scalar_cmp_exp_unordered} built-in
@@ -15199,11 +15212,11 @@ than, equal to, or not comparable to @code{arg2} respectively.  The
 arguments are not comparable if one or the other equals NaN (not a
 number). 
 
-The @code{scalar_test_data_class} built-in functions return a non-zero
-value if any of the condition tests enabled by the value of the
-@code{condition} variable are true.  The
-@code{condition} argument must be an unsigned integer with value not
-exceeding 127.  The
+The @code{scalar_test_data_class} built-in function returns 1
+if any of the condition tests enabled by the value of the
+@code{condition} variable are true, and 0 otherwise.  The
+@code{condition} argument must be a compile-time constant integer with
+value not exceeding 127.  The
 @code{condition} argument is encoded as a bitmask with each bit
 enabling the testing of a different condition, as characterized by the
 following:
@@ -15217,10 +15230,8 @@ following:
 0x01    Test for -Denormal
 @end smallexample
 
-If all of the enabled test conditions are false, the return value is 0.
-
-The @code{scalar_test_neg} built-in functions return a non-zero value
-if their @code{source} argument holds a negative value.
+The @code{scalar_test_neg} built-in function returns 1 if its
+@code{source} argument holds a negative value, 0 otherwise.
 
 The @code{__builtin_byte_in_set} function requires a
 64-bit environment supporting ISA 3.0 or later.  This function returns
@@ -18140,39 +18151,66 @@ elements of the vector result.
 The following built-in functions are available for the PowerPC family
 of processors, starting with ISA 3.0 or later (@option{-mcpu=power9}):
 @smallexample
-__vector int
+__vector unsigned int
 vec_extract_exp (__vector float source);
-__vector long long int
+__vector unsigned long long int
 vec_extract_exp (__vector double source);
 
-__vector int
+__vector unsigned int
 vec_extract_sig (__vector float source);
-__vector long long int
+__vector unsigned long long int
 vec_extract_sig (__vector double source);
 
 __vector float
 vec_insert_exp (__vector unsigned int significands,
                 __vector unsigned int exponents);
+__vector float
+vec_insert_exp (__vector unsigned float significands,
+                __vector unsigned int exponents);
 __vector double
 vec_insert_exp (__vector unsigned long long int significands,
                 __vector unsigned long long int exponents);
+__vector double
+vec_insert_exp (__vector unsigned double significands,
+                __vector unsigned long long int exponents);
 
-__vector int vec_test_data_class (__vector float source,
-                                  unsigned int condition);
-__vector long long int vec_test_data_class (__vector double source,
-                                            unsigned int condition);
+__vector bool int vec_test_data_class (__vector float source,
+                                       const int condition);
+__vector bool long long int vec_test_data_class (__vector double source,
+                                                 const int condition);
 @end smallexample
 
 The @code{vec_extract_sig} and @code{vec_extract_exp} built-in
-functions return vectors representing the significands and exponents
-of their @code{source} arguments respectively.  The
-@code{vec_insert_exp} built-in functions return a vector of single- or
-double-precision floating
+functions return vectors representing the significands and biased
+exponent values of their @code{source} arguments respectively.
+Within the result vector returned by @code{vec_extract_sig}, the
+@code{0x800000} bit of each vector element returned when the
+function's @code{source} argument is of type @code{float} is set to 1
+if the corresponding floating point value is in normalized form.
+Otherwise, this bit is set to 0.  When the @code{source} argument is
+of type @code{double}, the @code{0x10000000000000} bit within each of
+the result vector's elements is set according to the same rules.
+Note that the sign of the significand is not represented in the result
+returned from the @code{vec_extract_sig} function.  To extract the
+sign bits, use the
+@code{vec_cpsgn} function, which returns a new vector within which all
+of the sign bits of its second argument vector are overwritten with the
+sign bits copied from the coresponding elements of its first argument
+vector, and all other (non-sign) bits of the second argument vector
+are copied unchanged into the result vector.
+
+The @code{vec_insert_exp} built-in functions return a vector of
+single- or double-precision floating
 point values constructed by assembling the values of their
 @code{significands} and @code{exponents} arguments into the
-corresponding elements of the returned vector.  The sign of each
+corresponding elements of the returned vector.
+The sign of each
 element of the result is copied from the most significant bit of the
-corresponding entry within the @code{significands} argument.  The
+corresponding entry within the @code{significands} argument.
+Note that the relevant
+bits of the @code{significands} argument are the same, for both integer
+and floating point types.
+The
 significand and exponent components of each element of the result are
 composed of the least significant bits of the corresponding
 @code{significands} element and the least significant bits of the
@@ -18181,8 +18219,8 @@ corresponding @code{exponents} element.
 The @code{vec_test_data_class} built-in function returns a vector
 representing the results of testing the @code{source} vector for the
 condition selected by the @code{condition} argument.  The
-@code{condition} argument must be an unsigned integer with value not
-exceeding 127.  The
+@code{condition} argument must be a compile-time constant integer with
+value not exceeding 127.  The
 @code{condition} argument is encoded as a bitmask with each bit
 enabling the testing of a different condition, as characterized by the
 following:
index ee1f19ce99316aa604af60560fc425c89513811f..004bff932bb100252862e0fc24af6db6f63bef3e 100644 (file)
@@ -1,3 +1,51 @@
+2017-01-23  Kelvin Nilsen  <kelvin@gcc.gnu.org>
+
+       * gcc.target/powerpc/bfp/scalar-insert-exp-3.c: New test.
+       * gcc.target/powerpc/bfp/scalar-insert-exp-4.c: New test.
+       * gcc.target/powerpc/bfp/scalar-insert-exp-5.c: New test.
+       * gcc.target/powerpc/bfp/scalar-test-data-class-0.c: Adjust return
+       type of test function to reflect change in built-in function's
+       return type.
+       * gcc.target/powerpc/bfp/scalar-test-data-class-1.c: Likewise.
+       * gcc.target/powerpc/bfp/scalar-test-data-class-2.c: Likewise.
+       * gcc.target/powerpc/bfp/scalar-test-data-class-3.c: Likewise.
+       * gcc.target/powerpc/bfp/scalar-test-data-class-4.c: Adjust return
+       type and second argument type to reflect change in built-in
+       function's type signature.
+       * gcc.target/powerpc/bfp/scalar-test-data-class-5.c: Likewise.
+       * gcc.target/powerpc/bfp/scalar-test-data-class-6.c: Adjust return
+       type of test function to reflect change in built-in function's
+       return type.
+       * gcc.target/powerpc/bfp/scalar-test-data-class-7.c: Likewise.
+       * gcc.target/powerpc/bfp/scalar-test-neg-0.c: Likewise.
+       * gcc.target/powerpc/bfp/scalar-test-neg-1.c: Likewise.
+       * gcc.target/powerpc/bfp/scalar-test-neg-2.c: Likewise.
+       * gcc.target/powerpc/bfp/scalar-test-neg-3.c: Likewise.
+       * gcc.target/powerpc/bfp/vec-extract-exp-0.c: Likewise.
+       * gcc.target/powerpc/bfp/vec-extract-exp-1.c: Likewise.
+       * gcc.target/powerpc/bfp/vec-extract-exp-2.c: Likewise.
+       * gcc.target/powerpc/bfp/vec-extract-exp-3.c: Likewise.
+       * gcc.target/powerpc/bfp/vec-extract-sig-0.c: Likewise.
+       * gcc.target/powerpc/bfp/vec-extract-sig-1.c: Likewise.
+       * gcc.target/powerpc/bfp/vec-extract-sig-2.c: Likewise.
+       * gcc.target/powerpc/bfp/vec-extract-sig-3.c: Likewise.
+       * gcc.target/powerpc/bfp/vec-insert-exp-4.c: New test.
+       * gcc.target/powerpc/bfp/vec-insert-exp-5.c: New test.
+       * gcc.target/powerpc/bfp/vec-insert-exp-6.c: New test.
+       * gcc.target/powerpc/bfp/vec-insert-exp-7.c: New test.
+       * gcc.target/powerpc/bfp/vec-test-data-class-0.c: Adjust return
+       type of test function to reflect change in built-in function's
+       return type.
+       * gcc.target/powerpc/bfp/vec-test-data-class-1.c: Likewise.
+       * gcc.target/powerpc/bfp/vec-test-data-class-2.c: Likewise.
+       * gcc.target/powerpc/bfp/vec-test-data-class-3.c: Likewise.
+       * gcc.target/powerpc/bfp/vec-test-data-class-4.c: Likewise.
+       * gcc.target/powerpc/bfp/vec-test-data-class-5.c: Likewise.
+       * gcc.target/powerpc/bfp/vec-test-data-class-6.c: Adjust types of
+       test function's result and second argument to reflect change in
+       built-in function's type signature.
+       * gcc.target/powerpc/bfp/vec-test-data-class-7.c: Likewise.
+
 2017-01-23  Nathan Sidwell  <nathan@acm.org>
 
        PR C++/71710
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-3.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-3.c
new file mode 100644 (file)
index 0000000..4dbd7ca
--- /dev/null
@@ -0,0 +1,20 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target powerpc_p9vector_ok } */
+/* { dg-options "-mcpu=power9" } */
+
+/* This test should succeed only on 64-bit configurations.  */
+#include <altivec.h>
+
+double
+insert_exponent (double *significand_p,
+                unsigned long long int *exponent_p)
+{
+  double significand = *significand_p;
+  unsigned long long int exponent = *exponent_p;
+
+  return scalar_insert_exp (significand, exponent);
+}
+
+/* { dg-final { scan-assembler "xsiexpdp" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-4.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-4.c
new file mode 100644 (file)
index 0000000..8b72cec
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target powerpc_p9vector_ok } */
+/* { dg-options "-mcpu=power8" } */
+
+/* This test should succeed only on 64-bit configurations.  */
+#include <altivec.h>
+
+double
+insert_exponent (double *significand_p,
+                unsigned long long int *exponent_p)
+{
+  double significand = *significand_p;
+  unsigned long long int exponent = *exponent_p;
+
+  return __builtin_vec_scalar_insert_exp (significand, exponent); /* { dg-error "Builtin function __builtin_vsx_scalar_insert_exp_dp requires" } */
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-5.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-5.c
new file mode 100644 (file)
index 0000000..e831f20
--- /dev/null
@@ -0,0 +1,21 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
+/* { dg-require-effective-target ilp32 } */
+/* { dg-require-effective-target powerpc_p9vector_ok } */
+/* { dg-options "-mcpu=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>
+
+double
+insert_exponent (double *significand_p,
+                unsigned long long int *exponent_p)
+{
+  double significand = *significand_p;
+  unsigned long long int exponent = *exponent_p;
+
+  return scalar_insert_exp (significand, exponent); /* { dg-error "Builtin function __builtin_vec_scalar_insert_exp not supported in this compiler configuration" } */
+}
index c7fe4b3807690a86762ae8bc05433d890f4a6951..eba19c3cc0f699adccb68fb2368b36d176289a18 100644 (file)
@@ -4,8 +4,9 @@
 /* { dg-options "-mcpu=power9" } */
 
 #include <altivec.h>
+#include <stdbool.h>
 
-unsigned int
+bool
 test_data_class (double *p)
 {
   double source = *p;
index 0b074c2694b4d412b055bcab40e37a0bf95e2c39..98c13ff5f9cb30f563d9a5c724c174f99d8ee716 100644 (file)
@@ -4,8 +4,9 @@
 /* { dg-options "-mcpu=power9" } */
 
 #include <altivec.h>
+#include <stdbool.h>
 
-unsigned int
+bool
 test_data_class (float *p)
 {
   float source = *p;
index 6e2955e18e49ffae259c50b207761a4999bdd50c..05ef48dddfc2b12ff51d06588d1ce8011c5207d3 100644 (file)
@@ -4,8 +4,9 @@
 /* { dg-options "-mcpu=power9" } */
 
 #include <altivec.h>
+#include <stdbool.h>
 
-unsigned int
+bool
 test_data_class (double *p)
 {
   double source = *p;
index ef8ec708abcfe63483b1965aae48ca0d74c06478..b13f470ade576fc5e8eb83c173adc62da24f6024 100644 (file)
@@ -4,8 +4,9 @@
 /* { dg-options "-mcpu=power9" } */
 
 #include <altivec.h>
+#include <stdbool.h>
 
-unsigned int
+bool
 test_data_class (float *p)
 {
   float source = *p;
index e5c7770ea34a161d7ea22d96b778a1622747b003..054fd7d3f6b36362ad13409fbbc5d594afbc9a64 100644 (file)
@@ -4,9 +4,10 @@
 /* { dg-options "-mcpu=power9" } */
 
 #include <altivec.h>
+#include <stdbool.h>
 
-unsigned int
-test_data_class (double *p, unsigned int condition_flag)
+bool
+test_data_class (double *p, const int condition_flag)
 {
   double source = *p;
 
index 1051ad13de55961d1585ecdea2aab2f5ec72533f..d039c900544c7d9d064fbe4405f1cc98f7e11941 100644 (file)
@@ -4,9 +4,10 @@
 /* { dg-options "-mcpu=power9" } */
 
 #include <altivec.h>
+#include <stdbool.h>
 
-unsigned int
-test_data_class (float *p, unsigned int condition_flag)
+bool
+test_data_class (float *p, const int condition_flag)
 {
   float source = *p;
 
index 56489aac34c4af46dce30312255bfd5e82abccc0..10405a386c01048ef4ea0c6013fa84303ad1d7be 100644 (file)
@@ -4,8 +4,9 @@
 /* { dg-options "-mcpu=power8" } */
 
 #include <altivec.h>
+#include <stdbool.h>
 
-unsigned int
+bool
 test_data_class (double *p)
 {
   double source = *p;
index eae63459d45f8a22cbe4a342d10bfb51248e498c..a7482eff559c140cfbd509ca223d0326b1ebe8d2 100644 (file)
@@ -4,8 +4,9 @@
 /* { dg-options "-mcpu=power8" } */
 
 #include <altivec.h>
+#include <stdbool.h>
 
-unsigned int
+bool
 test_data_class (float *p)
 {
   float source = *p;
index 94f4c285a14f857a55c4910cd8572075ea65a808..c89cee71ba141f7ae5fef8c85b4bc9741f8d1f16 100644 (file)
@@ -4,8 +4,9 @@
 /* { dg-options "-mcpu=power9" } */
 
 #include <altivec.h>
+#include <stdbool.h>
 
-unsigned int
+bool
 test_neg (double *p)
 {
   double source = *p;
index b79d1f997fe2e3c4fd753821fcaaaecd15357da7..2d9622be173502757e925e39ea880901745fa3ca 100644 (file)
@@ -4,8 +4,9 @@
 /* { dg-options "-mcpu=power9" } */
 
 #include <altivec.h>
+#include <stdbool.h>
 
-unsigned int
+bool
 test_neg (float *p)
 {
   float source = *p;
index bfc0552b905f00c3e2dfc893a2d2f13b51dd3040..3d93376e4bd8996bdb7c9c5459c10f93e50f2c95 100644 (file)
@@ -4,8 +4,9 @@
 /* { dg-options "-mcpu=power8" } */
 
 #include <altivec.h>
+#include <stdbool.h>
 
-unsigned int
+bool
 test_neg (float *p)
 {
   float source = *p;
index 712788285cca6ac3039ba73c19131c51ced092d3..33971f6574c031e4104530fa6f58e311a620eef5 100644 (file)
@@ -4,8 +4,9 @@
 /* { dg-options "-mcpu=power8" } */
 
 #include <altivec.h>
+#include <stdbool.h>
 
-unsigned int
+bool
 test_neg (double *p)
 {
   double source = *p;
index 75eea0ebe291cde599c6e7e2a1bedd8c93dbf32f..7bb819c7c96211986d16dc47131aeb1b33df9dd4 100644 (file)
@@ -5,7 +5,7 @@
 
 #include <altivec.h>
 
-__vector int
+__vector unsigned int
 get_exponents (__vector float *p)
 {
   __vector float source = *p;
index ed464cc2eadc9ecce36e22a8920b5712ec2d19e2..5f8b2eb5d4b77afed049d18ed4ef6de590c196c3 100644 (file)
@@ -5,7 +5,7 @@
 
 #include <altivec.h>
 
-__vector long long int
+__vector unsigned long long int
 get_exponents (__vector double *p)
 {
   __vector double source = *p;
index 0b456e4d3e97314c646ee28b38c344455d220a88..1462e4797bf6869d525b9759b04835ced5fd4a3d 100644 (file)
@@ -5,7 +5,7 @@
 
 #include <altivec.h>
 
-__vector long long int
+__vector unsigned long long int
 get_exponents (__vector double *p)
 {
   __vector double source = *p;
index 09e0724f7293d8536cdd3e853eeec1e38eea70ee..15dc0dde7adf1ab7db70258094c4d2ce1be1aaf6 100644 (file)
@@ -5,7 +5,7 @@
 
 #include <altivec.h>
 
-__vector int
+__vector unsigned int
 get_exponents (__vector float *p)
 {
   __vector float source = *p;
index c675809192256e786c43df6d2e2645c143ee9be7..9def7c1d67e869bc76e36172dac4f79489fffece 100644 (file)
@@ -5,7 +5,7 @@
 
 #include <altivec.h>
 
-__vector int
+__vector unsigned int
 get_significands (__vector float *p)
 {
   __vector float source = *p;
index f244942c6c4eba62eb0e6f18b5d853f8b963bdcf..74e5355385c50c32321d0dd85bd37d7f63b2d11a 100644 (file)
@@ -5,7 +5,7 @@
 
 #include <altivec.h>
 
-__vector long long int
+__vector unsigned long long int
 get_significands (__vector double *p)
 {
   __vector double source = *p;
index 5d1d1223baee93ff343ba2bc5a55b6b3d8da1234..c4088cfc67e2ecacc21468ec11348e1b0ff62951 100644 (file)
@@ -5,7 +5,7 @@
 
 #include <altivec.h>
 
-__vector long long int
+__vector unsigned long long int
 get_significands (__vector double *p)
 {
   __vector double source = *p;
index 40d0c47873b8929c765931c036ac90dcde6e1114..0adbbc25ee2fbe5f8759c46c23509b27fe6bc7f2 100644 (file)
@@ -5,7 +5,7 @@
 
 #include <altivec.h>
 
-__vector int
+__vector unsigned int
 get_significands (__vector float *p)
 {
   __vector float source = *p;
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-4.c b/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-4.c
new file mode 100644 (file)
index 0000000..4f07570
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
+/* { dg-require-effective-target powerpc_p9vector_ok } */
+/* { dg-options "-mcpu=power9" } */
+
+#include <altivec.h>
+
+__vector float
+make_floats (__vector float *significands_p, 
+            __vector unsigned int *exponents_p)
+{
+  __vector float significands = *significands_p;
+  __vector unsigned int exponents = *exponents_p;
+
+  return vec_insert_exp (significands, exponents);
+}
+
+/* { dg-final { scan-assembler "xviexpsp" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-5.c b/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-5.c
new file mode 100644 (file)
index 0000000..4a396d6
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
+/* { dg-require-effective-target powerpc_p9vector_ok } */
+/* { dg-options "-mcpu=power9" } */
+
+#include <altivec.h>
+
+__vector double
+make_doubles (__vector double *significands_p,
+             __vector unsigned long long int *exponents_p)
+{
+  __vector double significands = *significands_p;
+  __vector unsigned long long int exponents = *exponents_p;
+
+  return vec_insert_exp (significands, exponents);
+}
+
+/* { dg-final { scan-assembler "xviexpdp" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-6.c b/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-6.c
new file mode 100644 (file)
index 0000000..5a76af7
--- /dev/null
@@ -0,0 +1,16 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-require-effective-target powerpc_p9vector_ok } */
+/* { dg-options "-mcpu=power8" } */
+
+#include <altivec.h>
+
+__vector float
+make_floats (__vector float *significands_p, 
+            __vector unsigned int *exponents_p)
+{
+  __vector float significands = *significands_p;
+  __vector unsigned int exponents = *exponents_p;
+
+  return __builtin_vec_insert_exp (significands, exponents); /* { dg-error "Builtin function __builtin_vsx_insert_exp_sp requires" } */
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-7.c b/gcc/testsuite/gcc.target/powerpc/bfp/vec-insert-exp-7.c
new file mode 100644 (file)
index 0000000..8655818
--- /dev/null
@@ -0,0 +1,16 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-require-effective-target powerpc_p9vector_ok } */
+/* { dg-options "-mcpu=power8" } */
+
+#include <altivec.h>
+
+__vector double
+make_doubles (__vector double *significands_p,
+             __vector unsigned long long int *exponents_p)
+{
+  __vector double significands = *significands_p;
+  __vector unsigned long long int exponents = *exponents_p;
+
+  return __builtin_vec_insert_exp (significands, exponents); /* { dg-error "Builtin function __builtin_vsx_insert_exp_dp requires" } */
+}
index 65b2786f445040dc92e5f4937a2e40066be2adae..cea500b8960d06e9fc65b3c354f120b8ee634ccd 100644 (file)
@@ -5,7 +5,7 @@
 
 #include <altivec.h>
 
-__vector int
+__vector bool int
 get_data_class_flags (__vector float *p)
 {
   __vector float source = *p;
index 7db579719adaa4151bd9971b4586f2e750428774..c965c0f721fefbc929841d5c7ee831c458c99233 100644 (file)
@@ -5,7 +5,7 @@
 
 #include <altivec.h>
 
-__vector long long int
+__vector bool long long int
 get_data_class_flags (__vector double *p)
 {
   __vector double source = *p;
index cdcc19e511f938ccd8cf3b4855f4680d7138133b..c7e236fdb82d2826d1454ef468a51cae9244efe4 100644 (file)
@@ -5,7 +5,7 @@
 
 #include <altivec.h>
 
-__vector long long int
+__vector bool long long int
 get_data_class_flags (__vector double *p)
 {
   __vector double source = *p;
index 23f5acefcc2be4d7795de861de4d80681e138955..9a6c069ac11adf8f642aba4d1f87c1d69760302b 100644 (file)
@@ -5,7 +5,7 @@
 
 #include <altivec.h>
 
-__vector int
+__vector bool int
 get_data_class_flags (__vector float *p)
 {
   __vector float source = *p;
index 91c2293ea1666be950d48844ef70b3d864b40d6a..7392a4da85e24ba04dff1e8e6cac783864892ea1 100644 (file)
@@ -5,7 +5,7 @@
 
 #include <altivec.h>
 
-__vector int
+__vector bool int
 get_data_class_flags (__vector float *p)
 {
   __vector float source = *p;
index cf46d8590a87ef26978ab0aa9ec2d0d312f73968..bd94d3f9379b60b88faec08684b85d3a53ec1f6c 100644 (file)
@@ -5,7 +5,7 @@
 
 #include <altivec.h>
 
-__vector long long int
+__vector bool long long int
 get_data_class_flags (__vector double *p)
 {
   __vector double source = *p;
index b780adcf53201a7f063d2e8cbbfc958dc7d8a94a..cc77e04a496998e645847d2611d61bf06acea3f2 100644 (file)
@@ -5,8 +5,8 @@
 
 #include <altivec.h>
 
-__vector int
-get_data_class_flags (__vector float *p, unsigned int condition_flag)
+__vector bool int
+get_data_class_flags (__vector float *p, int condition_flag)
 {
   __vector float source = *p;
 
index 3fde79314edaae205e61b8e9d366b7f7fefa8db9..61aa7cc3a8fe33bce0d92c7ac0c452ae1272081d 100644 (file)
@@ -5,8 +5,8 @@
 
 #include <altivec.h>
 
-__vector long long int
-get_data_class_flags (__vector double *p, unsigned int condition_flag)
+__vector bool long long int
+get_data_class_flags (__vector double *p, int condition_flag)
 {
   __vector double source = *p;