2 /* { dg-options "-O2 -mvsx -Wno-psabi" } */
3 /* { dg-additional-options "-mdejagnu-cpu=power8" { target { ! has_arch_pwr8 } } } */
4 /* { dg-require-effective-target p8vector_hw } */
6 #define NO_WARN_X86_INTRINSICS 1
7 #include "sse4_1-check.h"
18 init_pblendw (short *src1
, short *src2
)
22 for (i
= 0; i
< NUM
* 8; i
++)
24 src1
[i
] = i
* i
* sign
;
25 src2
[i
] = (i
+ 20) * sign
;
31 check_pblendw (__m128i
*dst
, short *src1
, short *src2
)
36 memcpy (&tmp
[0], src1
, sizeof (tmp
));
37 for (j
= 0; j
< 8; j
++)
38 if ((MASK
& (1 << j
)))
41 return memcmp (dst
, &tmp
[0], sizeof (tmp
));
60 init_pblendw (src1
.s
, src2
.s
);
62 /* Check pblendw imm8, m128, xmm */
63 for (i
= 0; i
< NUM
; i
++)
65 dst
.x
[i
] = _mm_blend_epi16 (src1
.x
[i
], src2
.x
[i
], MASK
);
66 if (check_pblendw (&dst
.x
[i
], &src1
.s
[i
* 8], &src2
.s
[i
* 8]))
70 /* Check pblendw imm8, xmm, xmm */
71 src3
.x
= _mm_setzero_si128 ();
73 x
= _mm_blend_epi16 (dst
.x
[2], src3
.x
, MASK
);
74 y
= _mm_blend_epi16 (src3
.x
, dst
.x
[2], MASK
);
76 if (check_pblendw (&x
, &dst
.s
[16], &src3
.s
[0]))
79 if (check_pblendw (&y
, &src3
.s
[0], &dst
.s
[16]))