i386.c (ix86_builtins): Add IX86_BUILTIN_VEC_EXT_V16QI.

gcc/

2007-06-21  H.J. Lu  <hongjiu.lu@intel.com>

	* config/i386/i386.c (ix86_builtins): Add IX86_BUILTIN_VEC_EXT_V16QI.
	(ix86_init_mmx_sse_builtins): Add __builtin_ia32_vec_ext_v16qi.
	(ix86_expand_builtin): Handle IX86_BUILTIN_VEC_EXT_V16QI.

gcc/testsuite/

2007-06-21  H.J. Lu  <hongjiu.lu@intel.com>

	* gcc.target/i386/sse2-vec-5.c: Restored.

From-SVN: r125923
This commit is contained in:
H.J. Lu
2007-06-21 15:47:40 +00:00
committed by H.J. Lu
parent 7108dea517
commit add4577730
4 changed files with 61 additions and 4 deletions

View File

@@ -1,3 +1,9 @@
2007-06-21 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/i386.c (ix86_builtins): Add IX86_BUILTIN_VEC_EXT_V16QI.
(ix86_init_mmx_sse_builtins): Add __builtin_ia32_vec_ext_v16qi.
(ix86_expand_builtin): Handle IX86_BUILTIN_VEC_EXT_V16QI.
2007-06-21 Jakub Jelinek <jakub@redhat.com>
PR middle-end/32362

View File

@@ -14570,6 +14570,7 @@ enum ix86_builtins
IX86_BUILTIN_VEC_EXT_V4SF,
IX86_BUILTIN_VEC_EXT_V4SI,
IX86_BUILTIN_VEC_EXT_V8HI,
IX86_BUILTIN_VEC_EXT_V16QI,
IX86_BUILTIN_VEC_EXT_V2SI,
IX86_BUILTIN_VEC_EXT_V4HI,
IX86_BUILTIN_VEC_SET_V8HI,
@@ -15576,6 +15577,10 @@ ix86_init_mmx_sse_builtins (void)
def_builtin (MASK_MMX, "__builtin_ia32_vec_ext_v2si",
ftype, IX86_BUILTIN_VEC_EXT_V2SI);
ftype = build_function_type_list (intQI_type_node, V16QI_type_node,
integer_type_node, NULL_TREE);
def_builtin (MASK_SSE2, "__builtin_ia32_vec_ext_v16qi", ftype, IX86_BUILTIN_VEC_EXT_V16QI);
/* Access to the vec_set patterns. */
ftype = build_function_type_list (V8HI_type_node, V8HI_type_node,
intHI_type_node,
@@ -16492,6 +16497,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
case IX86_BUILTIN_VEC_EXT_V4SF:
case IX86_BUILTIN_VEC_EXT_V4SI:
case IX86_BUILTIN_VEC_EXT_V8HI:
case IX86_BUILTIN_VEC_EXT_V16QI:
case IX86_BUILTIN_VEC_EXT_V2SI:
case IX86_BUILTIN_VEC_EXT_V4HI:
return ix86_expand_vec_ext_builtin (arglist, target);

View File

@@ -1,7 +1,3 @@
2007-06-21 H.J. Lu <hongjiu.lu@intel.com>
* gcc.target/i386/sse2-vec-5.c: Removed.
2007-06-21 Uros Bizjak <ubizjak@gmail.com>
PR target/32389

View File

@@ -0,0 +1,49 @@
/* { dg-do run { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-O2 -msse2" } */
#include "sse2-check.h"
#include <emmintrin.h>
static void
sse2_test (void)
{
union
{
__m128i x;
char c[16];
short s[8];
int i[4];
long long ll[2];
} val1;
char res[16];
int masks[16];
int i;
for (i = 0; i < 16; i++)
val1.c[i] = i;
res[0] = __builtin_ia32_vec_ext_v16qi ((__v16qi)val1.x, 0);
res[1] = __builtin_ia32_vec_ext_v16qi ((__v16qi)val1.x, 1);
res[2] = __builtin_ia32_vec_ext_v16qi ((__v16qi)val1.x, 2);
res[3] = __builtin_ia32_vec_ext_v16qi ((__v16qi)val1.x, 3);
res[4] = __builtin_ia32_vec_ext_v16qi ((__v16qi)val1.x, 4);
res[5] = __builtin_ia32_vec_ext_v16qi ((__v16qi)val1.x, 5);
res[6] = __builtin_ia32_vec_ext_v16qi ((__v16qi)val1.x, 6);
res[7] = __builtin_ia32_vec_ext_v16qi ((__v16qi)val1.x, 7);
res[8] = __builtin_ia32_vec_ext_v16qi ((__v16qi)val1.x, 8);
res[9] = __builtin_ia32_vec_ext_v16qi ((__v16qi)val1.x, 9);
res[10] = __builtin_ia32_vec_ext_v16qi ((__v16qi)val1.x, 10);
res[11] = __builtin_ia32_vec_ext_v16qi ((__v16qi)val1.x, 11);
res[12] = __builtin_ia32_vec_ext_v16qi ((__v16qi)val1.x, 12);
res[13] = __builtin_ia32_vec_ext_v16qi ((__v16qi)val1.x, 13);
res[14] = __builtin_ia32_vec_ext_v16qi ((__v16qi)val1.x, 14);
res[15] = __builtin_ia32_vec_ext_v16qi ((__v16qi)val1.x, 15);
for (i = 0; i < 16; i++)
masks[i] = i;
for (i = 0; i < 16; i++)
if (res[i] != val1.c [masks[i]])
abort ();
}