On Thu, Jun 21, 2007 at 10:14:55AM +0200, Uros Bizjak wrote:
> Hello H.J.!
>
> The testscase gcc.target/i386/sse2-vec-5.c you ported from mainline
> fails on gcc-4.2 branch because __builtin_ia32_vec_ext_v16qi builtin
> does not exist in gcc-4.2. This builtin corresponds to pextrb insn
> that was introduced in SSE4 (gcc-4.3).
>
> Also, the definition of __builtin_ia32_vec_ext_v16qi in the mainline
> should be enabled only for OPTION_MASK_ISA_SSE4_1, as current
> definition is also enabled for SSE2:
>
> def_builtin (OPTION_MASK_ISA_SSE2, "__builtin_ia32_vec_ext_v16qi",
> ftype, IX86_BUILTIN_VEC_EXT_V16QI);
>
> I propose that sse2-vec-5.c is removed from the testsuite in gcc-4_2
> branch and mainline.
__builtin_ia32_vec_ext_v16qi, like many other vector extra builtins,
is supported by SSE2, but not with single instruction. I don't think
it should be removed from mainline.
bash-3.1$ cat /tmp/v.c
#include <emmintrin.h>
int
foo (__m128i x)
{
return __builtin_ia32_vec_ext_v16qi ((__v16qi) x, 3);
}
bash-3.1$ ./xgcc -B./ -msse2 -O -S /tmp/v.c -m32
bash-3.1$ cat v.s
.file "v.c"
.text
.globl foo
.type foo, @function
foo:
pushl %ebp
movl %esp, %ebp
movdqa %xmm0, -24(%ebp)
movsbl -21(%ebp),%eax
leave
ret
.size foo, .-foo
.ident "GCC: (GNU) 4.3.0 20070619 (experimental) [trunk
revision 125849]"
.section .note.GNU-stack,"",@progbits
bash-3.1$
I will remove sse2-vec-5.c from 4.2 since __builtin_ia32_vec_ext_v16qi
isn't available there.
H.J.