2 /* { dg-require-effective-target sse4 } */
3 /* { dg-options "-O2 -msse4.1" } */
6 #define CHECK_H "sse4_1-check.h"
10 #define TEST sse4_1_test
15 #include <smmintrin.h>
21 init_pblendvb (unsigned char *src1
, unsigned char *src2
,
26 for (i
= 0; i
< NUM
* 16; i
++)
28 src1
[i
] = i
* i
* sign
;
29 src2
[i
] = (i
+ 20) * sign
;
30 mask
[i
] = (i
% 3) + ((i
* (14 + sign
))
31 ^ (src1
[i
] | src2
[i
] | (i
*3)));
37 check_pblendvb (__m128i
*dst
, unsigned char *src1
,
38 unsigned char *src2
, unsigned char *mask
)
40 unsigned char tmp
[16];
43 memcpy (&tmp
[0], src1
, sizeof (tmp
));
44 for (j
= 0; j
< 16; j
++)
48 return memcmp (dst
, &tmp
[0], sizeof (tmp
));
57 unsigned char c
[NUM
* 16];
58 } dst
, src1
, src2
, mask
;
61 init_pblendvb (src1
.c
, src2
.c
, mask
.c
);
63 for (i
= 0; i
< NUM
; i
++)
65 dst
.x
[i
] = _mm_blendv_epi8 (src1
.x
[i
], src2
.x
[i
], mask
.x
[i
]);
66 if (check_pblendvb (&dst
.x
[i
], &src1
.c
[i
* 16], &src2
.c
[i
* 16],