rs6000-c: Add support for built-in function vector unsigned short vec_pack_to_short_f...
authorCarl Love <cel@us.ibm.com>
Fri, 7 Jul 2017 16:17:46 +0000 (16:17 +0000)
committerCarl Love <carll@gcc.gnu.org>
Fri, 7 Jul 2017 16:17:46 +0000 (16:17 +0000)
gcc/ChangeLog:

2017-07-07 Carl Love  <cel@us.ibm.com>

* config/rs6000/rs6000-c: Add support for built-in function
vector unsigned short vec_pack_to_short_fp32 (vector float,
      vector float).
* config/rs6000/rs6000-builtin.def (CONVERT_4F32_8I16): Add
BU_P9V_AV_2 and BU_P9V_OVERLOAD_2 definitions.
* config/rs6000/altivec.h (vec_pack_to_short_fp32): Add define.
* config/rs6000/altivec.md(UNSPEC_CONVERT_4F32_8I16): Add UNSPEC.
(convert_4f32_8i16): Add define_expand.
* doc/extend.texi: Update the built-in documentation file for the
new built-in function.

gcc/testsuite/ChangeLog:

2017-07-07  Carl Love  <cel@us.ibm.com>

* gcc.target/powerpc/builtins-1-p9-runnable.c: Add new test
file for built-ins.

From-SVN: r250051

gcc/ChangeLog
gcc/config/rs6000/altivec.h
gcc/config/rs6000/altivec.md
gcc/config/rs6000/rs6000-builtin.def
gcc/config/rs6000/rs6000-c.c
gcc/doc/extend.texi
gcc/testsuite/ChangeLog

index a642e4a45b338bc00c1a58fce146991d52a1c78a..1a78572a1dd80972cd6bca13cb562eaf59faeb35 100644 (file)
@@ -1,3 +1,16 @@
+2017-07-07 Carl Love  <cel@us.ibm.com>
+
+       * config/rs6000/rs6000-c: Add support for built-in function
+       vector unsigned short vec_pack_to_short_fp32 (vector float,
+                                                     vector float).
+       * config/rs6000/rs6000-builtin.def (CONVERT_4F32_8I16): Add
+       BU_P9V_AV_2 and BU_P9V_OVERLOAD_2 definitions.
+       * config/rs6000/altivec.h (vec_pack_to_short_fp32): Add define.
+       * config/rs6000/altivec.md(UNSPEC_CONVERT_4F32_8I16): Add UNSPEC.
+       (convert_4f32_8i16): Add define_expand.
+       * doc/extend.texi: Update the built-in documentation file for the
+       new built-in function.
+
 2017-07-07  Jose E. Marchesi  <jose.marchesi@oracle.com>
 
        * config/sparc/m8.md: New file.
index 806675ad8219143c0d1900a6953a72763aa1bafa..5af7eecec147706fbaa87f242d16c3a98e5fdb5d 100644 (file)
 
 #ifdef __POWER9_VECTOR__
 /* Vector additions added in ISA 3.0.  */
+#define vec_pack_to_short_fp32 __builtin_vec_convert_4f32_8i16
 #define vec_vctz __builtin_vec_vctz
 #define vec_cnttz __builtin_vec_vctz
 #define vec_vctzb __builtin_vec_vctzb
index 5629d776959f1a7aa5050f8c098f17131ca68b3c..d5f7a8f0b2a47f1c65c0d920e926bee5a578290d 100644 (file)
@@ -79,6 +79,7 @@
    UNSPEC_VUNPACK_LO_SIGN_DIRECT
    UNSPEC_VUPKHPX
    UNSPEC_VUPKLPX
+   UNSPEC_CONVERT_4F32_8I16
    UNSPEC_DARN
    UNSPEC_DARN_32
    UNSPEC_DARN_RAW
 }
   [(set_attr "type" "veccomplex")])
 
