On 02/21/2014 08:30 AM, Tejas Belagod wrote: > + /* If two vectors, we end up with a wierd mixed-endian mode on NEON. > */ > + if (BYTES_BIG_ENDIAN) > + { > + if (!d->one_vector_p && d->perm[i] & nunits) > + { > + /* Extract the offset. */ > + elt = d->perm[i] & (nunits - 1); > + /* Reverse the top half. */ > + elt = nunits - 1 - elt; > + /* Offset it by the bottom half. */ > + elt += nunits; > + } > + else > + elt = nunits - 1 - d->perm[i]; > + }
Isn't this just elt = d->perm[i] ^ (nunits - 1); all the time? I.e. invert the index within the word, but leave the word index (nunits) unchanged. r~