1 /* SPDX-License-Identifier: MIT
2  *
3  * Permission is hereby granted, free of charge, to any person
4  * obtaining a copy of this software and associated documentation
5  * files (the "Software"), to deal in the Software without
6  * restriction, including without limitation the rights to use, copy,
7  * modify, merge, publish, distribute, sublicense, and/or sell copies
8  * of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be
12  * included in all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
18  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
19  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21  * SOFTWARE.
22  *
23  * Copyright:
24  *   2020      Evan Nemerson <evan@nemerson.com>
25  *   2020      Hidayat Khan <huk2209@gmail.com>
26  *   2020      Christopher Moore <moore@free.fr>
27  */
28 
29 #define SIMDE_TEST_X86_AVX512_INSN slli
30 
31 #include <test/x86/avx512/test-avx512.h>
32 #include <simde/x86/avx512/set.h>
33 #include <simde/x86/avx512/slli.h>
34 
35 static int
test_simde_mm512_slli_epi16(SIMDE_MUNIT_TEST_ARGS)36 test_simde_mm512_slli_epi16 (SIMDE_MUNIT_TEST_ARGS) {
37   static const struct {
38     const int16_t a[32];
39     const int16_t r0[32];
40     const int16_t r3[32];
41     const int16_t r7[32];
42     const int16_t r13[32];
43     const int16_t r24[32];
44   } test_vec[] = {
45     { { -INT16_C(  4513), -INT16_C( 32064), -INT16_C( 20539),  INT16_C( 16953), -INT16_C( 19443),  INT16_C(  8904),  INT16_C( 17111), -INT16_C( 18058),
46          INT16_C(  9034), -INT16_C( 18739), -INT16_C( 25271),  INT16_C(  4847), -INT16_C( 27918), -INT16_C(  9400), -INT16_C(  4204), -INT16_C(  3107),
47         -INT16_C( 24867), -INT16_C( 23691), -INT16_C( 20915),  INT16_C( 23269), -INT16_C( 21149),  INT16_C( 14973), -INT16_C(  3088),  INT16_C( 15091),
48         -INT16_C( 16362),  INT16_C( 24561), -INT16_C(  8099),  INT16_C( 20594), -INT16_C( 17806),  INT16_C(  1579),  INT16_C(  2218), -INT16_C( 30727) },
49       { -INT16_C(  4513), -INT16_C( 32064), -INT16_C( 20539),  INT16_C( 16953), -INT16_C( 19443),  INT16_C(  8904),  INT16_C( 17111), -INT16_C( 18058),
50          INT16_C(  9034), -INT16_C( 18739), -INT16_C( 25271),  INT16_C(  4847), -INT16_C( 27918), -INT16_C(  9400), -INT16_C(  4204), -INT16_C(  3107),
51         -INT16_C( 24867), -INT16_C( 23691), -INT16_C( 20915),  INT16_C( 23269), -INT16_C( 21149),  INT16_C( 14973), -INT16_C(  3088),  INT16_C( 15091),
52         -INT16_C( 16362),  INT16_C( 24561), -INT16_C(  8099),  INT16_C( 20594), -INT16_C( 17806),  INT16_C(  1579),  INT16_C(  2218), -INT16_C( 30727) },
53       {  INT16_C( 29432),  INT16_C(  5632),  INT16_C( 32296),  INT16_C(  4552), -INT16_C( 24472),  INT16_C(  5696),  INT16_C(  5816), -INT16_C( 13392),
54          INT16_C(  6736), -INT16_C( 18840), -INT16_C(  5560), -INT16_C( 26760), -INT16_C( 26736), -INT16_C(  9664),  INT16_C( 31904), -INT16_C( 24856),
55         -INT16_C(  2328),  INT16_C(  7080),  INT16_C( 29288), -INT16_C( 10456),  INT16_C( 27416), -INT16_C( 11288), -INT16_C( 24704), -INT16_C( 10344),
56          INT16_C(   176), -INT16_C(   120),  INT16_C(   744), -INT16_C( 31856), -INT16_C( 11376),  INT16_C( 12632),  INT16_C( 17744),  INT16_C( 16328) },
57       {  INT16_C( 12160),  INT16_C( 24576), -INT16_C(  7552),  INT16_C(  7296),  INT16_C(  1664),  INT16_C( 25600),  INT16_C( 27520), -INT16_C( 17664),
58         -INT16_C( 23296),  INT16_C( 26240), -INT16_C( 23424),  INT16_C( 30592),  INT16_C( 30976), -INT16_C( 23552), -INT16_C( 13824), -INT16_C(  4480),
59          INT16_C( 28288), -INT16_C( 17792),  INT16_C(  9856),  INT16_C( 29312), -INT16_C( 20096),  INT16_C( 16000), -INT16_C(  2048),  INT16_C( 31104),
60          INT16_C(  2816), -INT16_C(  1920),  INT16_C( 11904),  INT16_C( 14592),  INT16_C( 14592),  INT16_C(  5504),  INT16_C( 21760), -INT16_C(   896) },
61       { -INT16_C(  8192),  INT16_C(     0), -INT16_C( 24576),  INT16_C(  8192), -INT16_C( 24576),  INT16_C(     0), -INT16_C(  8192), -INT16_C( 16384),
62          INT16_C( 16384), -INT16_C( 24576),  INT16_C(  8192), -INT16_C(  8192),  INT16_C( 16384),  INT16_C(     0),       INT16_MIN, -INT16_C( 24576),
63         -INT16_C( 24576), -INT16_C( 24576), -INT16_C( 24576), -INT16_C( 24576),  INT16_C( 24576), -INT16_C( 24576),  INT16_C(     0),  INT16_C( 24576),
64         -INT16_C( 16384),  INT16_C(  8192), -INT16_C( 24576),  INT16_C( 16384),  INT16_C( 16384),  INT16_C( 24576),  INT16_C( 16384),  INT16_C(  8192) },
65       {  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
66          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
67          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
68          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0) } },
69     { {  INT16_C( 28582), -INT16_C(  3030),  INT16_C(  3869), -INT16_C( 32690), -INT16_C( 13379), -INT16_C( 21062), -INT16_C( 20801), -INT16_C( 10777),
70         -INT16_C( 10130), -INT16_C( 13259), -INT16_C( 22600),  INT16_C( 11036),  INT16_C( 18273),  INT16_C(  2865),  INT16_C( 11087), -INT16_C(  2413),
71         -INT16_C( 16998), -INT16_C( 18454),  INT16_C( 14541), -INT16_C( 30152), -INT16_C(  3580), -INT16_C( 15561),  INT16_C(  7840),  INT16_C(  3992),
72         -INT16_C( 12809), -INT16_C( 20517), -INT16_C(  2188), -INT16_C( 10534),  INT16_C(  3134), -INT16_C( 29215),  INT16_C( 29751), -INT16_C( 11901) },
73       {  INT16_C( 28582), -INT16_C(  3030),  INT16_C(  3869), -INT16_C( 32690), -INT16_C( 13379), -INT16_C( 21062), -INT16_C( 20801), -INT16_C( 10777),
74         -INT16_C( 10130), -INT16_C( 13259), -INT16_C( 22600),  INT16_C( 11036),  INT16_C( 18273),  INT16_C(  2865),  INT16_C( 11087), -INT16_C(  2413),
75         -INT16_C( 16998), -INT16_C( 18454),  INT16_C( 14541), -INT16_C( 30152), -INT16_C(  3580), -INT16_C( 15561),  INT16_C(  7840),  INT16_C(  3992),
76         -INT16_C( 12809), -INT16_C( 20517), -INT16_C(  2188), -INT16_C( 10534),  INT16_C(  3134), -INT16_C( 29215),  INT16_C( 29751), -INT16_C( 11901) },
77       {  INT16_C( 32048), -INT16_C( 24240),  INT16_C( 30952),  INT16_C(   624),  INT16_C( 24040),  INT16_C( 28112),  INT16_C( 30200), -INT16_C( 20680),
78         -INT16_C( 15504),  INT16_C( 25000),  INT16_C( 15808),  INT16_C( 22752),  INT16_C( 15112),  INT16_C( 22920),  INT16_C( 23160), -INT16_C( 19304),
79         -INT16_C(  4912), -INT16_C( 16560), -INT16_C( 14744),  INT16_C( 20928), -INT16_C( 28640),  INT16_C(  6584), -INT16_C(  2816),  INT16_C( 31936),
80          INT16_C( 28600),  INT16_C( 32472), -INT16_C( 17504), -INT16_C( 18736),  INT16_C( 25072),  INT16_C( 28424), -INT16_C( 24136), -INT16_C( 29672) },
81       { -INT16_C( 11520),  INT16_C(  5376), -INT16_C( 29056),  INT16_C(  9984), -INT16_C(  8576), -INT16_C(  8960),  INT16_C( 24448), -INT16_C(  3200),
82          INT16_C( 14080),  INT16_C(  6784), -INT16_C(  9216), -INT16_C( 29184), -INT16_C( 20352), -INT16_C( 26496), -INT16_C( 22656),  INT16_C( 18816),
83         -INT16_C( 13056), -INT16_C(  2816),  INT16_C( 26240),  INT16_C(  7168),  INT16_C(   512), -INT16_C( 25728),  INT16_C( 20480), -INT16_C( 13312),
84         -INT16_C(  1152), -INT16_C(  4736), -INT16_C( 17920),  INT16_C( 27904),  INT16_C(  7936), -INT16_C(  3968),  INT16_C(  7040), -INT16_C( 16000) },
85       { -INT16_C( 16384),  INT16_C( 16384), -INT16_C( 24576), -INT16_C( 16384), -INT16_C( 24576),  INT16_C( 16384), -INT16_C(  8192), -INT16_C(  8192),
86         -INT16_C( 16384), -INT16_C( 24576),  INT16_C(     0),       INT16_MIN,  INT16_C(  8192),  INT16_C(  8192), -INT16_C(  8192),  INT16_C( 24576),
87          INT16_C( 16384),  INT16_C( 16384), -INT16_C( 24576),  INT16_C(     0),       INT16_MIN, -INT16_C(  8192),  INT16_C(     0),  INT16_C(     0),
88         -INT16_C(  8192),  INT16_C( 24576),       INT16_MIN,  INT16_C( 16384), -INT16_C( 16384),  INT16_C(  8192), -INT16_C(  8192),  INT16_C( 24576) },
89       {  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
90          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
91          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
92          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0) } },
93     { {  INT16_C( 27954), -INT16_C(   120), -INT16_C( 16218), -INT16_C( 21879), -INT16_C( 16205),  INT16_C( 21357),  INT16_C(  1502), -INT16_C( 10910),
94          INT16_C( 15827),  INT16_C( 18309),  INT16_C( 24372),  INT16_C( 29213), -INT16_C(   149), -INT16_C( 24064), -INT16_C( 31885), -INT16_C( 23181),
95         -INT16_C(   783), -INT16_C( 26716),  INT16_C( 11708),  INT16_C( 28481), -INT16_C( 20755), -INT16_C( 13117),  INT16_C(  9651), -INT16_C( 31071),
96          INT16_C(  9827), -INT16_C( 26674), -INT16_C(  5242), -INT16_C(  3830),  INT16_C(  2794),  INT16_C( 24212),  INT16_C(  1933),  INT16_C( 32259) },
97       {  INT16_C( 27954), -INT16_C(   120), -INT16_C( 16218), -INT16_C( 21879), -INT16_C( 16205),  INT16_C( 21357),  INT16_C(  1502), -INT16_C( 10910),
98          INT16_C( 15827),  INT16_C( 18309),  INT16_C( 24372),  INT16_C( 29213), -INT16_C(   149), -INT16_C( 24064), -INT16_C( 31885), -INT16_C( 23181),
99         -INT16_C(   783), -INT16_C( 26716),  INT16_C( 11708),  INT16_C( 28481), -INT16_C( 20755), -INT16_C( 13117),  INT16_C(  9651), -INT16_C( 31071),
100          INT16_C(  9827), -INT16_C( 26674), -INT16_C(  5242), -INT16_C(  3830),  INT16_C(  2794),  INT16_C( 24212),  INT16_C(  1933),  INT16_C( 32259) },
101       {  INT16_C( 27024), -INT16_C(   960),  INT16_C(  1328),  INT16_C( 21576),  INT16_C(  1432), -INT16_C( 25752),  INT16_C( 12016), -INT16_C( 21744),
102         -INT16_C(  4456),  INT16_C( 15400), -INT16_C(  1632), -INT16_C( 28440), -INT16_C(  1192),  INT16_C(  4096),  INT16_C(  7064),  INT16_C( 11160),
103         -INT16_C(  6264), -INT16_C( 17120),  INT16_C( 28128),  INT16_C( 31240),  INT16_C( 30568),  INT16_C( 26136),  INT16_C( 11672),  INT16_C( 13576),
104          INT16_C( 13080), -INT16_C( 16784),  INT16_C( 23600), -INT16_C( 30640),  INT16_C( 22352), -INT16_C(  2912),  INT16_C( 15464), -INT16_C(  4072) },
105       { -INT16_C( 26368), -INT16_C( 15360),  INT16_C( 21248),  INT16_C( 17536),  INT16_C( 22912), -INT16_C( 18816), -INT16_C(  4352), -INT16_C( 20224),
106         -INT16_C(  5760), -INT16_C( 15744), -INT16_C( 26112),  INT16_C(  3712), -INT16_C( 19072),  INT16_C(     0), -INT16_C( 18048), -INT16_C( 18048),
107          INT16_C( 30848), -INT16_C( 11776), -INT16_C(  8704), -INT16_C( 24448),  INT16_C( 30336),  INT16_C( 24960), -INT16_C(  9856),  INT16_C( 20608),
108          INT16_C( 12672), -INT16_C(  6400), -INT16_C( 15616), -INT16_C( 31488),  INT16_C( 29952),  INT16_C( 18944), -INT16_C( 14720),  INT16_C(   384) },
109       {  INT16_C( 16384),  INT16_C(     0), -INT16_C( 16384),  INT16_C(  8192),  INT16_C( 24576), -INT16_C( 24576), -INT16_C( 16384),  INT16_C( 16384),
110          INT16_C( 24576), -INT16_C( 24576),       INT16_MIN, -INT16_C( 24576),  INT16_C( 24576),  INT16_C(     0),  INT16_C( 24576),  INT16_C( 24576),
111          INT16_C(  8192),       INT16_MIN,       INT16_MIN,  INT16_C(  8192), -INT16_C( 24576),  INT16_C( 24576),  INT16_C( 24576),  INT16_C(  8192),
112          INT16_C( 24576), -INT16_C( 16384), -INT16_C( 16384),  INT16_C( 16384),  INT16_C( 16384),       INT16_MIN, -INT16_C( 24576),  INT16_C( 24576) },
113       {  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
114          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
115          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
116          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0) } },
117     { { -INT16_C( 22525), -INT16_C( 16363),  INT16_C( 22229), -INT16_C( 15569), -INT16_C(  3580), -INT16_C( 18289),  INT16_C( 12312),  INT16_C( 31550),
118          INT16_C(  3159), -INT16_C(  8942),  INT16_C(  7416), -INT16_C(  7474),  INT16_C( 25126), -INT16_C( 19392),  INT16_C( 17514),  INT16_C( 27954),
119          INT16_C( 18668), -INT16_C( 16083),  INT16_C( 23966), -INT16_C( 23676),  INT16_C(  4943),  INT16_C( 26459), -INT16_C( 26300), -INT16_C( 25630),
120         -INT16_C(  2650), -INT16_C( 24968),  INT16_C( 17937),  INT16_C( 14464), -INT16_C( 15959),  INT16_C(  5100),  INT16_C(  7685), -INT16_C(  3712) },
121       { -INT16_C( 22525), -INT16_C( 16363),  INT16_C( 22229), -INT16_C( 15569), -INT16_C(  3580), -INT16_C( 18289),  INT16_C( 12312),  INT16_C( 31550),
122          INT16_C(  3159), -INT16_C(  8942),  INT16_C(  7416), -INT16_C(  7474),  INT16_C( 25126), -INT16_C( 19392),  INT16_C( 17514),  INT16_C( 27954),
123          INT16_C( 18668), -INT16_C( 16083),  INT16_C( 23966), -INT16_C( 23676),  INT16_C(  4943),  INT16_C( 26459), -INT16_C( 26300), -INT16_C( 25630),
124         -INT16_C(  2650), -INT16_C( 24968),  INT16_C( 17937),  INT16_C( 14464), -INT16_C( 15959),  INT16_C(  5100),  INT16_C(  7685), -INT16_C(  3712) },
125       {  INT16_C( 16408),  INT16_C(   168), -INT16_C( 18776),  INT16_C(  6520), -INT16_C( 28640), -INT16_C( 15240), -INT16_C( 32576), -INT16_C(  9744),
126          INT16_C( 25272), -INT16_C(  6000), -INT16_C(  6208),  INT16_C(  5744),  INT16_C(  4400), -INT16_C( 24064),  INT16_C(  9040),  INT16_C( 27024),
127          INT16_C( 18272),  INT16_C(  2408), -INT16_C(  4880),  INT16_C(  7200), -INT16_C( 25992),  INT16_C( 15064), -INT16_C( 13792), -INT16_C(  8432),
128         -INT16_C( 21200), -INT16_C(  3136),  INT16_C( 12424), -INT16_C( 15360),  INT16_C(  3400), -INT16_C( 24736), -INT16_C(  4056), -INT16_C( 29696) },
129       {  INT16_C(   384),  INT16_C(  2688),  INT16_C( 27264), -INT16_C( 26752),  INT16_C(   512),  INT16_C( 18304),  INT16_C(  3072), -INT16_C( 24832),
130          INT16_C( 11136), -INT16_C( 30464),  INT16_C( 31744),  INT16_C( 26368),  INT16_C(  4864),  INT16_C(  8192),  INT16_C( 13568), -INT16_C( 26368),
131          INT16_C( 30208), -INT16_C( 27008), -INT16_C( 12544), -INT16_C( 15872), -INT16_C( 22656), -INT16_C( 21120), -INT16_C( 24064), -INT16_C(  3840),
132         -INT16_C( 11520),  INT16_C( 15360),  INT16_C(  2176),  INT16_C( 16384), -INT16_C( 11136), -INT16_C(  2560),  INT16_C(   640), -INT16_C( 16384) },
133       {  INT16_C( 24576), -INT16_C( 24576), -INT16_C( 24576), -INT16_C(  8192),       INT16_MIN, -INT16_C(  8192),  INT16_C(     0), -INT16_C( 16384),
134         -INT16_C(  8192),  INT16_C( 16384),  INT16_C(     0), -INT16_C( 16384), -INT16_C( 16384),  INT16_C(     0),  INT16_C( 16384),  INT16_C( 16384),
135               INT16_MIN, -INT16_C( 24576), -INT16_C( 16384),       INT16_MIN, -INT16_C(  8192),  INT16_C( 24576),       INT16_MIN,  INT16_C( 16384),
136         -INT16_C( 16384),  INT16_C(     0),  INT16_C(  8192),  INT16_C(     0),  INT16_C(  8192),       INT16_MIN, -INT16_C( 24576),  INT16_C(     0) },
137       {  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
138          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
139          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
140          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0) } },
141     { { -INT16_C( 20890),  INT16_C(  1458),  INT16_C( 14091),  INT16_C( 23208),  INT16_C(   842), -INT16_C( 28990), -INT16_C( 23396),  INT16_C( 16937),
142         -INT16_C( 24167), -INT16_C( 21536),  INT16_C( 25064), -INT16_C( 28189), -INT16_C( 12510),  INT16_C( 10148),  INT16_C(  9453),  INT16_C( 21528),
143         -INT16_C( 13614), -INT16_C(  8871),  INT16_C(   257),  INT16_C( 19512), -INT16_C(  1532), -INT16_C( 24358),  INT16_C(  1182),  INT16_C( 14563),
144         -INT16_C( 15451), -INT16_C( 29213), -INT16_C( 14812),  INT16_C( 17950), -INT16_C( 15723), -INT16_C( 32147), -INT16_C( 31257), -INT16_C( 17962) },
145       { -INT16_C( 20890),  INT16_C(  1458),  INT16_C( 14091),  INT16_C( 23208),  INT16_C(   842), -INT16_C( 28990), -INT16_C( 23396),  INT16_C( 16937),
146         -INT16_C( 24167), -INT16_C( 21536),  INT16_C( 25064), -INT16_C( 28189), -INT16_C( 12510),  INT16_C( 10148),  INT16_C(  9453),  INT16_C( 21528),
147         -INT16_C( 13614), -INT16_C(  8871),  INT16_C(   257),  INT16_C( 19512), -INT16_C(  1532), -INT16_C( 24358),  INT16_C(  1182),  INT16_C( 14563),
148         -INT16_C( 15451), -INT16_C( 29213), -INT16_C( 14812),  INT16_C( 17950), -INT16_C( 15723), -INT16_C( 32147), -INT16_C( 31257), -INT16_C( 17962) },
149       {  INT16_C( 29488),  INT16_C( 11664), -INT16_C( 18344), -INT16_C( 10944),  INT16_C(  6736),  INT16_C( 30224),  INT16_C(  9440),  INT16_C(  4424),
150          INT16_C(  3272),  INT16_C( 24320),  INT16_C(  3904), -INT16_C( 28904),  INT16_C( 30992),  INT16_C( 15648),  INT16_C( 10088), -INT16_C( 24384),
151          INT16_C( 22160), -INT16_C(  5432),  INT16_C(  2056),  INT16_C( 25024), -INT16_C( 12256),  INT16_C(  1744),  INT16_C(  9456), -INT16_C( 14568),
152          INT16_C(  7464),  INT16_C( 28440),  INT16_C( 12576),  INT16_C( 12528),  INT16_C(  5288),  INT16_C(  4968),  INT16_C( 12088), -INT16_C( 12624) },
153       {  INT16_C( 13056), -INT16_C(  9984), -INT16_C( 31360),  INT16_C( 21504), -INT16_C( 23296),  INT16_C( 24832),  INT16_C( 19968),  INT16_C(  5248),
154         -INT16_C( 13184), -INT16_C(  4096), -INT16_C(  3072), -INT16_C(  3712), -INT16_C( 28416), -INT16_C( 11776),  INT16_C( 30336),  INT16_C(  3072),
155          INT16_C( 26880), -INT16_C( 21376), -INT16_C( 32640),  INT16_C(  7168),  INT16_C(   512),  INT16_C( 27904),  INT16_C( 20224),  INT16_C( 29056),
156         -INT16_C( 11648), -INT16_C(  3712),  INT16_C(  4608),  INT16_C(  3840),  INT16_C( 19072),  INT16_C( 13952), -INT16_C(  3200), -INT16_C(  5376) },
157       { -INT16_C( 16384),  INT16_C( 16384),  INT16_C( 24576),  INT16_C(     0),  INT16_C( 16384),  INT16_C( 16384),       INT16_MIN,  INT16_C(  8192),
158          INT16_C(  8192),  INT16_C(     0),  INT16_C(     0),  INT16_C( 24576),  INT16_C( 16384),       INT16_MIN, -INT16_C( 24576),  INT16_C(     0),
159          INT16_C( 16384),  INT16_C(  8192),  INT16_C(  8192),  INT16_C(     0),       INT16_MIN,  INT16_C( 16384), -INT16_C( 16384),  INT16_C( 24576),
160         -INT16_C( 24576),  INT16_C( 24576),       INT16_MIN, -INT16_C( 16384), -INT16_C( 24576), -INT16_C( 24576), -INT16_C(  8192), -INT16_C( 16384) },
161       {  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
162          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
163          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
164          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0) } },
165     { {  INT16_C( 12112),  INT16_C( 20887), -INT16_C( 12496),  INT16_C( 13469),  INT16_C( 30921),  INT16_C( 26581), -INT16_C( 18308),  INT16_C(  8607),
166         -INT16_C( 32133), -INT16_C( 24401), -INT16_C( 12984), -INT16_C(  8730),  INT16_C( 21648),  INT16_C( 30560),  INT16_C( 14041),  INT16_C( 10544),
167         -INT16_C( 14490), -INT16_C( 27013),  INT16_C(  6294),  INT16_C( 24523), -INT16_C( 24432),  INT16_C(  3271),  INT16_C( 26200), -INT16_C( 11474),
168         -INT16_C(  8727),  INT16_C( 12659),  INT16_C( 23210),  INT16_C( 14863),  INT16_C( 28590), -INT16_C( 30799), -INT16_C(  7515),  INT16_C(  2993) },
169       {  INT16_C( 12112),  INT16_C( 20887), -INT16_C( 12496),  INT16_C( 13469),  INT16_C( 30921),  INT16_C( 26581), -INT16_C( 18308),  INT16_C(  8607),
170         -INT16_C( 32133), -INT16_C( 24401), -INT16_C( 12984), -INT16_C(  8730),  INT16_C( 21648),  INT16_C( 30560),  INT16_C( 14041),  INT16_C( 10544),
171         -INT16_C( 14490), -INT16_C( 27013),  INT16_C(  6294),  INT16_C( 24523), -INT16_C( 24432),  INT16_C(  3271),  INT16_C( 26200), -INT16_C( 11474),
172         -INT16_C(  8727),  INT16_C( 12659),  INT16_C( 23210),  INT16_C( 14863),  INT16_C( 28590), -INT16_C( 30799), -INT16_C(  7515),  INT16_C(  2993) },
173       {  INT16_C( 31360), -INT16_C( 29512),  INT16_C( 31104), -INT16_C( 23320), -INT16_C( 14776),  INT16_C( 16040), -INT16_C( 15392),  INT16_C(  3320),
174          INT16_C(  5080),  INT16_C(  1400),  INT16_C( 27200), -INT16_C(  4304), -INT16_C( 23424), -INT16_C( 17664), -INT16_C( 18744),  INT16_C( 18816),
175          INT16_C( 15152), -INT16_C( 19496), -INT16_C( 15184), -INT16_C(   424),  INT16_C(  1152),  INT16_C( 26168),  INT16_C( 12992), -INT16_C( 26256),
176         -INT16_C(  4280), -INT16_C( 29800), -INT16_C( 10928), -INT16_C( 12168),  INT16_C( 32112),  INT16_C( 15752),  INT16_C(  5416),  INT16_C( 23944) },
177       { -INT16_C( 22528), -INT16_C( 13440), -INT16_C( 26624),  INT16_C( 20096),  INT16_C( 25728), -INT16_C(  5504),  INT16_C( 15872), -INT16_C( 12416),
178          INT16_C( 15744),  INT16_C( 22400), -INT16_C( 23552), -INT16_C(  3328),  INT16_C( 18432), -INT16_C( 20480),  INT16_C( 27776), -INT16_C( 26624),
179         -INT16_C( 19712),  INT16_C( 15744),  INT16_C( 19200), -INT16_C(  6784),  INT16_C( 18432),  INT16_C( 25472),  INT16_C( 11264), -INT16_C( 26880),
180         -INT16_C(  2944), -INT16_C( 18048),  INT16_C( 21760),  INT16_C(  1920), -INT16_C( 10496), -INT16_C( 10112),  INT16_C( 21120), -INT16_C( 10112) },
181       {  INT16_C(     0), -INT16_C(  8192),  INT16_C(     0), -INT16_C( 24576),  INT16_C(  8192), -INT16_C( 24576),       INT16_MIN, -INT16_C(  8192),
182          INT16_C( 24576), -INT16_C(  8192),  INT16_C(     0), -INT16_C( 16384),  INT16_C(     0),  INT16_C(     0),  INT16_C(  8192),  INT16_C(     0),
183         -INT16_C( 16384),  INT16_C( 24576), -INT16_C( 16384),  INT16_C( 24576),  INT16_C(     0), -INT16_C(  8192),  INT16_C(     0), -INT16_C( 16384),
184          INT16_C(  8192),  INT16_C( 24576),  INT16_C( 16384), -INT16_C(  8192), -INT16_C( 16384),  INT16_C(  8192), -INT16_C( 24576),  INT16_C(  8192) },
185       {  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
186          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
187          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
188          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0) } },
189     { {  INT16_C( 11433),  INT16_C( 16546),  INT16_C( 27972), -INT16_C( 10849),  INT16_C( 26125),  INT16_C( 26081),  INT16_C(  4045), -INT16_C( 18888),
190         -INT16_C( 21268), -INT16_C( 26649), -INT16_C(  2554), -INT16_C( 19247), -INT16_C( 31899),  INT16_C(  2875), -INT16_C(  5019),  INT16_C(  3606),
191         -INT16_C( 18408),  INT16_C( 23886), -INT16_C(  4571),  INT16_C( 12850),  INT16_C(  4948),  INT16_C(  8599), -INT16_C( 12253),  INT16_C(  4055),
192         -INT16_C( 16516), -INT16_C( 32090),  INT16_C( 30901),  INT16_C(  6966),  INT16_C( 29179),  INT16_C( 24614),  INT16_C( 15454),  INT16_C( 30318) },
193       {  INT16_C( 11433),  INT16_C( 16546),  INT16_C( 27972), -INT16_C( 10849),  INT16_C( 26125),  INT16_C( 26081),  INT16_C(  4045), -INT16_C( 18888),
194         -INT16_C( 21268), -INT16_C( 26649), -INT16_C(  2554), -INT16_C( 19247), -INT16_C( 31899),  INT16_C(  2875), -INT16_C(  5019),  INT16_C(  3606),
195         -INT16_C( 18408),  INT16_C( 23886), -INT16_C(  4571),  INT16_C( 12850),  INT16_C(  4948),  INT16_C(  8599), -INT16_C( 12253),  INT16_C(  4055),
196         -INT16_C( 16516), -INT16_C( 32090),  INT16_C( 30901),  INT16_C(  6966),  INT16_C( 29179),  INT16_C( 24614),  INT16_C( 15454),  INT16_C( 30318) },
197       {  INT16_C( 25928),  INT16_C(  1296),  INT16_C( 27168), -INT16_C( 21256),  INT16_C( 12392),  INT16_C( 12040),  INT16_C( 32360), -INT16_C( 20032),
198          INT16_C( 26464), -INT16_C( 16584), -INT16_C( 20432), -INT16_C( 22904),  INT16_C(  6952),  INT16_C( 23000),  INT16_C( 25384),  INT16_C( 28848),
199         -INT16_C( 16192), -INT16_C(  5520),  INT16_C( 28968), -INT16_C( 28272), -INT16_C( 25952),  INT16_C(  3256), -INT16_C( 32488),  INT16_C( 32440),
200         -INT16_C(  1056),  INT16_C(  5424), -INT16_C( 14936), -INT16_C(  9808), -INT16_C( 28712),  INT16_C(   304), -INT16_C(  7440), -INT16_C( 19600) },
201       {  INT16_C( 21632),  INT16_C( 20736), -INT16_C( 24064), -INT16_C( 12416),  INT16_C(  1664), -INT16_C(  3968), -INT16_C(  6528),  INT16_C(  7168),
202          INT16_C( 30208), -INT16_C(  3200),  INT16_C(   768),  INT16_C( 26752), -INT16_C( 19840), -INT16_C( 25216),  INT16_C( 12928),  INT16_C(  2816),
203          INT16_C(  3072), -INT16_C( 22784),  INT16_C(  4736),  INT16_C(  6400), -INT16_C( 22016), -INT16_C( 13440),  INT16_C(  4480), -INT16_C(  5248),
204         -INT16_C( 16896),  INT16_C( 21248),  INT16_C( 23168), -INT16_C( 25856), -INT16_C(   640),  INT16_C(  4864),  INT16_C( 12032),  INT16_C( 14080) },
205       {  INT16_C(  8192),  INT16_C( 16384),       INT16_MIN, -INT16_C(  8192), -INT16_C( 24576),  INT16_C(  8192), -INT16_C( 24576),  INT16_C(     0),
206               INT16_MIN, -INT16_C(  8192), -INT16_C( 16384),  INT16_C(  8192), -INT16_C( 24576),  INT16_C( 24576), -INT16_C( 24576), -INT16_C( 16384),
207          INT16_C(     0), -INT16_C( 16384), -INT16_C( 24576),  INT16_C( 16384),       INT16_MIN, -INT16_C(  8192),  INT16_C( 24576), -INT16_C(  8192),
208               INT16_MIN, -INT16_C( 16384), -INT16_C( 24576), -INT16_C( 16384),  INT16_C( 24576), -INT16_C( 16384), -INT16_C( 16384), -INT16_C( 16384) },
209       {  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
210          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
211          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
212          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0) } },
213     { { -INT16_C( 16907),  INT16_C(  6867),  INT16_C(  1451), -INT16_C(   179), -INT16_C(  7143),  INT16_C( 15393), -INT16_C(  1868),  INT16_C( 12363),
214         -INT16_C(  3401),  INT16_C( 28082), -INT16_C(  6038),  INT16_C( 25992), -INT16_C( 20902), -INT16_C( 18235),  INT16_C( 13290), -INT16_C(  8402),
215          INT16_C(   752), -INT16_C( 25606),  INT16_C( 18183),  INT16_C(  8347), -INT16_C( 17365), -INT16_C(  8100), -INT16_C( 22348),  INT16_C( 27664),
216         -INT16_C( 15462),  INT16_C(  1241),  INT16_C( 25003),  INT16_C(  1385),  INT16_C( 11791), -INT16_C(  1603), -INT16_C(  5023),  INT16_C( 21209) },
217       { -INT16_C( 16907),  INT16_C(  6867),  INT16_C(  1451), -INT16_C(   179), -INT16_C(  7143),  INT16_C( 15393), -INT16_C(  1868),  INT16_C( 12363),
218         -INT16_C(  3401),  INT16_C( 28082), -INT16_C(  6038),  INT16_C( 25992), -INT16_C( 20902), -INT16_C( 18235),  INT16_C( 13290), -INT16_C(  8402),
219          INT16_C(   752), -INT16_C( 25606),  INT16_C( 18183),  INT16_C(  8347), -INT16_C( 17365), -INT16_C(  8100), -INT16_C( 22348),  INT16_C( 27664),
220         -INT16_C( 15462),  INT16_C(  1241),  INT16_C( 25003),  INT16_C(  1385),  INT16_C( 11791), -INT16_C(  1603), -INT16_C(  5023),  INT16_C( 21209) },
221       { -INT16_C(  4184), -INT16_C( 10600),  INT16_C( 11608), -INT16_C(  1432),  INT16_C(  8392), -INT16_C(  7928), -INT16_C( 14944), -INT16_C( 32168),
222         -INT16_C( 27208),  INT16_C( 28048),  INT16_C( 17232),  INT16_C( 11328),  INT16_C( 29392), -INT16_C( 14808), -INT16_C( 24752), -INT16_C(  1680),
223          INT16_C(  6016), -INT16_C(  8240),  INT16_C( 14392),  INT16_C(  1240), -INT16_C(  7848),  INT16_C(   736),  INT16_C( 17824),  INT16_C( 24704),
224          INT16_C(  7376),  INT16_C(  9928),  INT16_C(  3416),  INT16_C( 11080),  INT16_C( 28792), -INT16_C( 12824),  INT16_C( 25352), -INT16_C( 26936) },
225       { -INT16_C(  1408),  INT16_C( 27008), -INT16_C( 10880), -INT16_C( 22912),  INT16_C(  3200),  INT16_C(  4224),  INT16_C( 23040),  INT16_C(  9600),
226          INT16_C( 23424), -INT16_C(  9984),  INT16_C( 13568), -INT16_C( 15360),  INT16_C( 11520),  INT16_C( 25216), -INT16_C(  2816), -INT16_C( 26880),
227          INT16_C( 30720), -INT16_C(   768), -INT16_C( 31872),  INT16_C( 19840),  INT16_C(  5504),  INT16_C( 11776),  INT16_C( 23040),  INT16_C(  2048),
228         -INT16_C( 13056),  INT16_C( 27776), -INT16_C( 10880), -INT16_C( 19328),  INT16_C(  1920), -INT16_C(  8576),  INT16_C( 12416),  INT16_C( 27776) },
229       { -INT16_C( 24576),  INT16_C( 24576),  INT16_C( 24576), -INT16_C( 24576),  INT16_C(  8192),  INT16_C(  8192),       INT16_MIN,  INT16_C( 24576),
230         -INT16_C(  8192),  INT16_C( 16384),  INT16_C( 16384),  INT16_C(     0),  INT16_C( 16384), -INT16_C( 24576),  INT16_C( 16384), -INT16_C( 16384),
231          INT16_C(     0),  INT16_C( 16384), -INT16_C(  8192),  INT16_C( 24576),  INT16_C( 24576),       INT16_MIN,       INT16_MIN,  INT16_C(     0),
232          INT16_C( 16384),  INT16_C(  8192),  INT16_C( 24576),  INT16_C(  8192), -INT16_C(  8192), -INT16_C( 24576),  INT16_C(  8192),  INT16_C(  8192) },
233       {  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
234          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
235          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),
236          INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0),  INT16_C(     0) } }
237   };
238 
239   for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
240     simde__m512i a = simde_mm512_loadu_epi16(test_vec[i].a);
241     simde__m512i r0 = simde_mm512_slli_epi16(a, 0);
242     simde_test_x86_assert_equal_i16x32(r0, simde_mm512_loadu_epi16(test_vec[i].r0));
243     simde__m512i r3 = simde_mm512_slli_epi16(a, 3);
244     simde_test_x86_assert_equal_i16x32(r3, simde_mm512_loadu_epi16(test_vec[i].r3));
245     simde__m512i r7 = simde_mm512_slli_epi16(a, 7);
246     simde_test_x86_assert_equal_i16x32(r7, simde_mm512_loadu_epi16(test_vec[i].r7));
247     simde__m512i r13 = simde_mm512_slli_epi16(a, 13);
248     simde_test_x86_assert_equal_i16x32(r13, simde_mm512_loadu_epi16(test_vec[i].r13));
249     simde__m512i r24 = simde_mm512_slli_epi16(a, 24);
250     simde_test_x86_assert_equal_i16x32(r24, simde_mm512_loadu_epi16(test_vec[i].r24));
251   }
252 
253   return 0;
254 }
255 
256 static int
test_simde_mm512_slli_epi32(SIMDE_MUNIT_TEST_ARGS)257 test_simde_mm512_slli_epi32(SIMDE_MUNIT_TEST_ARGS) {
258   const struct {
259     simde__m512i a;
260     unsigned int b;
261     simde__m512i r;
262   } test_vec[8] = {
263     { simde_mm512_set_epi32(INT32_C( -687706949), INT32_C( 1593775683), INT32_C(  332932989), INT32_C(  583872054),
264                             INT32_C( 1838832857), INT32_C(  847835558), INT32_C(-1396128258), INT32_C( -183977070),
265                             INT32_C( -902383138), INT32_C( -512492201), INT32_C(-1812249336), INT32_C( -562835271),
266                             INT32_C(-1029714159), INT32_C( 1476158556), INT32_C(  877549641), INT32_C( 1218378177)),
267       0xac,
268       simde_mm512_set_epi32(INT32_C(          0), INT32_C(          0), INT32_C(          0), INT32_C(          0),
269                             INT32_C(          0), INT32_C(          0), INT32_C(          0), INT32_C(          0),
270                             INT32_C(          0), INT32_C(          0), INT32_C(          0), INT32_C(          0),
271                             INT32_C(          0), INT32_C(          0), INT32_C(          0), INT32_C(          0)) },
272     { simde_mm512_set_epi32(INT32_C(  241549121), INT32_C( 1732816264), INT32_C(  875489890), INT32_C(   72071518),
273                             INT32_C(-1641761300), INT32_C(  313288882), INT32_C(-1735158939), INT32_C( 1219761116),
274                             INT32_C(  877921588), INT32_C( 2045964482), INT32_C( -360092415), INT32_C(-1302958505),
275                             INT32_C(-1122092800), INT32_C( -177019481), INT32_C(  875636041), INT32_C( -150268654)),
276       0x8017,
277       simde_mm512_set_epi32(INT32_C(          0), INT32_C(          0), INT32_C(          0), INT32_C(          0),
278                             INT32_C(          0), INT32_C(          0), INT32_C(          0), INT32_C(          0),
279                             INT32_C(          0), INT32_C(          0), INT32_C(          0), INT32_C(          0),
280                             INT32_C(          0), INT32_C(          0), INT32_C(          0), INT32_C(          0)) },
281     { simde_mm512_set_epi32(INT32_C(  -52534216), INT32_C( -794188551), INT32_C( -186449823), INT32_C( 1580979103),
282                             INT32_C( -972993456), INT32_C( -666426563), INT32_C( -645023430), INT32_C(-1043227266),
283                             INT32_C( 1237525980), INT32_C(  349749966), INT32_C( -978999744), INT32_C( -487689408),
284                             INT32_C(  898649460), INT32_C(-1217796896), INT32_C( 1277301360), INT32_C( 1454357892)),
285       0x10,
286       simde_mm512_set_epi32(INT32_C( 1681391616), INT32_C(-1527185408), INT32_C(    6356992), INT32_C( -744554496),
287                             INT32_C( 1280311296), INT32_C(  591200256), INT32_C(-1187381248), INT32_C(-1652686848),
288                             INT32_C(  635174912), INT32_C(-1026686976), INT32_C(-1505755136), INT32_C( 1933574144),
289                             INT32_C( 1299447808), INT32_C( -455081984), INT32_C(  309329920), INT32_C(-1115422720)) },
290     { simde_mm512_set_epi32(INT32_C(-1898779532), INT32_C( 1141724513), INT32_C( -782352739), INT32_C(  973072470),
291                             INT32_C( 1112939167), INT32_C(  368903984), INT32_C( 1631675339), INT32_C(  -86505288),
292                             INT32_C( 2011287771), INT32_C( 1938765310), INT32_C( 2078191935), INT32_C( -616151900),
293                             INT32_C( -454977425), INT32_C(  544105809), INT32_C(-1307935124), INT32_C(-1400984309)),
294       0xa,
295       simde_mm512_set_epi32(INT32_C( 1269944320), INT32_C(  894796800), INT32_C( 2029679616), INT32_C(   -6203392),
296                             INT32_C( 1483373568), INT32_C( -199442432), INT32_C(   93268992), INT32_C( 1612898304),
297                             INT32_C(-2025624576), INT32_C( 1020786688), INT32_C( 2059729920), INT32_C(  420646912),
298                             INT32_C(-2040415232), INT32_C(-1181400064), INT32_C(  704229376), INT32_C(  -88855552)) },
299     { simde_mm512_set_epi32(INT32_C( -955538666), INT32_C( 1399393330), INT32_C( 1832782688), INT32_C(-1931362608),
300                             INT32_C(-1247233529), INT32_C( -537843102), INT32_C( -120831887), INT32_C( 1329473476),
301                             INT32_C( 1569899726), INT32_C(  920247722), INT32_C(  275348332), INT32_C( 1640312018),
302                             INT32_C( -873496512), INT32_C(  957396290), INT32_C(  390504842), INT32_C( 1781792417)),
303       0xf,
304       simde_mm512_set_epi32(INT32_C( -779419648), INT32_C(-2045181952), INT32_C(   95420416), INT32_C( -546832384),
305                             INT32_C( 1560510464), INT32_C(-1791950848), INT32_C(  540573696), INT32_C(  333578240),
306                             INT32_C( 1650917376), INT32_C( -288030720), INT32_C(-1112145920), INT32_C(-1771503616),
307                             INT32_C(-1071644672), INT32_C( 1520500736), INT32_C( 1355087872), INT32_C(  -11501568)) },
308     { simde_mm512_set_epi32(INT32_C(  188085108), INT32_C(  489074602), INT32_C( 1720231560), INT32_C(  106164094),
309                             INT32_C( 1250223633), INT32_C( -962071158), INT32_C(   38255424), INT32_C(  801121683),
310                             INT32_C(-1580720854), INT32_C(  609844423), INT32_C(   44983522), INT32_C(  481953328),
311                             INT32_C( -181212371), INT32_C(  912186226), INT32_C(  -42587351), INT32_C(  680089879)),
312       0x18,
313       simde_mm512_set_epi32(INT32_C( 1946157056), INT32_C(-1442840576), INT32_C(-2013265920), INT32_C( 2113929216),
314                             INT32_C(  285212672), INT32_C(-1979711488), INT32_C( 1073741824), INT32_C(-1828716544),
315                             INT32_C(  704643072), INT32_C( -956301312), INT32_C( -503316480), INT32_C(  805306368),
316                             INT32_C(  754974720), INT32_C( 1912602624), INT32_C(  687865856), INT32_C(  385875968)) },
317     { simde_mm512_set_epi32(INT32_C(-1878529143), INT32_C(  968369206), INT32_C(-2025408372), INT32_C( -521427427),
318                             INT32_C(  750337953), INT32_C( 1599422728), INT32_C( 1832999614), INT32_C( -922516627),
319                             INT32_C( 1054703043), INT32_C( -229764941), INT32_C(-1888970968), INT32_C( -770679003),
320                             INT32_C(  957667650), INT32_C(-1367078699), INT32_C(  400185050), INT32_C(  619858989)),
321       0,
322       simde_mm512_set_epi32(INT32_C(-1878529143), INT32_C(  968369206), INT32_C(-2025408372), INT32_C( -521427427),
323                             INT32_C(  750337953), INT32_C( 1599422728), INT32_C( 1832999614), INT32_C( -922516627),
324                             INT32_C( 1054703043), INT32_C( -229764941), INT32_C(-1888970968), INT32_C( -770679003),
325                             INT32_C(  957667650), INT32_C(-1367078699), INT32_C(  400185050), INT32_C(  619858989)) },
326     { simde_mm512_set_epi32(INT32_C( -939632719), INT32_C( 1727963384), INT32_C( 1880331239), INT32_C(  699090974),
327                             INT32_C( 1068401563), INT32_C(-1558361689), INT32_C(-1814494206), INT32_C( 1865180366),
328                             INT32_C(-1767733366), INT32_C(-1147256695), INT32_C(-1631901793), INT32_C( -198157319),
329                             INT32_C(  285018015), INT32_C(  583696937), INT32_C( 1785762602), INT32_C(-1724046997)),
330       0x16,
331       simde_mm512_set_epi32(INT32_C( -331350016), INT32_C( 1040187392), INT32_C( -104857600), INT32_C(  125829120),
332                             INT32_C( -423624704), INT32_C( 1774190592), INT32_C(    8388608), INT32_C(  864026624),
333                             INT32_C( -494927872), INT32_C(  574619648), INT32_C( -406847488), INT32_C(  -29360128),
334                             INT32_C( -406847488), INT32_C(-1975517184), INT32_C( -897581056), INT32_C( 1522532352)) },
335   };
336 
337   for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
338     simde__m512i r = simde_mm512_slli_epi32(test_vec[i].a, test_vec[i].b);
339     simde_assert_m512i_i32(r, ==, test_vec[i].r);
340   }
341 
342   return 0;
343 }
344 
345 static int
test_simde_mm512_slli_epi64(SIMDE_MUNIT_TEST_ARGS)346 test_simde_mm512_slli_epi64(SIMDE_MUNIT_TEST_ARGS) {
347   const struct {
348     simde__m512i a;
349     unsigned int b;
350     simde__m512i r;
351   } test_vec[8] = {
352     { simde_mm512_set_epi64(INT64_C(-2953678853593164221), INT64_C( 1429936300098399798),
353                             INT64_C( 7897726984473080230), INT64_C(-5996325205020460142),
354                             INT64_C(-3875706062389379753), INT64_C(-7783551626585583431),
355                             INT64_C(-4422588635656985508), INT64_C( 3769047009929918913)),
356       0xac,
357       simde_mm512_set_epi64(INT64_C(                   0), INT64_C(                   0),
358                             INT64_C(                   0), INT64_C(                   0),
359                             INT64_C(                   0), INT64_C(                   0),
360                             INT64_C(                   0), INT64_C(                   0)) },
361     { simde_mm512_set_epi64(INT64_C( 1037445576805363080), INT64_C( 3760200445600708958),
362                             INT64_C(-7051311091025155918), INT64_C(-7452450895147297828),
363                             INT64_C( 3770644510958350530), INT64_C(-1546585142970651049),
364                             INT64_C(-4819351874959120985), INT64_C( 3760828163438613778)),
365       0x8017,
366       simde_mm512_set_epi64(INT64_C(                   0), INT64_C(                   0),
367                             INT64_C(                   0), INT64_C(                   0),
368                             INT64_C(                   0), INT64_C(                   0),
369                             INT64_C(                   0), INT64_C(                   0)) },
370     { simde_mm512_set_epi64(INT64_C( -225632736140221191), INT64_C( -800795890549009505),
371                             INT64_C(-4178975069113474243), INT64_C(-2770354533752005250),
372                             INT64_C( 5315133612400100046), INT64_C(-4204771879465094336),
373                             INT64_C( 3859670044345230560), INT64_C( 5485967569790680452)),
374       0x10,
375       simde_mm512_set_epi64(INT64_C( 7221751429524422656), INT64_C(   27406683787427840),
376                             INT64_C( 5499132945064853504), INT64_C(-5099550522009059328),
377                             INT64_C( 2728078395493449728), INT64_C(-6466919551140364288),
378                             INT64_C( 5581287503658221568), INT64_C( 1328657202873106432)) },
379     { simde_mm512_set_epi64(INT64_C(  854012069371251830), INT64_C(-7338075353641633319),
380                             INT64_C(-3664756911608965568), INT64_C( 6190577389993756354),
381                             INT64_C(-5695521678932466387), INT64_C( 8986269833406294113),
382                             INT64_C(-6594347992267195055), INT64_C(  897886006004895547)),
383       0x2a,
384       simde_mm512_set_epi64(INT64_C( 1455181649128980480), INT64_C(-8005319861464989696),
385                             INT64_C(-8117456853358608384), INT64_C(-7918726723707863040),
386                             INT64_C(-4137484245553643520), INT64_C( -675113333593997312),
387                             INT64_C( 7635083510067232768), INT64_C(-2504867807980683264)) },
388     { simde_mm512_set_epi64(INT64_C( 6876450537877586373), INT64_C(-2498836913726354503),
389                             INT64_C(-5925650014767999746), INT64_C(-5091981247482556140),
390                             INT64_C( 2276397305581596841), INT64_C( 4333846664358463853),
391                             INT64_C( -724672155607878887), INT64_C( 3417746373838389455)),
392       0x2a,
393       simde_mm512_set_epi64(INT64_C( -934756407423533056), INT64_C(-3157335600089006080),
394                             INT64_C(-2570438283414732800), INT64_C( 7513218039291052032),
395                             INT64_C( 7188488275143688192), INT64_C( 7216371890024087552),
396                             INT64_C(-9165841190443024384), INT64_C( 1225889494272573440)) },
397     { simde_mm512_set_epi64(INT64_C(-8036497785869311574), INT64_C( 3581702479948115598),
398                             INT64_C(  748249211564829520), INT64_C( -816680525172154454),
399                             INT64_C(-4839891842343135042), INT64_C(-6001583230129728210),
400                             INT64_C(-4279294013059977744), INT64_C(-1555144075545091790)),
401       0x26,
402       simde_mm512_set_epi64(INT64_C(-4397647938138931200), INT64_C( 2043406626093793280),
403                             INT64_C(-5590422890961960960), INT64_C(-8604150727591329792),
404                             INT64_C( 8423472379845410816), INT64_C(-8411233715916636160),
405                             INT64_C(-8742757912167841792), INT64_C(-6541394346116120576)) },
406     { simde_mm512_set_epi64(INT64_C(-6276545081940248579), INT64_C(-9016855820360504888),
407                             INT64_C( 2589347389053699338), INT64_C(-6212989007002338187),
408                             INT64_C( 5925964847698460032), INT64_C( 8758478916256841908),
409                             INT64_C( 5134329058456078862), INT64_C(-4414137185393506410)),
410       0x18,
411       simde_mm512_set_epi64(INT64_C(-9176583453456465920), INT64_C( 7465982649455083520),
412                             INT64_C(-4954907897243893760), INT64_C( 7673069422566703104),
413                             INT64_C(-6790719338690117632), INT64_C( 3134572139001151488),
414                             INT64_C( 1398716822424911872), INT64_C(-7065366029995606016)) },
415     { simde_mm512_set_epi64(INT64_C(-4035691796628594440), INT64_C( 8075961177851250718),
416                             INT64_C( 4588749774816889255), INT64_C(-7793193271686306610),
417                             INT64_C(-7592356991870287735), INT64_C(-7008964827121951751),
418                             INT64_C( 1224143053779534377), INT64_C( 7669791976580784491)),
419       0x16,
420       simde_mm512_set_epi64(INT64_C(-1415889878515712000), INT64_C( -447427762668437504),
421                             INT64_C(-1807976093613817856), INT64_C(   43851930488799232),
422                             INT64_C(-2112496568954257408), INT64_C(-1730213388945981440),
423                             INT64_C(-1744948453022105600), INT64_C(-3844298059735367680)) },
424   };
425 
426   for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
427     simde__m512i r = simde_mm512_slli_epi64(test_vec[i].a, test_vec[i].b);
428     simde_assert_m512i_i64(r, ==, test_vec[i].r);
429   }
430 
431   return 0;
432 }
433 
434 SIMDE_TEST_FUNC_LIST_BEGIN
435   SIMDE_TEST_FUNC_LIST_ENTRY(mm512_slli_epi16)
436   SIMDE_TEST_FUNC_LIST_ENTRY(mm512_slli_epi32)
437   SIMDE_TEST_FUNC_LIST_ENTRY(mm512_slli_epi64)
438 SIMDE_TEST_FUNC_LIST_END
439 
440 #include <test/x86/avx512/test-avx512-footer.h>
441