GCC maintainers:
The following patch is a back port for the GCC 7 branch of mainline
commit 257747. The mainline commit added support for builtins
vec_insert4b and vec_extract4b. This is the first of two patches.
This patch adds the ABI specified builtin instances. A second patch to
be posted shortly will remove the non ABI instances of these builtins.
This patch has been tested on GCC 7:
powerpc64le-unknown-linux-gnu (Power 8 LE)
powerpc64-unknown-linux-gnu (Power 8 BE)
with no regressions.
Let me know if the patch looks OK or not. Thanks.
Carl Love
-
gcc/ChangeLog
2018-02-26 Carl Love
* config/rs6000/altivec.h: Add builtin names vec_extract4b
vec_insert4b.
* config/rs6000/rs6000-builtin.def: Add INSERT4B and EXTRACT4B
definitions.
* config/rs6000/rs6000-c.c: Add the definitions for
P9V_BUILTIN_VEC_EXTRACT4B and P9V_BUILTIN_VEC_INSERT4B.
* config/rs6000/rs6000.c (altivec_expand_builtin): Add
P9V_BUILTIN_EXTRACT4B and P9V_BUILTIN_INSERT4B case statements.
* config/rs6000/vsx.md: Add define_insn extract4b. Add define_expand
definition for insert4b and define insn *insert3b_internal.
* doc/extend.texi: Add documentation for vec_extract4b.
gcc/testsuite/ChangeLog
2018-02-26 Carl Love
*gcc.target/powerpc/builtins-7-p9-runnable.c: New runnable test file
for the ABI definitions for vec_extract4b and vec_insert4b.
---
gcc/config/rs6000/altivec.h| 2 +
gcc/config/rs6000/rs6000-builtin.def | 4 +
gcc/config/rs6000/rs6000-c.c | 8 +
gcc/config/rs6000/rs6000.c | 2 +
gcc/config/rs6000/vsx.md | 41 +
gcc/doc/extend.texi| 7 +
.../gcc.target/powerpc/builtins-7-p9-runnable.c| 169 +
7 files changed, 233 insertions(+)
create mode 100644 gcc/testsuite/gcc.target/powerpc/builtins-7-p9-runnable.c
diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
index b9de05a..3011a87 100644
--- a/gcc/config/rs6000/altivec.h
+++ b/gcc/config/rs6000/altivec.h
@@ -400,6 +400,8 @@
#define vec_vctzw __builtin_vec_vctzw
#define vec_vextract4b __builtin_vec_vextract4b
#define vec_vinsert4b __builtin_vec_vinsert4b
+#define vec_extract4b __builtin_vec_extract4b
+#define vec_insert4b __builtin_vec_insert4b
#define vec_vprtyb __builtin_vec_vprtyb
#define vec_vprtybd __builtin_vec_vprtybd
#define vec_vprtybw __builtin_vec_vprtybw
diff --git a/gcc/config/rs6000/rs6000-builtin.def
b/gcc/config/rs6000/rs6000-builtin.def
index a39f936..46ae21a 100644
--- a/gcc/config/rs6000/rs6000-builtin.def
+++ b/gcc/config/rs6000/rs6000-builtin.def
@@ -2036,6 +2036,8 @@ BU_P9V_AV_2 (VEXTUWRX, "vextuwrx",CONST,
vextuwrx)
BU_P9V_VSX_2 (VEXTRACT4B, "vextract4b", CONST, vextract4b)
BU_P9V_VSX_3 (VINSERT4B,"vinsert4b", CONST, vinsert4b)
BU_P9V_VSX_3 (VINSERT4B_DI, "vinsert4b_di",CONST, vinsert4b_di)
+BU_P9V_VSX_3 (INSERT4B,"insert4b", CONST, insert4b)
+BU_P9V_VSX_2 (EXTRACT4B, "extract4b",CONST, extract4b)
/* 3 argument vector functions returning void, treated as SPECIAL,
added in ISA 3.0 (power9). */
@@ -2084,10 +2086,12 @@ BU_P9V_OVERLOAD_2 (LXVL,"lxvl")
BU_P9V_OVERLOAD_2 (VEXTULX,"vextulx")
BU_P9V_OVERLOAD_2 (VEXTURX,"vexturx")
BU_P9V_OVERLOAD_2 (VEXTRACT4B, "vextract4b")
+BU_P9V_OVERLOAD_2 (EXTRACT4B, "extract4b")
/* ISA 3.0 Vector scalar overloaded 3 argument functions */
BU_P9V_OVERLOAD_3 (STXVL, "stxvl")
BU_P9V_OVERLOAD_3 (VINSERT4B, "vinsert4b")
+BU_P9V_OVERLOAD_3 (INSERT4B,"insert4b")
/* Overloaded CMPNE support was implemented prior to Power 9,
so is not mentioned here. */
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index d9905f7..c3134fc 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -5047,6 +5047,8 @@ const struct altivec_builtin_types
altivec_overloaded_builtins[] = {
RS6000_BTI_INTDI, RS6000_BTI_V16QI, RS6000_BTI_UINTSI, 0 },
{ P9V_BUILTIN_VEC_VEXTRACT4B, P9V_BUILTIN_VEXTRACT4B,
RS6000_BTI_INTDI, RS6000_BTI_unsigned_V16QI, RS6000_BTI_UINTSI, 0 },
+ { P9V_BUILTIN_VEC_EXTRACT4B, P9V_BUILTIN_EXTRACT4B,
+RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, 0 },
{ P9V_BUILTIN_VEC_VEXTULX, P9V_BUILTIN_VEXTUBLX,
RS6000_BTI_INTQI, RS6000_BTI_UINTSI,
@@ -5101,6 +5103,12 @@ const struct altivec_builtin_types
altivec_overloaded_builtins[] = {
{ P8V_BUILTIN_VEC_VGBBD, P8V_BUILTIN_VGBBD,
RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI, 0, 0 },
+ { P9V_BUILTIN_VEC_INSERT4B, P9V_BUILTIN_INSERT4B,
+RS6000_BTI_unsigned_V16QI, RS6000_BTI_V4SI,
+RS6000_BTI_unsigned_V16QI,