On Fri, 2020-05-22 at 13:27 -0700, Carl Love wrote:
> GCC maintainers:
>
> The following patch adds support for builtins
> vec_genbm(), vec_genhm(),
> vec_genwm(), vec_gendm(), vec_genqm(), vec_cntm(), vec_expandm(),
> vec_extractm(). Support for instructions mtvsrbm, mtvsrhm, mtvsrwm,
> mtvsrdm, mtvsrqm, cntm, vexpandm, vextractm.
>
> The test has been tested on:
>
> powerpc64le-unknown-linux-gnu (Power 9 LE)
>
> and mambo with no regression errors.
>
> Please let me know if this patch is acceptable for mainline.
>
> Thanks.
>
>Carl Love
> ---
>
> RS6000 RFC 2629, add VSX mask manipulation support
>
> gcc/ChangeLog
>
> 2020-05-22 Carl Love
>
> * config/rs6000/vsx.md (VSX_MM): New define_mode_iterator.
> (VSX_MM4): New define_mode_iterator.
> (VSX_MM_SUFFIX4): New define_mode_attr.
> (vec_mtvsrbm): New define_expand.
> (vec_mtvsrbmi): New define_insn.
> (vec_mtvsr_): New define_insn.
> (vec_cntmb_): New define_insn.
> (vec_extract_): New define_insn.
> (vec_expand_): New define_insn.
> (define_c_enum unspec): Add entries UNSPEC_MTVSBM, UNSPEC_VCNTMB,
> UNSPEC_VEXTRACT, UNSPEC_VEXPAND.
> * config/rs6000/altivec.h: Add defines vec_genbm, vec_genhm, vec_genwm,
> vec_gendm, vec_genqm, vec_cntm, vec_expandm, vec_extractm.
Nit (?) Name/symbol first. i.e.
(vec_genbm, vec_genhm,...) Add definitions.
> * config/rs6000/rs6000-builtin.c: Add defines BU_FUTURE_2, BU_FUTURE_1.
> (BU_FUTURE_1): Add definitions for mtvsrbm, mtvsrhm, mtvsrwm,
> mtvsrdm, mtvsrqm, vexpandmb, vexpandmh, vexpandmw, vexpandmd, vexpandmq,
> vextractmb, vextractmh, vextractmw, vextractmd, vextractmq.
> (BU_FUTURE_2): Add definitions for cntmbb, cntmbh, cntmbw, cntmbd.
> (BU_FUTURE_OVERLOAD_1): Add definitions for mtvsrbm, mtvsrhm,
> mtvsrwm, mtvsrdm, mtvsrqm, vexpandm, vextractm.
> (BU_FUTURE_OVERLOAD_2): Add defition for cntm.
> * config/rs6000/rs6000-call.c (rs6000_expand_binop_builtin): Add
> checks for CODE_FOR_vec_cntmbb_v16qi, CODE_FOR_vec_cntmb_v8hi,
> CODE_FOR_vec_cntmb_v4si, CODE_FOR_vec_cntmb_v2di.
> (altivec_overloaded_builtins): Add overloaded argument entries for
> FUTURE_BUILTIN_VEC_MTVSRBM, FUTURE_BUILTIN_VEC_MTVSRHM,
> FUTURE_BUILTIN_VEC_MTVSRWM,
> FUTURE_BUILTIN_VEC_MTVSRDM, FUTURE_BUILTIN_VEC_MTVSRQM,
> FUTURE_BUILTIN_VEC_VCNTMBB,
> FUTURE_BUILTIN_VCNTMBB, FUTURE_BUILTIN_VCNTMBH, FUTURE_BUILTIN_VCNTMBW,
> FUTURE_BUILTIN_VCNTMBD, FUTURE_BUILTIN_VEXPANDMB,
> FUTURE_BUILTIN_VEXPANDMH,
> FUTURE_BUILTIN_VEXPANDMW, FUTURE_BUILTIN_VEXPANDMD,
> FUTURE_BUILTIN_VEXPANDMQ,
> FUTURE_BUILTIN_VEXTRACTMB, FUTURE_BUILTIN_VEXTRACTMH,
> FUTURE_BUILTIN_VEXTRACTMW,
> FUTURE_BUILTIN_VEXTRACTMD, FUTURE_BUILTIN_VEXTRACTMQ.
> (builtin_function_type): Add case entries for FUTURE_BUILTIN_MTVSRBM,
> FUTURE_BUILTIN_MTVSRHM, FUTURE_BUILTIN_MTVSRWM, FUTURE_BUILTIN_MTVSRDM,
> FUTURE_BUILTIN_MTVSRQM, FUTURE_BUILTIN_VCNTMBB, FUTURE_BUILTIN_VCNTMBH,
> FUTURE_BUILTIN_VCNTMBW, FUTURE_BUILTIN_VCNTMBD,
> FUTURE_BUILTIN_VEXPANDMB,
> FUTURE_BUILTIN_VEXPANDMH, FUTURE_BUILTIN_VEXPANDMW,
> FUTURE_BUILTIN_VEXPANDMD,
> FUTURE_BUILTIN_VEXPANDMQ.
> * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add entries
> for MTVSRBM, MTVSRHM, MTVSRWM, MTVSRDM, MTVSRQM, VCNTM, VEXPANDM,
> VEXTRACTM.
The rs6000-c.c reference here ^ doesn't exist below. Looks like that
was moved to rs6000-builtin.def.
> * testsuite/gcc.target/powerpc/vsx_mask-runnable.c: Add runnable test
> case.
> ---
> gcc/config/rs6000/altivec.h | 10 +
> gcc/config/rs6000/rs6000-builtin.def | 45 ++
> gcc/config/rs6000/rs6000-call.c | 66 +-
> gcc/config/rs6000/vsx.md | 67 ++
> .../gcc.target/powerpc/vsx_mask-runnable.c| 614 ++
> 5 files changed, 801 insertions(+), 1 deletion(-)
> create mode 100644 gcc/testsuite/gcc.target/powerpc/vsx_mask-runnable.c
>
> diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
> index 0a7e8ab3647..5917d3a2b76 100644
> --- a/gcc/config/rs6000/altivec.h
> +++ b/gcc/config/rs6000/altivec.h
> @@ -710,6 +710,16 @@ __altivec_scalar_pred(vec_any_nle,
>
> #define vec_strir_p(a) __builtin_vec_strir_p (a)
> #define vec_stril_p(a) __builtin_vec_stril_p (a)
> +
> +/* VSX Mask Manipulation builtin. */
> +#define vec_genbm __builtin_vec_mtvsrbm
> +#define vec_genhm __builtin_vec_mtvsrhm
> +#define vec_genwm __builtin_vec_mtvsrwm
> +#define vec_gendm __builtin_vec_mtvsrdm
> +#define vec_genqm __builtin_vec_mtvsrqm
> +#define vec_cntm __builtin_vec_cntm
> +#define vec_expandm __builtin_vec_vexpandm
> +#define vec_extractm __builtin_vec_vextractm
> #endif
ok
>
> #endif /* _ALTIVEC_H */
> diff --git