On Mon, Apr 8, 2013 at 10:47 PM, Marc Glisse <marc.gli...@inria.fr> wrote: > On Sun, 7 Apr 2013, Marc Glisse wrote: > >> extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, >> __artificial__)) >> _mm_slli_epi16 (__m128i __A, int __B) >> { >> - return (__m128i)__builtin_ia32_psllwi128 ((__v8hi)__A, __B); >> + return (__m128i) ((__v8hi)__A << __B); >> } > > > Actually, I believe I have to keep using the builtins for shifts, because > the intrinsics have well defined behavior for large __B whereas << and >> > don't.
I seem to remember discussion in the PR(s) that the intrinsics should (and do for other compilers) expand to the desired instructions even when the corresponding instruction set is disabled. Using vector extension makes that harder to achieve. Other than that I am all for using the vector extensions, but I think you need carefully wrapped __extension__ markers so that with -std=c89 -pedantic you still can compile programs using the intrinsics? Richard. > -- > Marc Glisse