r242297 - [PPC64LE] Fix vec_sld semantics for little endian
Hal Finkel
hfinkel at anl.gov
Wed Jul 15 09:08:36 PDT 2015
----- Original Message -----
> From: "Bill Schmidt" <wschmidt at linux.vnet.ibm.com>
> To: "Hal Finkel" <hfinkel at anl.gov>
> Cc: cfe-commits at cs.uiuc.edu
> Sent: Wednesday, July 15, 2015 11:02:58 AM
> Subject: Re: r242297 - [PPC64LE] Fix vec_sld semantics for little endian
>
> On Wed, 2015-07-15 at 10:57 -0500, Hal Finkel wrote:
> > Test case?
> >
> > -Hal
>
> Ah yes, I forgot to mention this. For the back end, we have existing
> tests that verify the correct shuffle masks for vsldoi, so we already
> have test coverage here (which motivated these fixes).
Yes, but those don't cover the frontend logic, which has a non-trivial Endian dependence. We have tests:
test/CodeGen/builtins-ppc-crypto.c
test/CodeGen/altivec.c
and we should cover the frontend part of the logic there (or in some similar file).
-Hal
>
> Bill
>
> >
> > ----- Original Message -----
> > > From: "Bill Schmidt" <wschmidt at linux.vnet.ibm.com>
> > > To: cfe-commits at cs.uiuc.edu
> > > Sent: Wednesday, July 15, 2015 10:45:53 AM
> > > Subject: r242297 - [PPC64LE] Fix vec_sld semantics for little
> > > endian
> > >
> > > Author: wschmidt
> > > Date: Wed Jul 15 10:45:53 2015
> > > New Revision: 242297
> > >
> > > URL: http://llvm.org/viewvc/llvm-project?rev=242297&view=rev
> > > Log:
> > > [PPC64LE] Fix vec_sld semantics for little endian
> > >
> > > The vec_sld interface provides access to the vsldoi instruction.
> > > Unlike most of the vec_* interfaces, we do not attempt to change
> > > the
> > > generated code for vec_sld based on the endian mode. It is too
> > > difficult to correctly infer the desired semantics because of
> > > different element types, and the corrected instruction sequence
> > > is
> > > expensive, involving loading a permute control vector and
> > > performing
> > > a
> > > generalized permute.
> > >
> > > For GCC, this was implemented as "Don't touch the vec_sld"
> > > implementation. When it came time for the LLVM implementation, I
> > > did
> > > the same thing. However, this was hasty and incorrect. In
> > > LLVM's
> > > version of altivec.h, vec_sld was previously defined in terms of
> > > the
> > > vec_perm interface. Because vec_perm semantics are adjusted for
> > > little endian, this means that leaving vec_sld untouched causes
> > > it to
> > > generate something different for LE than for BE. Not good.
> > >
> > > This patch adjusts the form of vec_perm that is used for vec_sld
> > > and
> > > vec_vsldoi, effectively undoing the modifications so that the
> > > same
> > > vsldoi instruction will be generated for both BE and LE.
> > >
> > > There is an accompanying back-end patch to take care of some
> > > small
> > > ripple effects caused by these changes.
> > >
> > > Modified:
> > > cfe/trunk/lib/Headers/altivec.h
> > >
> > > Modified: cfe/trunk/lib/Headers/altivec.h
> > > URL:
> > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/altivec.h?rev=242297&r1=242296&r2=242297&view=diff
> > > ==============================================================================
> > > --- cfe/trunk/lib/Headers/altivec.h (original)
> > > +++ cfe/trunk/lib/Headers/altivec.h Wed Jul 15 10:45:53 2015
> > > @@ -6563,119 +6563,218 @@ static vector signed char __ATTRS_o_ai
> > > v
> > > vector signed
> > > char
> > > __b,
> > > unsigned const
> > > int
> > > __c) {
> > > unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > static vector unsigned char __ATTRS_o_ai vec_sld(vector unsigned
> > > char __a,
> > > vector unsigned
> > > char __b,
> > > unsigned const
> > > int
> > > __c) {
> > > unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > static vector bool char __ATTRS_o_ai vec_sld(vector bool char
> > > __a,
> > > vector bool char
> > > __b,
> > > unsigned const int
> > > __c)
> > > {
> > > unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > static vector signed short __ATTRS_o_ai vec_sld(vector signed
> > > short
> > > __a,
> > > vector signed
> > > short
> > > __b,
> > > unsigned const
> > > int
> > > __c) {
> > > unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > static vector unsigned short __ATTRS_o_ai vec_sld(vector
> > > unsigned
> > > short __a,
> > > vector
> > > unsigned
> > > short __b,
> > > unsigned const
> > > int
> > > __c) {
> > > unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > static vector bool short __ATTRS_o_ai vec_sld(vector bool short
> > > __a,
> > > vector bool short
> > > __b,
> > > unsigned const int
> > > __c) {
> > > unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > static vector pixel __ATTRS_o_ai vec_sld(vector pixel __a,
> > > vector
> > > pixel __b,
> > > unsigned const int __c)
> > > {
> > > unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > static vector signed int __ATTRS_o_ai vec_sld(vector signed int
> > > __a,
> > > vector signed int
> > > __b,
> > > unsigned const int
> > > __c) {
> > > unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > static vector unsigned int __ATTRS_o_ai vec_sld(vector unsigned
> > > int
> > > __a,
> > > vector unsigned
> > > int
> > > __b,
> > > unsigned const
> > > int
> > > __c) {
> > > unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > static vector bool int __ATTRS_o_ai vec_sld(vector bool int __a,
> > > vector bool int __b,
> > > unsigned const int
> > > __c)
> > > {
> > > unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > static vector float __ATTRS_o_ai vec_sld(vector float __a,
> > > vector
> > > float __b,
> > > unsigned const int __c)
> > > {
> > > unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > /* vec_vsldoi */
> > > @@ -6683,77 +6782,157 @@ static vector float __ATTRS_o_ai vec_sld
> > > static vector signed char __ATTRS_o_ai vec_vsldoi(vector signed
> > > char
> > > __a,
> > > vector signed
> > > char
> > > __b,
> > > unsigned char
> > > __c)
> > > {
> > > + unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > - (vector unsigned char)(__c, __c + 1, __c + 2, __c + 3, __c
> > > +
> > > 4, __c + 5,
> > > - __c + 6, __c + 7, __c + 8, __c + 9,
> > > __c
> > > + 10,
> > > - __c + 11, __c + 12, __c + 13, __c +
> > > 14,
> > > __c + 15));
> > > + (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > + __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > + __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > static vector unsigned char __ATTRS_o_ai vec_vsldoi(vector
> > > unsigned
> > > char __a,
> > > vector
> > > unsigned
> > > char __b,
> > > unsigned
> > > char
> > > __c) {
> > > + unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > - (vector unsigned char)(__c, __c + 1, __c + 2, __c + 3, __c
> > > +
> > > 4, __c + 5,
> > > - __c + 6, __c + 7, __c + 8, __c + 9,
> > > __c
> > > + 10,
> > > - __c + 11, __c + 12, __c + 13, __c +
> > > 14,
> > > __c + 15));
> > > + (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > + __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > + __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > static vector short __ATTRS_o_ai vec_vsldoi(vector short __a,
> > > vector
> > > short __b,
> > > unsigned char __c) {
> > > + unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > - (vector unsigned char)(__c, __c + 1, __c + 2, __c + 3, __c
> > > +
> > > 4, __c + 5,
> > > - __c + 6, __c + 7, __c + 8, __c + 9,
> > > __c
> > > + 10,
> > > - __c + 11, __c + 12, __c + 13, __c +
> > > 14,
> > > __c + 15));
> > > + (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > + __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > + __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > static vector unsigned short __ATTRS_o_ai vec_vsldoi(vector
> > > unsigned
> > > short __a,
> > > vector
> > > unsigned
> > > short __b,
> > > unsigned
> > > char
> > > __c) {
> > > + unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > - (vector unsigned char)(__c, __c + 1, __c + 2, __c + 3, __c
> > > +
> > > 4, __c + 5,
> > > - __c + 6, __c + 7, __c + 8, __c + 9,
> > > __c
> > > + 10,
> > > - __c + 11, __c + 12, __c + 13, __c +
> > > 14,
> > > __c + 15));
> > > + (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > + __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > + __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > static vector pixel __ATTRS_o_ai vec_vsldoi(vector pixel __a,
> > > vector
> > > pixel __b,
> > > unsigned char __c) {
> > > + unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > - (vector unsigned char)(__c, __c + 1, __c + 2, __c + 3, __c
> > > +
> > > 4, __c + 5,
> > > - __c + 6, __c + 7, __c + 8, __c + 9,
> > > __c
> > > + 10,
> > > - __c + 11, __c + 12, __c + 13, __c +
> > > 14,
> > > __c + 15));
> > > + (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > + __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > + __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > static vector int __ATTRS_o_ai vec_vsldoi(vector int __a, vector
> > > int
> > > __b,
> > > unsigned char __c) {
> > > + unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > - (vector unsigned char)(__c, __c + 1, __c + 2, __c + 3, __c
> > > +
> > > 4, __c + 5,
> > > - __c + 6, __c + 7, __c + 8, __c + 9,
> > > __c
> > > + 10,
> > > - __c + 11, __c + 12, __c + 13, __c +
> > > 14,
> > > __c + 15));
> > > + (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > + __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > + __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > static vector unsigned int __ATTRS_o_ai vec_vsldoi(vector
> > > unsigned
> > > int __a,
> > > vector
> > > unsigned
> > > int __b,
> > > unsigned char
> > > __c) {
> > > + unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > - (vector unsigned char)(__c, __c + 1, __c + 2, __c + 3, __c
> > > +
> > > 4, __c + 5,
> > > - __c + 6, __c + 7, __c + 8, __c + 9,
> > > __c
> > > + 10,
> > > - __c + 11, __c + 12, __c + 13, __c +
> > > 14,
> > > __c + 15));
> > > + (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > + __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > + __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > static vector float __ATTRS_o_ai vec_vsldoi(vector float __a,
> > > vector
> > > float __b,
> > > unsigned char __c) {
> > > + unsigned char __d = __c & 0x0F;
> > > +#ifdef __LITTLE_ENDIAN__
> > > + return vec_perm(
> > > + __b, __a,
> > > + (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 -
> > > __d,
> > > 20 - __d,
> > > + 21 - __d, 22 - __d, 23 - __d, 24 -
> > > __d,
> > > 25 - __d,
> > > + 26 - __d, 27 - __d, 28 - __d, 29 -
> > > __d,
> > > 30 - __d,
> > > + 31 - __d));
> > > +#else
> > > return vec_perm(
> > > __a, __b,
> > > - (vector unsigned char)(__c, __c + 1, __c + 2, __c + 3, __c
> > > +
> > > 4, __c + 5,
> > > - __c + 6, __c + 7, __c + 8, __c + 9,
> > > __c
> > > + 10,
> > > - __c + 11, __c + 12, __c + 13, __c +
> > > 14,
> > > __c + 15));
> > > + (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d
> > > +
> > > 4, __d + 5,
> > > + __d + 6, __d + 7, __d + 8, __d + 9,
> > > __d
> > > + 10,
> > > + __d + 11, __d + 12, __d + 13, __d +
> > > 14,
> > > __d + 15));
> > > +#endif
> > > }
> > >
> > > /* vec_sll */
> > >
> > >
> > > _______________________________________________
> > > cfe-commits mailing list
> > > cfe-commits at cs.uiuc.edu
> > > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> > >
> >
>
>
>
--
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory
More information about the cfe-commits
mailing list