----- Original Message ----- > From: "Bill Schmidt" <[email protected]> > To: "Hal Finkel" <[email protected]> > Cc: [email protected] > 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" <[email protected]> > > > To: [email protected] > > > 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 > > > [email protected] > > > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > > > > > > > > -- Hal Finkel Assistant Computational Scientist Leadership Computing Facility Argonne National Laboratory _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
