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>
45 unsigned char ins
[4] = { 3, 4, 5, 6 };
48 val
.i
[0] = 0x35251505;
49 val
.i
[1] = 0x75655545;
50 val
.i
[2] = 0xB5A59585;
51 val
.i
[3] = 0xF5E5D5C5;
53 /* Check pinsrb imm8, r32, xmm. */
54 res
[0].x
= _mm_insert_epi8 (val
.x
, ins
[0], msk0
);
55 res
[1].x
= _mm_insert_epi8 (val
.x
, ins
[0], msk1
);
56 res
[2].x
= _mm_insert_epi8 (val
.x
, ins
[0], msk2
);
57 res
[3].x
= _mm_insert_epi8 (val
.x
, ins
[0], msk3
);
58 res
[4].x
= _mm_insert_epi8 (val
.x
, ins
[0], msk4
);
59 res
[5].x
= _mm_insert_epi8 (val
.x
, ins
[0], msk5
);
60 res
[6].x
= _mm_insert_epi8 (val
.x
, ins
[0], msk6
);
61 res
[7].x
= _mm_insert_epi8 (val
.x
, ins
[0], msk7
);
62 res
[8].x
= _mm_insert_epi8 (val
.x
, ins
[0], msk8
);
63 res
[9].x
= _mm_insert_epi8 (val
.x
, ins
[0], msk9
);
64 res
[10].x
= _mm_insert_epi8 (val
.x
, ins
[0], mskA
);
65 res
[11].x
= _mm_insert_epi8 (val
.x
, ins
[0], mskB
);
66 res
[12].x
= _mm_insert_epi8 (val
.x
, ins
[0], mskC
);
67 res
[13].x
= _mm_insert_epi8 (val
.x
, ins
[0], mskD
);
68 res
[14].x
= _mm_insert_epi8 (val
.x
, ins
[0], mskE
);
69 res
[15].x
= _mm_insert_epi8 (val
.x
, ins
[0], mskF
);
88 for (i
= 0; i
< 16; i
++)
91 tmp
.c
[masks
[i
]] = ins
[0];
92 if (memcmp (&tmp
, &res
[i
], sizeof (tmp
)))
96 /* Check pinsrb imm8, m8, xmm. */
97 for (i
= 0; i
< 16; i
++)
99 res
[i
].x
= _mm_insert_epi8 (val
.x
, ins
[i
% 4], msk0
);
103 for (i
= 0; i
< 16; i
++)
106 tmp
.c
[masks
[i
]] = ins
[i
% 4];
107 if (memcmp (&tmp
, &res
[i
], sizeof (tmp
)))