This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [i386] Replace builtins with vector extensions
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: Marc Glisse <marc dot glisse at inria dot fr>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Tue, 9 Apr 2013 10:53:42 +0200
- Subject: Re: [i386] Replace builtins with vector extensions
- References: <alpine dot DEB dot 2 dot 02 dot 1304071030320 dot 4934 at stedding dot saclay dot inria dot fr> <alpine dot DEB dot 2 dot 02 dot 1304082243070 dot 3872 at laptop-mg dot saclay dot inria dot fr>
On Mon, Apr 8, 2013 at 10:47 PM, Marc Glisse <marc.glisse@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