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