This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH,rs6000] Add _MM_SHUFFLE definitions for rs6000
- From: Bill Schmidt <wschmidt at linux dot ibm dot com>
- To: Carl Love <cel at us dot ibm dot com>, Segher Boessenkool <segher at kernel dot crashing dot org>, gcc-patches at gcc dot gnu dot org, David Edelsohn <dje dot gcc at gmail dot com>
- Cc: Bill Schmidt <wschmidt at linux dot vnet dot ibm dot com>
- Date: Thu, 13 Sep 2018 14:11:11 -0500
- Subject: Re: [PATCH,rs6000] Add _MM_SHUFFLE definitions for rs6000
- References: <1536865681.5624.2.camel@us.ibm.com>
On 9/13/18 2:08 PM, Carl Love wrote:
> GCC maintainers:
>
> The _MM_SHUFFLE and _MM_SHUFFLE2 macros are currently defined in the
> i386 branch. This patch adds the two macro definitions to the rs6000
> config directory as requested.
>
> The patch has been tested on
>
> powerpc64le-unknown-linux-gnu (Power 8 LE)
>
> With no regressions.
>
> The request includes backporting the macro definitions to GCC 7 and GCC
> 8. The backport to GCC7 will require creating
> the config/rs6000/emmintrin.h, config/rs6000/xmmintrin.h and
> config/rs6000/x86intrin.h files with the standard header comments.
>
> Please let me know if the patch is acceptable for mainline and for
> backporting to GCC 7 and 8. Thanks
Hi Carl,
No, it should not be backported to GCC 7. To clarify what I was saying:
these header files exist in branches/ibm/gcc-7-branch but do NOT exist
in branches/gcc-7-branch. That IBM-private branch (used for AT 11.0)
should have these macros added, but the main gcc-7-branch should not.
We don't want any new files added anywhere as part of this work.
Thanks,
Bill
>
> Carl Love
> --------------------------------------------------------------------
>
> gcc/ChangeLog:
>
> 2018-09-11 Carl Love <cel@us.ibm.com>
>
> * config/rs6000/emmintrin.h: Add _MM_SHUFFLE2.
> * config/rs6000/xmmintrin.h: Add _MM_SHUFFLE.
> ---
> gcc/config/rs6000/emmintrin.h | 5 ++++-
> gcc/config/rs6000/xmmintrin.h | 3 +++
> 2 files changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/gcc/config/rs6000/emmintrin.h b/gcc/config/rs6000/emmintrin.h
> index 412ece7..d4543fb 100644
> --- a/gcc/config/rs6000/emmintrin.h
> +++ b/gcc/config/rs6000/emmintrin.h
> @@ -85,6 +85,9 @@ typedef double __m128d __attribute__ ((__vector_size__ (16), __may_alias__));
> typedef long long __m128i_u __attribute__ ((__vector_size__ (16), __may_alias__, __aligned__ (1)));
> typedef double __m128d_u __attribute__ ((__vector_size__ (16), __may_alias__, __aligned__ (1)));
>
> +/* Define two value permute mask */
> +#define _MM_SHUFFLE2(x,y) (((x) << 1) | (y))
> +
> /* Create a vector with element 0 as F and the rest zero. */
> extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
> _mm_set_sd (double __F)
> @@ -1163,8 +1166,8 @@ _mm_cvtss_sd (__m128d __A, __m128 __B)
> res [0] = ((__v4sf)__B) [0];
> return (__m128d) res;
> #endif
> -}
>
> +}
> extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
> _mm_shuffle_pd(__m128d __A, __m128d __B, const int __mask)
> {
> diff --git a/gcc/config/rs6000/xmmintrin.h b/gcc/config/rs6000/xmmintrin.h
> index 43d03ea..11ecbd8 100644
> --- a/gcc/config/rs6000/xmmintrin.h
> +++ b/gcc/config/rs6000/xmmintrin.h
> @@ -57,6 +57,9 @@
> #ifndef _XMMINTRIN_H_INCLUDED
> #define _XMMINTRIN_H_INCLUDED
>
> +/* Define four value permute mask */
> +#define _MM_SHUFFLE(w,x,y,z) (((w) << 6) | ((x) << 4) | ((y) << 2) | (z))
> +
> #include <altivec.h>
>
> /* Avoid collisions between altivec.h and strict adherence to C++ and
> --
> 2.7.4
>