+;; Generate two vector F32 converted to packed vector I16 vector
+(define_expand "convert_4f32_8i16"
+  [(set (match_operand:V8HI 0 "register_operand" "=v")
+       (unspec:V8HI [(match_operand:V4SF 1 "register_operand" "v")
+                     (match_operand:V4SF 2 "register_operand" "v")]
+                    UNSPEC_CONVERT_4F32_8I16))]
+  "TARGET_P9_VECTOR"
+{
+  rtx rtx_tmp_hi = gen_reg_rtx (V4SImode);
+  rtx rtx_tmp_lo = gen_reg_rtx (V4SImode);
+
+  emit_insn (gen_altivec_vctuxs (rtx_tmp_hi, operands[1], const0_rtx));
+  emit_insn (gen_altivec_vctuxs (rtx_tmp_lo, operands[2], const0_rtx));
+  emit_insn (gen_altivec_vpkswss (operands[0], rtx_tmp_hi, rtx_tmp_lo));
+  DONE;
+})
+
 ;; Generate
 ;;    xxlxor/vxor SCRATCH0,SCRATCH0,SCRATCH0
 ;;    vsubu?m SCRATCH2,SCRATCH1,%1
index c5017aa90cc352294af8f6863ae9241b4be9d89f..258c5f8a5719d868653568db5b8eca52f146b528 100644 (file)
@@ -1990,10 +1990,12 @@ BU_P8V_OVERLOAD_3 (VSUBEUQM,    "vsubeuqm")
 /* ISA 3.0 vector overloaded 2-argument functions. */
 BU_P9V_AV_2 (VSLV,             "vslv",                 CONST, vslv)
 BU_P9V_AV_2 (VSRV,             "vsrv",                 CONST, vsrv)
+BU_P9V_AV_2 (CONVERT_4F32_8I16, "convert_4f32_8i16", CONST, convert_4f32_8i16)
 
 /* ISA 3.0 vector overloaded 2-argument functions. */
 BU_P9V_OVERLOAD_2 (VSLV,       "vslv")
 BU_P9V_OVERLOAD_2 (VSRV,       "vsrv")
+BU_P9V_OVERLOAD_2 (CONVERT_4F32_8I16, "convert_4f32_8i16")
 
 /* 2 argument vector functions added in ISA 3.0 (power9). */
 BU_P9V_AV_2 (VADUB,            "vadub",                CONST,  vaduv16qi3)
index 1a40797c3b75750c78fb1b183d9abbd3e51d3f25..2b5193bfdcc93b3fd6d89f7e0c24ad2ce42a01ec 100644 (file)
@@ -2417,6 +2417,10 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
     RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V2DI, RS6000_BTI_bool_V2DI, 0 },
   { ALTIVEC_BUILTIN_VEC_PACK, P8V_BUILTIN_VPKUDUM,
     RS6000_BTI_V4SF, RS6000_BTI_V2DF, RS6000_BTI_V2DF, 0 },
+
+  { P9V_BUILTIN_VEC_CONVERT_4F32_8I16, P9V_BUILTIN_CONVERT_4F32_8I16,
+    RS6000_BTI_unsigned_V8HI, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
+
   { ALTIVEC_BUILTIN_VEC_VPKUWUM, ALTIVEC_BUILTIN_VPKUWUM,
     RS6000_BTI_V8HI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
   { ALTIVEC_BUILTIN_VEC_VPKUWUM, ALTIVEC_BUILTIN_VPKUWUM,
index 3bef461c8f39d74bd2ac01f8ba5fbf50a92bdaca..d0abd7faadfcb1bbd3c1a7b2878726c880734a0b 100644 (file)
@@ -15363,6 +15363,8 @@ signed int vec_cntlz_lsbb (vector unsigned char);
 signed int vec_cnttz_lsbb (vector signed char);
 signed int vec_cnttz_lsbb (vector unsigned char);
 
+vector unsigned short vec_pack_to_short_fp32 (vector float, vector float);
+
 vector signed char vec_xl_len (signed char *addr, size_t len);
 vector unsigned char vec_xl_len (unsigned char *addr, size_t len);
 vector signed int vec_xl_len (signed int *addr, size_t len);
index 6e53e295b5acd6a129cece700c2eabb9238d57a1..73181dbb7307be2269bdb20fb27f3cb8efdaa1da 100644 (file)
@@ -1,3 +1,8 @@
+2017-07-07  Carl Love  <cel@us.ibm.com>
+
+       * gcc.target/powerpc/builtins-1-p9-runnable.c: Add new test
+       file for built-ins.
+
 2017-07-07  Jose E. Marchesi  <jose.marchesi@oracle.com>
 
        * gcc.target/sparc/dictunpack.c: New file.