Bill:

Ah, I read your note as Power 8, Power 7 and the IBM AT 11.  Thanks for
the clarification.

                Carl Love

On Thu, 2018-09-13 at 14:11 -0500, Bill Schmidt wrote:
> 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  <c...@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
> > 
> 
> 

Reply via email to