minimap2 0.2.24.3 → 0.2.24.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/ext/minimap2/lib/simde/CONTRIBUTING.md +114 -0
  3. data/ext/minimap2/lib/simde/COPYING +20 -0
  4. data/ext/minimap2/lib/simde/README.md +333 -0
  5. data/ext/minimap2/lib/simde/amalgamate.py +58 -0
  6. data/ext/minimap2/lib/simde/meson.build +33 -0
  7. data/ext/minimap2/lib/simde/netlify.toml +20 -0
  8. data/ext/minimap2/lib/simde/simde/arm/neon/float32x2.h +140 -0
  9. data/ext/minimap2/lib/simde/simde/arm/neon/float32x4.h +137 -0
  10. data/ext/minimap2/lib/simde/simde/arm/neon/float64x1.h +142 -0
  11. data/ext/minimap2/lib/simde/simde/arm/neon/float64x2.h +145 -0
  12. data/ext/minimap2/lib/simde/simde/arm/neon/int16x4.h +140 -0
  13. data/ext/minimap2/lib/simde/simde/arm/neon/int16x8.h +145 -0
  14. data/ext/minimap2/lib/simde/simde/arm/neon/int32x2.h +140 -0
  15. data/ext/minimap2/lib/simde/simde/arm/neon/int32x4.h +143 -0
  16. data/ext/minimap2/lib/simde/simde/arm/neon/int64x1.h +137 -0
  17. data/ext/minimap2/lib/simde/simde/arm/neon/int64x2.h +141 -0
  18. data/ext/minimap2/lib/simde/simde/arm/neon/int8x16.h +147 -0
  19. data/ext/minimap2/lib/simde/simde/arm/neon/int8x8.h +141 -0
  20. data/ext/minimap2/lib/simde/simde/arm/neon/uint16x4.h +134 -0
  21. data/ext/minimap2/lib/simde/simde/arm/neon/uint16x8.h +138 -0
  22. data/ext/minimap2/lib/simde/simde/arm/neon/uint32x2.h +134 -0
  23. data/ext/minimap2/lib/simde/simde/arm/neon/uint32x4.h +137 -0
  24. data/ext/minimap2/lib/simde/simde/arm/neon/uint64x1.h +131 -0
  25. data/ext/minimap2/lib/simde/simde/arm/neon/uint64x2.h +135 -0
  26. data/ext/minimap2/lib/simde/simde/arm/neon/uint8x16.h +141 -0
  27. data/ext/minimap2/lib/simde/simde/arm/neon/uint8x8.h +135 -0
  28. data/ext/minimap2/lib/simde/simde/arm/neon.h +97 -0
  29. data/ext/minimap2/lib/simde/simde/check.h +267 -0
  30. data/ext/minimap2/lib/simde/simde/debug-trap.h +83 -0
  31. data/ext/minimap2/lib/simde/simde/hedley.h +1899 -0
  32. data/ext/minimap2/lib/simde/simde/simde-arch.h +445 -0
  33. data/ext/minimap2/lib/simde/simde/simde-common.h +697 -0
  34. data/ext/minimap2/lib/simde/simde/x86/avx.h +5385 -0
  35. data/ext/minimap2/lib/simde/simde/x86/avx2.h +2402 -0
  36. data/ext/minimap2/lib/simde/simde/x86/avx512bw.h +391 -0
  37. data/ext/minimap2/lib/simde/simde/x86/avx512f.h +3389 -0
  38. data/ext/minimap2/lib/simde/simde/x86/avx512vl.h +112 -0
  39. data/ext/minimap2/lib/simde/simde/x86/fma.h +659 -0
  40. data/ext/minimap2/lib/simde/simde/x86/mmx.h +2210 -0
  41. data/ext/minimap2/lib/simde/simde/x86/sse.h +3696 -0
  42. data/ext/minimap2/lib/simde/simde/x86/sse2.h +5991 -0
  43. data/ext/minimap2/lib/simde/simde/x86/sse3.h +343 -0
  44. data/ext/minimap2/lib/simde/simde/x86/sse4.1.h +1783 -0
  45. data/ext/minimap2/lib/simde/simde/x86/sse4.2.h +105 -0
  46. data/ext/minimap2/lib/simde/simde/x86/ssse3.h +1053 -0
  47. data/ext/minimap2/lib/simde/simde/x86/svml.h +543 -0
  48. data/ext/minimap2/lib/simde/test/CMakeLists.txt +166 -0
  49. data/ext/minimap2/lib/simde/test/arm/meson.build +4 -0
  50. data/ext/minimap2/lib/simde/test/arm/neon/meson.build +23 -0
  51. data/ext/minimap2/lib/simde/test/arm/neon/skel.c +871 -0
  52. data/ext/minimap2/lib/simde/test/arm/neon/test-neon-internal.h +134 -0
  53. data/ext/minimap2/lib/simde/test/arm/neon/test-neon.c +39 -0
  54. data/ext/minimap2/lib/simde/test/arm/neon/test-neon.h +10 -0
  55. data/ext/minimap2/lib/simde/test/arm/neon/vadd.c +1260 -0
  56. data/ext/minimap2/lib/simde/test/arm/neon/vdup_n.c +873 -0
  57. data/ext/minimap2/lib/simde/test/arm/neon/vmul.c +1084 -0
  58. data/ext/minimap2/lib/simde/test/arm/neon/vsub.c +1260 -0
  59. data/ext/minimap2/lib/simde/test/arm/test-arm-internal.h +18 -0
  60. data/ext/minimap2/lib/simde/test/arm/test-arm.c +20 -0
  61. data/ext/minimap2/lib/simde/test/arm/test-arm.h +8 -0
  62. data/ext/minimap2/lib/simde/test/cmake/AddCompilerFlags.cmake +171 -0
  63. data/ext/minimap2/lib/simde/test/cmake/ExtraWarningFlags.cmake +68 -0
  64. data/ext/minimap2/lib/simde/test/meson.build +64 -0
  65. data/ext/minimap2/lib/simde/test/munit/COPYING +21 -0
  66. data/ext/minimap2/lib/simde/test/munit/Makefile +55 -0
  67. data/ext/minimap2/lib/simde/test/munit/README.md +54 -0
  68. data/ext/minimap2/lib/simde/test/munit/example.c +351 -0
  69. data/ext/minimap2/lib/simde/test/munit/meson.build +37 -0
  70. data/ext/minimap2/lib/simde/test/munit/munit.c +2055 -0
  71. data/ext/minimap2/lib/simde/test/munit/munit.h +535 -0
  72. data/ext/minimap2/lib/simde/test/run-tests.c +20 -0
  73. data/ext/minimap2/lib/simde/test/run-tests.h +260 -0
  74. data/ext/minimap2/lib/simde/test/x86/avx.c +13752 -0
  75. data/ext/minimap2/lib/simde/test/x86/avx2.c +9977 -0
  76. data/ext/minimap2/lib/simde/test/x86/avx512bw.c +2664 -0
  77. data/ext/minimap2/lib/simde/test/x86/avx512f.c +10416 -0
  78. data/ext/minimap2/lib/simde/test/x86/avx512vl.c +210 -0
  79. data/ext/minimap2/lib/simde/test/x86/fma.c +2557 -0
  80. data/ext/minimap2/lib/simde/test/x86/meson.build +33 -0
  81. data/ext/minimap2/lib/simde/test/x86/mmx.c +2878 -0
  82. data/ext/minimap2/lib/simde/test/x86/skel.c +2984 -0
  83. data/ext/minimap2/lib/simde/test/x86/sse.c +5121 -0
  84. data/ext/minimap2/lib/simde/test/x86/sse2.c +9860 -0
  85. data/ext/minimap2/lib/simde/test/x86/sse3.c +486 -0
  86. data/ext/minimap2/lib/simde/test/x86/sse4.1.c +3446 -0
  87. data/ext/minimap2/lib/simde/test/x86/sse4.2.c +101 -0
  88. data/ext/minimap2/lib/simde/test/x86/ssse3.c +2084 -0
  89. data/ext/minimap2/lib/simde/test/x86/svml.c +1545 -0
  90. data/ext/minimap2/lib/simde/test/x86/test-avx.h +16 -0
  91. data/ext/minimap2/lib/simde/test/x86/test-avx512.h +25 -0
  92. data/ext/minimap2/lib/simde/test/x86/test-mmx.h +13 -0
  93. data/ext/minimap2/lib/simde/test/x86/test-sse.h +13 -0
  94. data/ext/minimap2/lib/simde/test/x86/test-sse2.h +13 -0
  95. data/ext/minimap2/lib/simde/test/x86/test-x86-internal.h +196 -0
  96. data/ext/minimap2/lib/simde/test/x86/test-x86.c +48 -0
  97. data/ext/minimap2/lib/simde/test/x86/test-x86.h +8 -0
  98. data/lib/minimap2/aligner.rb +2 -2
  99. data/lib/minimap2/ffi/constants.rb +3 -0
  100. data/lib/minimap2/version.rb +1 -1
  101. metadata +99 -3
@@ -0,0 +1,873 @@
1
+ /* Copyright (c) 2018-2019 Evan Nemerson <evan@nemerson.com>
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
+
24
+ #define SIMDE_TESTS_CURRENT_NEON_OP dup
25
+ #include <test/arm/neon/test-neon-internal.h>
26
+ #include <simde/arm/neon.h>
27
+
28
+ #if defined(SIMDE_NEON_NATIVE) || defined(SIMDE_NO_NATIVE) || defined(SIMDE_ALWAYS_BUILD_NATIVE_TESTS)
29
+
30
+ static MunitResult
31
+ test_simde_vdup_n_s8(const MunitParameter params[], void* data) {
32
+ (void) params;
33
+ (void) data;
34
+
35
+ const struct {
36
+ int8_t a;
37
+ simde_int8x8_t r;
38
+ } test_vec[8] = {
39
+ { INT8_C( -78),
40
+ simde_x_vload_s8(INT8_C( -78), INT8_C( -78), INT8_C( -78), INT8_C( -78),
41
+ INT8_C( -78), INT8_C( -78), INT8_C( -78), INT8_C( -78)) },
42
+ { INT8_C( -88),
43
+ simde_x_vload_s8(INT8_C( -88), INT8_C( -88), INT8_C( -88), INT8_C( -88),
44
+ INT8_C( -88), INT8_C( -88), INT8_C( -88), INT8_C( -88)) },
45
+ { INT8_C( -61),
46
+ simde_x_vload_s8(INT8_C( -61), INT8_C( -61), INT8_C( -61), INT8_C( -61),
47
+ INT8_C( -61), INT8_C( -61), INT8_C( -61), INT8_C( -61)) },
48
+ { INT8_C( -26),
49
+ simde_x_vload_s8(INT8_C( -26), INT8_C( -26), INT8_C( -26), INT8_C( -26),
50
+ INT8_C( -26), INT8_C( -26), INT8_C( -26), INT8_C( -26)) },
51
+ { INT8_C( 67),
52
+ simde_x_vload_s8(INT8_C( 67), INT8_C( 67), INT8_C( 67), INT8_C( 67),
53
+ INT8_C( 67), INT8_C( 67), INT8_C( 67), INT8_C( 67)) },
54
+ { INT8_C( 63),
55
+ simde_x_vload_s8(INT8_C( 63), INT8_C( 63), INT8_C( 63), INT8_C( 63),
56
+ INT8_C( 63), INT8_C( 63), INT8_C( 63), INT8_C( 63)) },
57
+ { INT8_C( -72),
58
+ simde_x_vload_s8(INT8_C( -72), INT8_C( -72), INT8_C( -72), INT8_C( -72),
59
+ INT8_C( -72), INT8_C( -72), INT8_C( -72), INT8_C( -72)) },
60
+ { INT8_C( 78),
61
+ simde_x_vload_s8(INT8_C( 78), INT8_C( 78), INT8_C( 78), INT8_C( 78),
62
+ INT8_C( 78), INT8_C( 78), INT8_C( 78), INT8_C( 78)) }
63
+ };
64
+
65
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
66
+ simde_int8x8_t r = simde_vdup_n_s8(test_vec[i].a);
67
+ simde_neon_assert_int8x8(r, ==, test_vec[i].r);
68
+ }
69
+
70
+ return MUNIT_OK;
71
+ }
72
+
73
+ static MunitResult
74
+ test_simde_vdup_n_s16(const MunitParameter params[], void* data) {
75
+ (void) params;
76
+ (void) data;
77
+
78
+ const struct {
79
+ int16_t a;
80
+ simde_int16x4_t r;
81
+ } test_vec[8] = {
82
+ { INT16_C( -1865),
83
+ simde_x_vload_s16(INT16_C( -1865), INT16_C( -1865), INT16_C( -1865), INT16_C( -1865)) },
84
+ { INT16_C( 27689),
85
+ simde_x_vload_s16(INT16_C( 27689), INT16_C( 27689), INT16_C( 27689), INT16_C( 27689)) },
86
+ { INT16_C(-10330),
87
+ simde_x_vload_s16(INT16_C(-10330), INT16_C(-10330), INT16_C(-10330), INT16_C(-10330)) },
88
+ { INT16_C( 5744),
89
+ simde_x_vload_s16(INT16_C( 5744), INT16_C( 5744), INT16_C( 5744), INT16_C( 5744)) },
90
+ { INT16_C( 18577),
91
+ simde_x_vload_s16(INT16_C( 18577), INT16_C( 18577), INT16_C( 18577), INT16_C( 18577)) },
92
+ { INT16_C( 4051),
93
+ simde_x_vload_s16(INT16_C( 4051), INT16_C( 4051), INT16_C( 4051), INT16_C( 4051)) },
94
+ { INT16_C(-16648),
95
+ simde_x_vload_s16(INT16_C(-16648), INT16_C(-16648), INT16_C(-16648), INT16_C(-16648)) },
96
+ { INT16_C( 10953),
97
+ simde_x_vload_s16(INT16_C( 10953), INT16_C( 10953), INT16_C( 10953), INT16_C( 10953)) }
98
+ };
99
+
100
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
101
+ simde_int16x4_t r = simde_vdup_n_s16(test_vec[i].a);
102
+ simde_neon_assert_int16x4(r, ==, test_vec[i].r);
103
+ }
104
+
105
+ return MUNIT_OK;
106
+ }
107
+
108
+ static MunitResult
109
+ test_simde_vdup_n_s32(const MunitParameter params[], void* data) {
110
+ (void) params;
111
+ (void) data;
112
+
113
+ const struct {
114
+ int32_t a;
115
+ simde_int32x2_t r;
116
+ } test_vec[8] = {
117
+ { INT32_C( 1916587522),
118
+ simde_x_vload_s32(INT32_C( 1916587522), INT32_C( 1916587522)) },
119
+ { INT32_C( 1768587922),
120
+ simde_x_vload_s32(INT32_C( 1768587922), INT32_C( 1768587922)) },
121
+ { INT32_C( -691487954),
122
+ simde_x_vload_s32(INT32_C( -691487954), INT32_C( -691487954)) },
123
+ { INT32_C( 543996952),
124
+ simde_x_vload_s32(INT32_C( 543996952), INT32_C( 543996952)) },
125
+ { INT32_C(-1169990649),
126
+ simde_x_vload_s32(INT32_C(-1169990649), INT32_C(-1169990649)) },
127
+ { INT32_C( 112382576),
128
+ simde_x_vload_s32(INT32_C( 112382576), INT32_C( 112382576)) },
129
+ { INT32_C( 106559916),
130
+ simde_x_vload_s32(INT32_C( 106559916), INT32_C( 106559916)) },
131
+ { INT32_C(-1392833028),
132
+ simde_x_vload_s32(INT32_C(-1392833028), INT32_C(-1392833028)) }
133
+ };
134
+
135
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
136
+ simde_int32x2_t r = simde_vdup_n_s32(test_vec[i].a);
137
+ simde_neon_assert_int32x2(r, ==, test_vec[i].r);
138
+ }
139
+
140
+ return MUNIT_OK;
141
+ }
142
+
143
+ static MunitResult
144
+ test_simde_vdup_n_s64(const MunitParameter params[], void* data) {
145
+ (void) params;
146
+ (void) data;
147
+
148
+ const struct {
149
+ int64_t a;
150
+ simde_int64x1_t r;
151
+ } test_vec[8] = {
152
+ { INT64_C( 334131234436610929),
153
+ simde_x_vload_s64(INT64_C( 334131234436610929)) },
154
+ { INT64_C( -381209590406960721),
155
+ simde_x_vload_s64(INT64_C( -381209590406960721)) },
156
+ { INT64_C( 3405124667411469289),
157
+ simde_x_vload_s64(INT64_C( 3405124667411469289)) },
158
+ { INT64_C( 6563288036870666397),
159
+ simde_x_vload_s64(INT64_C( 6563288036870666397)) },
160
+ { INT64_C(-2481307072264039015),
161
+ simde_x_vload_s64(INT64_C(-2481307072264039015)) },
162
+ { INT64_C( 9161860841737114354),
163
+ simde_x_vload_s64(INT64_C( 9161860841737114354)) },
164
+ { INT64_C( 8226355109123244726),
165
+ simde_x_vload_s64(INT64_C( 8226355109123244726)) },
166
+ { INT64_C(-6469854538759863639),
167
+ simde_x_vload_s64(INT64_C(-6469854538759863639)) }
168
+ };
169
+
170
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
171
+ simde_int64x1_t r = simde_vdup_n_s64(test_vec[i].a);
172
+ simde_neon_assert_int64x1(r, ==, test_vec[i].r);
173
+ }
174
+
175
+ return MUNIT_OK;
176
+ }
177
+
178
+ static MunitResult
179
+ test_simde_vdup_n_u8(const MunitParameter params[], void* data) {
180
+ (void) params;
181
+ (void) data;
182
+
183
+ const struct {
184
+ uint8_t a;
185
+ simde_uint8x8_t r;
186
+ } test_vec[8] = {
187
+ { UINT8_C(208),
188
+ simde_x_vload_u8(UINT8_C(208), UINT8_C(208), UINT8_C(208), UINT8_C(208),
189
+ UINT8_C(208), UINT8_C(208), UINT8_C(208), UINT8_C(208)) },
190
+ { UINT8_C( 37),
191
+ simde_x_vload_u8(UINT8_C( 37), UINT8_C( 37), UINT8_C( 37), UINT8_C( 37),
192
+ UINT8_C( 37), UINT8_C( 37), UINT8_C( 37), UINT8_C( 37)) },
193
+ { UINT8_C(154),
194
+ simde_x_vload_u8(UINT8_C(154), UINT8_C(154), UINT8_C(154), UINT8_C(154),
195
+ UINT8_C(154), UINT8_C(154), UINT8_C(154), UINT8_C(154)) },
196
+ { UINT8_C(109),
197
+ simde_x_vload_u8(UINT8_C(109), UINT8_C(109), UINT8_C(109), UINT8_C(109),
198
+ UINT8_C(109), UINT8_C(109), UINT8_C(109), UINT8_C(109)) },
199
+ { UINT8_C(202),
200
+ simde_x_vload_u8(UINT8_C(202), UINT8_C(202), UINT8_C(202), UINT8_C(202),
201
+ UINT8_C(202), UINT8_C(202), UINT8_C(202), UINT8_C(202)) },
202
+ { UINT8_C( 54),
203
+ simde_x_vload_u8(UINT8_C( 54), UINT8_C( 54), UINT8_C( 54), UINT8_C( 54),
204
+ UINT8_C( 54), UINT8_C( 54), UINT8_C( 54), UINT8_C( 54)) },
205
+ { UINT8_C( 84),
206
+ simde_x_vload_u8(UINT8_C( 84), UINT8_C( 84), UINT8_C( 84), UINT8_C( 84),
207
+ UINT8_C( 84), UINT8_C( 84), UINT8_C( 84), UINT8_C( 84)) },
208
+ { UINT8_C(241),
209
+ simde_x_vload_u8(UINT8_C(241), UINT8_C(241), UINT8_C(241), UINT8_C(241),
210
+ UINT8_C(241), UINT8_C(241), UINT8_C(241), UINT8_C(241)) }
211
+ };
212
+
213
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
214
+ simde_uint8x8_t r = simde_vdup_n_u8(test_vec[i].a);
215
+ simde_neon_assert_uint8x8(r, ==, test_vec[i].r);
216
+ }
217
+
218
+ return MUNIT_OK;
219
+ }
220
+
221
+ static MunitResult
222
+ test_simde_vdup_n_u16(const MunitParameter params[], void* data) {
223
+ (void) params;
224
+ (void) data;
225
+
226
+ const struct {
227
+ uint16_t a;
228
+ simde_uint16x4_t r;
229
+ } test_vec[8] = {
230
+ { UINT16_C( 7975),
231
+ simde_x_vload_u16(UINT16_C( 7975), UINT16_C( 7975), UINT16_C( 7975), UINT16_C( 7975)) },
232
+ { UINT16_C(47599),
233
+ simde_x_vload_u16(UINT16_C(47599), UINT16_C(47599), UINT16_C(47599), UINT16_C(47599)) },
234
+ { UINT16_C(18065),
235
+ simde_x_vload_u16(UINT16_C(18065), UINT16_C(18065), UINT16_C(18065), UINT16_C(18065)) },
236
+ { UINT16_C(57574),
237
+ simde_x_vload_u16(UINT16_C(57574), UINT16_C(57574), UINT16_C(57574), UINT16_C(57574)) },
238
+ { UINT16_C(26215),
239
+ simde_x_vload_u16(UINT16_C(26215), UINT16_C(26215), UINT16_C(26215), UINT16_C(26215)) },
240
+ { UINT16_C(25160),
241
+ simde_x_vload_u16(UINT16_C(25160), UINT16_C(25160), UINT16_C(25160), UINT16_C(25160)) },
242
+ { UINT16_C(15997),
243
+ simde_x_vload_u16(UINT16_C(15997), UINT16_C(15997), UINT16_C(15997), UINT16_C(15997)) },
244
+ { UINT16_C(10837),
245
+ simde_x_vload_u16(UINT16_C(10837), UINT16_C(10837), UINT16_C(10837), UINT16_C(10837)) }
246
+ };
247
+
248
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
249
+ simde_uint16x4_t r = simde_vdup_n_u16(test_vec[i].a);
250
+ simde_neon_assert_uint16x4(r, ==, test_vec[i].r);
251
+ }
252
+
253
+ return MUNIT_OK;
254
+ }
255
+
256
+ static MunitResult
257
+ test_simde_vdup_n_u32(const MunitParameter params[], void* data) {
258
+ (void) params;
259
+ (void) data;
260
+
261
+ const struct {
262
+ uint32_t a;
263
+ simde_uint32x2_t r;
264
+ } test_vec[8] = {
265
+ { UINT32_C(2191554300),
266
+ simde_x_vload_u32(UINT32_C(2191554300), UINT32_C(2191554300)) },
267
+ { UINT32_C(3680691148),
268
+ simde_x_vload_u32(UINT32_C(3680691148), UINT32_C(3680691148)) },
269
+ { UINT32_C(1032348780),
270
+ simde_x_vload_u32(UINT32_C(1032348780), UINT32_C(1032348780)) },
271
+ { UINT32_C(2246539900),
272
+ simde_x_vload_u32(UINT32_C(2246539900), UINT32_C(2246539900)) },
273
+ { UINT32_C(1509373219),
274
+ simde_x_vload_u32(UINT32_C(1509373219), UINT32_C(1509373219)) },
275
+ { UINT32_C(3567484403),
276
+ simde_x_vload_u32(UINT32_C(3567484403), UINT32_C(3567484403)) },
277
+ { UINT32_C(1519121594),
278
+ simde_x_vload_u32(UINT32_C(1519121594), UINT32_C(1519121594)) },
279
+ { UINT32_C(2118894533),
280
+ simde_x_vload_u32(UINT32_C(2118894533), UINT32_C(2118894533)) }
281
+ };
282
+
283
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
284
+ simde_uint32x2_t r = simde_vdup_n_u32(test_vec[i].a);
285
+ simde_neon_assert_uint32x2(r, ==, test_vec[i].r);
286
+ }
287
+
288
+ return MUNIT_OK;
289
+ }
290
+
291
+ static MunitResult
292
+ test_simde_vdup_n_u64(const MunitParameter params[], void* data) {
293
+ (void) params;
294
+ (void) data;
295
+
296
+ const struct {
297
+ uint64_t a;
298
+ simde_uint64x1_t r;
299
+ } test_vec[8] = {
300
+ { UINT64_C(9284230750851825515),
301
+ simde_x_vload_u64(UINT64_C(9284230750851825515)) },
302
+ { UINT64_C(1047137957001313899),
303
+ simde_x_vload_u64(UINT64_C(1047137957001313899)) },
304
+ { UINT64_C(6667637795209568306),
305
+ simde_x_vload_u64(UINT64_C(6667637795209568306)) },
306
+ { UINT64_C(13739307323863797778),
307
+ simde_x_vload_u64(UINT64_C(13739307323863797778)) },
308
+ { UINT64_C(3093886915367912862),
309
+ simde_x_vload_u64(UINT64_C(3093886915367912862)) },
310
+ { UINT64_C(9010151081532470036),
311
+ simde_x_vload_u64(UINT64_C(9010151081532470036)) },
312
+ { UINT64_C(13460085984077414991),
313
+ simde_x_vload_u64(UINT64_C(13460085984077414991)) },
314
+ { UINT64_C(18082508431338632924),
315
+ simde_x_vload_u64(UINT64_C(18082508431338632924)) }
316
+ };
317
+
318
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
319
+ simde_uint64x1_t r = simde_vdup_n_u64(test_vec[i].a);
320
+ simde_neon_assert_uint64x1(r, ==, test_vec[i].r);
321
+ }
322
+
323
+ return MUNIT_OK;
324
+ }
325
+
326
+ static MunitResult
327
+ test_simde_vdup_n_f32(const MunitParameter params[], void* data) {
328
+ (void) params;
329
+ (void) data;
330
+
331
+ const struct {
332
+ simde_float32 a;
333
+ simde_float32x2_t r;
334
+ } test_vec[8] = {
335
+ { SIMDE_FLOAT32_C( -324.45),
336
+ simde_x_vload_f32(SIMDE_FLOAT32_C( -324.45), SIMDE_FLOAT32_C( -324.45)) },
337
+ { SIMDE_FLOAT32_C( 705.22),
338
+ simde_x_vload_f32(SIMDE_FLOAT32_C( 705.22), SIMDE_FLOAT32_C( 705.22)) },
339
+ { SIMDE_FLOAT32_C( -996.79),
340
+ simde_x_vload_f32(SIMDE_FLOAT32_C( -996.79), SIMDE_FLOAT32_C( -996.79)) },
341
+ { SIMDE_FLOAT32_C( 843.74),
342
+ simde_x_vload_f32(SIMDE_FLOAT32_C( 843.74), SIMDE_FLOAT32_C( 843.74)) },
343
+ { SIMDE_FLOAT32_C( 946.70),
344
+ simde_x_vload_f32(SIMDE_FLOAT32_C( 946.70), SIMDE_FLOAT32_C( 946.70)) },
345
+ { SIMDE_FLOAT32_C( 387.10),
346
+ simde_x_vload_f32(SIMDE_FLOAT32_C( 387.10), SIMDE_FLOAT32_C( 387.10)) },
347
+ { SIMDE_FLOAT32_C( -613.17),
348
+ simde_x_vload_f32(SIMDE_FLOAT32_C( -613.17), SIMDE_FLOAT32_C( -613.17)) },
349
+ { SIMDE_FLOAT32_C( 182.49),
350
+ simde_x_vload_f32(SIMDE_FLOAT32_C( 182.49), SIMDE_FLOAT32_C( 182.49)) }
351
+ };
352
+
353
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
354
+ simde_float32x2_t r = simde_vdup_n_f32(test_vec[i].a);
355
+ simde_neon_assert_float32x2_equal(r, test_vec[i].r, 1);
356
+ }
357
+
358
+ return MUNIT_OK;
359
+ }
360
+
361
+ static MunitResult
362
+ test_simde_vdup_n_f64(const MunitParameter params[], void* data) {
363
+ (void) params;
364
+ (void) data;
365
+
366
+ const struct {
367
+ simde_float64 a;
368
+ simde_float64x1_t r;
369
+ } test_vec[8] = {
370
+ { SIMDE_FLOAT64_C( -545.91),
371
+ simde_x_vload_f64(SIMDE_FLOAT64_C( -545.91)) },
372
+ { SIMDE_FLOAT64_C( -308.32),
373
+ simde_x_vload_f64(SIMDE_FLOAT64_C( -308.32)) },
374
+ { SIMDE_FLOAT64_C( -309.58),
375
+ simde_x_vload_f64(SIMDE_FLOAT64_C( -309.58)) },
376
+ { SIMDE_FLOAT64_C( 472.89),
377
+ simde_x_vload_f64(SIMDE_FLOAT64_C( 472.89)) },
378
+ { SIMDE_FLOAT64_C( 94.81),
379
+ simde_x_vload_f64(SIMDE_FLOAT64_C( 94.81)) },
380
+ { SIMDE_FLOAT64_C( -37.15),
381
+ simde_x_vload_f64(SIMDE_FLOAT64_C( -37.15)) },
382
+ { SIMDE_FLOAT64_C( -245.92),
383
+ simde_x_vload_f64(SIMDE_FLOAT64_C( -245.92)) },
384
+ { SIMDE_FLOAT64_C( 363.91),
385
+ simde_x_vload_f64(SIMDE_FLOAT64_C( 363.91)) }
386
+ };
387
+
388
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
389
+ simde_float64x1_t r = simde_vdup_n_f64(test_vec[i].a);
390
+ simde_neon_assert_float64x1_equal(r, test_vec[i].r, 1);
391
+ }
392
+
393
+ return MUNIT_OK;
394
+ }
395
+
396
+ static MunitResult
397
+ test_simde_vdupq_n_s8(const MunitParameter params[], void* data) {
398
+ (void) params;
399
+ (void) data;
400
+
401
+ const struct {
402
+ int8_t a;
403
+ simde_int8x16_t r;
404
+ } test_vec[8] = {
405
+ { INT8_C( 15),
406
+ simde_x_vloadq_s8(INT8_C( 15), INT8_C( 15), INT8_C( 15), INT8_C( 15),
407
+ INT8_C( 15), INT8_C( 15), INT8_C( 15), INT8_C( 15),
408
+ INT8_C( 15), INT8_C( 15), INT8_C( 15), INT8_C( 15),
409
+ INT8_C( 15), INT8_C( 15), INT8_C( 15), INT8_C( 15)) },
410
+ { INT8_C( 125),
411
+ simde_x_vloadq_s8(INT8_C( 125), INT8_C( 125), INT8_C( 125), INT8_C( 125),
412
+ INT8_C( 125), INT8_C( 125), INT8_C( 125), INT8_C( 125),
413
+ INT8_C( 125), INT8_C( 125), INT8_C( 125), INT8_C( 125),
414
+ INT8_C( 125), INT8_C( 125), INT8_C( 125), INT8_C( 125)) },
415
+ { INT8_C( -71),
416
+ simde_x_vloadq_s8(INT8_C( -71), INT8_C( -71), INT8_C( -71), INT8_C( -71),
417
+ INT8_C( -71), INT8_C( -71), INT8_C( -71), INT8_C( -71),
418
+ INT8_C( -71), INT8_C( -71), INT8_C( -71), INT8_C( -71),
419
+ INT8_C( -71), INT8_C( -71), INT8_C( -71), INT8_C( -71)) },
420
+ { INT8_C( -4),
421
+ simde_x_vloadq_s8(INT8_C( -4), INT8_C( -4), INT8_C( -4), INT8_C( -4),
422
+ INT8_C( -4), INT8_C( -4), INT8_C( -4), INT8_C( -4),
423
+ INT8_C( -4), INT8_C( -4), INT8_C( -4), INT8_C( -4),
424
+ INT8_C( -4), INT8_C( -4), INT8_C( -4), INT8_C( -4)) },
425
+ { INT8_C( 18),
426
+ simde_x_vloadq_s8(INT8_C( 18), INT8_C( 18), INT8_C( 18), INT8_C( 18),
427
+ INT8_C( 18), INT8_C( 18), INT8_C( 18), INT8_C( 18),
428
+ INT8_C( 18), INT8_C( 18), INT8_C( 18), INT8_C( 18),
429
+ INT8_C( 18), INT8_C( 18), INT8_C( 18), INT8_C( 18)) },
430
+ { INT8_C( -97),
431
+ simde_x_vloadq_s8(INT8_C( -97), INT8_C( -97), INT8_C( -97), INT8_C( -97),
432
+ INT8_C( -97), INT8_C( -97), INT8_C( -97), INT8_C( -97),
433
+ INT8_C( -97), INT8_C( -97), INT8_C( -97), INT8_C( -97),
434
+ INT8_C( -97), INT8_C( -97), INT8_C( -97), INT8_C( -97)) },
435
+ { INT8_C( -79),
436
+ simde_x_vloadq_s8(INT8_C( -79), INT8_C( -79), INT8_C( -79), INT8_C( -79),
437
+ INT8_C( -79), INT8_C( -79), INT8_C( -79), INT8_C( -79),
438
+ INT8_C( -79), INT8_C( -79), INT8_C( -79), INT8_C( -79),
439
+ INT8_C( -79), INT8_C( -79), INT8_C( -79), INT8_C( -79)) },
440
+ { INT8_C( -96),
441
+ simde_x_vloadq_s8(INT8_C( -96), INT8_C( -96), INT8_C( -96), INT8_C( -96),
442
+ INT8_C( -96), INT8_C( -96), INT8_C( -96), INT8_C( -96),
443
+ INT8_C( -96), INT8_C( -96), INT8_C( -96), INT8_C( -96),
444
+ INT8_C( -96), INT8_C( -96), INT8_C( -96), INT8_C( -96)) }
445
+ };
446
+
447
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
448
+ simde_int8x16_t r = simde_vdupq_n_s8(test_vec[i].a);
449
+ simde_neon_assert_int8x16(r, ==, test_vec[i].r);
450
+ }
451
+
452
+ return MUNIT_OK;
453
+ }
454
+
455
+ static MunitResult
456
+ test_simde_vdupq_n_s16(const MunitParameter params[], void* data) {
457
+ (void) params;
458
+ (void) data;
459
+
460
+ const struct {
461
+ int16_t a;
462
+ simde_int16x8_t r;
463
+ } test_vec[8] = {
464
+ { INT16_C(-18161),
465
+ simde_x_vloadq_s16(INT16_C(-18161), INT16_C(-18161), INT16_C(-18161), INT16_C(-18161),
466
+ INT16_C(-18161), INT16_C(-18161), INT16_C(-18161), INT16_C(-18161)) },
467
+ { INT16_C( 3453),
468
+ simde_x_vloadq_s16(INT16_C( 3453), INT16_C( 3453), INT16_C( 3453), INT16_C( 3453),
469
+ INT16_C( 3453), INT16_C( 3453), INT16_C( 3453), INT16_C( 3453)) },
470
+ { INT16_C( 26809),
471
+ simde_x_vloadq_s16(INT16_C( 26809), INT16_C( 26809), INT16_C( 26809), INT16_C( 26809),
472
+ INT16_C( 26809), INT16_C( 26809), INT16_C( 26809), INT16_C( 26809)) },
473
+ { INT16_C(-30468),
474
+ simde_x_vloadq_s16(INT16_C(-30468), INT16_C(-30468), INT16_C(-30468), INT16_C(-30468),
475
+ INT16_C(-30468), INT16_C(-30468), INT16_C(-30468), INT16_C(-30468)) },
476
+ { INT16_C(-32238),
477
+ simde_x_vloadq_s16(INT16_C(-32238), INT16_C(-32238), INT16_C(-32238), INT16_C(-32238),
478
+ INT16_C(-32238), INT16_C(-32238), INT16_C(-32238), INT16_C(-32238)) },
479
+ { INT16_C(-32609),
480
+ simde_x_vloadq_s16(INT16_C(-32609), INT16_C(-32609), INT16_C(-32609), INT16_C(-32609),
481
+ INT16_C(-32609), INT16_C(-32609), INT16_C(-32609), INT16_C(-32609)) },
482
+ { INT16_C(-15183),
483
+ simde_x_vloadq_s16(INT16_C(-15183), INT16_C(-15183), INT16_C(-15183), INT16_C(-15183),
484
+ INT16_C(-15183), INT16_C(-15183), INT16_C(-15183), INT16_C(-15183)) },
485
+ { INT16_C( 24224),
486
+ simde_x_vloadq_s16(INT16_C( 24224), INT16_C( 24224), INT16_C( 24224), INT16_C( 24224),
487
+ INT16_C( 24224), INT16_C( 24224), INT16_C( 24224), INT16_C( 24224)) }
488
+ };
489
+
490
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
491
+ simde_int16x8_t r = simde_vdupq_n_s16(test_vec[i].a);
492
+ simde_neon_assert_int16x8(r, ==, test_vec[i].r);
493
+ }
494
+
495
+ return MUNIT_OK;
496
+ }
497
+
498
+ static MunitResult
499
+ test_simde_vdupq_n_s32(const MunitParameter params[], void* data) {
500
+ (void) params;
501
+ (void) data;
502
+
503
+ const struct {
504
+ int32_t a;
505
+ simde_int32x4_t r;
506
+ } test_vec[8] = {
507
+ { INT32_C( -600721137),
508
+ simde_x_vloadq_s32(INT32_C( -600721137), INT32_C( -600721137),
509
+ INT32_C( -600721137), INT32_C( -600721137)) },
510
+ { INT32_C( 1437535613),
511
+ simde_x_vloadq_s32(INT32_C( 1437535613), INT32_C( 1437535613),
512
+ INT32_C( 1437535613), INT32_C( 1437535613)) },
513
+ { INT32_C(-1830983495),
514
+ simde_x_vloadq_s32(INT32_C(-1830983495), INT32_C(-1830983495),
515
+ INT32_C(-1830983495), INT32_C(-1830983495)) },
516
+ { INT32_C( 1662028028),
517
+ simde_x_vloadq_s32(INT32_C( 1662028028), INT32_C( 1662028028),
518
+ INT32_C( 1662028028), INT32_C( 1662028028)) },
519
+ { INT32_C( 735543826),
520
+ simde_x_vloadq_s32(INT32_C( 735543826), INT32_C( 735543826),
521
+ INT32_C( 735543826), INT32_C( 735543826)) },
522
+ { INT32_C( 1508081823),
523
+ simde_x_vloadq_s32(INT32_C( 1508081823), INT32_C( 1508081823),
524
+ INT32_C( 1508081823), INT32_C( 1508081823)) },
525
+ { INT32_C( 439469233),
526
+ simde_x_vloadq_s32(INT32_C( 439469233), INT32_C( 439469233),
527
+ INT32_C( 439469233), INT32_C( 439469233)) },
528
+ { INT32_C( -524525920),
529
+ simde_x_vloadq_s32(INT32_C( -524525920), INT32_C( -524525920),
530
+ INT32_C( -524525920), INT32_C( -524525920)) }
531
+ };
532
+
533
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
534
+ simde_int32x4_t r = simde_vdupq_n_s32(test_vec[i].a);
535
+ simde_neon_assert_int32x4(r, ==, test_vec[i].r);
536
+ }
537
+
538
+ return MUNIT_OK;
539
+ }
540
+
541
+ static MunitResult
542
+ test_simde_vdupq_n_s64(const MunitParameter params[], void* data) {
543
+ (void) params;
544
+ (void) data;
545
+
546
+ const struct {
547
+ int64_t a;
548
+ simde_int64x2_t r;
549
+ } test_vec[8] = {
550
+ { INT64_C( 6174168448364558607),
551
+ simde_x_vloadq_s64(INT64_C( 6174168448364558607), INT64_C( 6174168448364558607)) },
552
+ { INT64_C( 7138356027759356089),
553
+ simde_x_vloadq_s64(INT64_C( 7138356027759356089), INT64_C( 7138356027759356089)) },
554
+ { INT64_C( 6477162110212604434),
555
+ simde_x_vloadq_s64(INT64_C( 6477162110212604434), INT64_C( 6477162110212604434)) },
556
+ { INT64_C(-2252821671864843087),
557
+ simde_x_vloadq_s64(INT64_C(-2252821671864843087), INT64_C(-2252821671864843087)) },
558
+ { INT64_C( -556506427644455564),
559
+ simde_x_vloadq_s64(INT64_C( -556506427644455564), INT64_C( -556506427644455564)) },
560
+ { INT64_C( 2313226981968176270),
561
+ simde_x_vloadq_s64(INT64_C( 2313226981968176270), INT64_C( 2313226981968176270)) },
562
+ { INT64_C(-5078103753510275894),
563
+ simde_x_vloadq_s64(INT64_C(-5078103753510275894), INT64_C(-5078103753510275894)) },
564
+ { INT64_C(-8872623523915285054),
565
+ simde_x_vloadq_s64(INT64_C(-8872623523915285054), INT64_C(-8872623523915285054)) }
566
+ };
567
+
568
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
569
+ simde_int64x2_t r = simde_vdupq_n_s64(test_vec[i].a);
570
+ simde_neon_assert_int64x2(r, ==, test_vec[i].r);
571
+ }
572
+
573
+ return MUNIT_OK;
574
+ }
575
+
576
+ static MunitResult
577
+ test_simde_vdupq_n_u8(const MunitParameter params[], void* data) {
578
+ (void) params;
579
+ (void) data;
580
+
581
+ const struct {
582
+ uint8_t a;
583
+ simde_uint8x16_t r;
584
+ } test_vec[8] = {
585
+ { UINT8_C(206),
586
+ simde_x_vloadq_u8(UINT8_C(206), UINT8_C(206), UINT8_C(206), UINT8_C(206),
587
+ UINT8_C(206), UINT8_C(206), UINT8_C(206), UINT8_C(206),
588
+ UINT8_C(206), UINT8_C(206), UINT8_C(206), UINT8_C(206),
589
+ UINT8_C(206), UINT8_C(206), UINT8_C(206), UINT8_C(206) ) },
590
+ { UINT8_C(135),
591
+ simde_x_vloadq_u8(UINT8_C(135), UINT8_C(135), UINT8_C(135), UINT8_C(135),
592
+ UINT8_C(135), UINT8_C(135), UINT8_C(135), UINT8_C(135),
593
+ UINT8_C(135), UINT8_C(135), UINT8_C(135), UINT8_C(135),
594
+ UINT8_C(135), UINT8_C(135), UINT8_C(135), UINT8_C(135) ) },
595
+ { UINT8_C(116),
596
+ simde_x_vloadq_u8(UINT8_C(116), UINT8_C(116), UINT8_C(116), UINT8_C(116),
597
+ UINT8_C(116), UINT8_C(116), UINT8_C(116), UINT8_C(116),
598
+ UINT8_C(116), UINT8_C(116), UINT8_C(116), UINT8_C(116),
599
+ UINT8_C(116), UINT8_C(116), UINT8_C(116), UINT8_C(116) ) },
600
+ { UINT8_C(154),
601
+ simde_x_vloadq_u8(UINT8_C(154), UINT8_C(154), UINT8_C(154), UINT8_C(154),
602
+ UINT8_C(154), UINT8_C(154), UINT8_C(154), UINT8_C(154),
603
+ UINT8_C(154), UINT8_C(154), UINT8_C(154), UINT8_C(154),
604
+ UINT8_C(154), UINT8_C(154), UINT8_C(154), UINT8_C(154) ) },
605
+ { UINT8_C(166),
606
+ simde_x_vloadq_u8(UINT8_C(166), UINT8_C(166), UINT8_C(166), UINT8_C(166),
607
+ UINT8_C(166), UINT8_C(166), UINT8_C(166), UINT8_C(166),
608
+ UINT8_C(166), UINT8_C(166), UINT8_C(166), UINT8_C(166),
609
+ UINT8_C(166), UINT8_C(166), UINT8_C(166), UINT8_C(166) ) },
610
+ { UINT8_C( 29),
611
+ simde_x_vloadq_u8(UINT8_C( 29), UINT8_C( 29), UINT8_C( 29), UINT8_C( 29),
612
+ UINT8_C( 29), UINT8_C( 29), UINT8_C( 29), UINT8_C( 29),
613
+ UINT8_C( 29), UINT8_C( 29), UINT8_C( 29), UINT8_C( 29),
614
+ UINT8_C( 29), UINT8_C( 29), UINT8_C( 29), UINT8_C( 29) ) },
615
+ { UINT8_C(241),
616
+ simde_x_vloadq_u8(UINT8_C(241), UINT8_C(241), UINT8_C(241), UINT8_C(241),
617
+ UINT8_C(241), UINT8_C(241), UINT8_C(241), UINT8_C(241),
618
+ UINT8_C(241), UINT8_C(241), UINT8_C(241), UINT8_C(241),
619
+ UINT8_C(241), UINT8_C(241), UINT8_C(241), UINT8_C(241) ) },
620
+ { UINT8_C( 37),
621
+ simde_x_vloadq_u8(UINT8_C( 37), UINT8_C( 37), UINT8_C( 37), UINT8_C( 37),
622
+ UINT8_C( 37), UINT8_C( 37), UINT8_C( 37), UINT8_C( 37),
623
+ UINT8_C( 37), UINT8_C( 37), UINT8_C( 37), UINT8_C( 37),
624
+ UINT8_C( 37), UINT8_C( 37), UINT8_C( 37), UINT8_C( 37) ) }
625
+ };
626
+
627
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
628
+ simde_uint8x16_t r = simde_vdupq_n_u8(test_vec[i].a);
629
+ simde_neon_assert_uint8x16(r, ==, test_vec[i].r);
630
+ }
631
+
632
+ return MUNIT_OK;
633
+ }
634
+
635
+ static MunitResult
636
+ test_simde_vdupq_n_u16(const MunitParameter params[], void* data) {
637
+ (void) params;
638
+ (void) data;
639
+
640
+ const struct {
641
+ uint16_t a;
642
+ simde_uint16x8_t r;
643
+ } test_vec[8] = {
644
+ { UINT16_C(45182),
645
+ simde_x_vloadq_u16(UINT16_C(45182), UINT16_C(45182), UINT16_C(45182), UINT16_C(45182),
646
+ UINT16_C(45182), UINT16_C(45182), UINT16_C(45182), UINT16_C(45182)) },
647
+ { UINT16_C(31361),
648
+ simde_x_vloadq_u16(UINT16_C(31361), UINT16_C(31361), UINT16_C(31361), UINT16_C(31361),
649
+ UINT16_C(31361), UINT16_C(31361), UINT16_C(31361), UINT16_C(31361)) },
650
+ { UINT16_C( 4643),
651
+ simde_x_vloadq_u16(UINT16_C( 4643), UINT16_C( 4643), UINT16_C( 4643), UINT16_C( 4643),
652
+ UINT16_C( 4643), UINT16_C( 4643), UINT16_C( 4643), UINT16_C( 4643)) },
653
+ { UINT16_C(25762),
654
+ simde_x_vloadq_u16(UINT16_C(25762), UINT16_C(25762), UINT16_C(25762), UINT16_C(25762),
655
+ UINT16_C(25762), UINT16_C(25762), UINT16_C(25762), UINT16_C(25762)) },
656
+ { UINT16_C(26213),
657
+ simde_x_vloadq_u16(UINT16_C(26213), UINT16_C(26213), UINT16_C(26213), UINT16_C(26213),
658
+ UINT16_C(26213), UINT16_C(26213), UINT16_C(26213), UINT16_C(26213)) },
659
+ { UINT16_C(11045),
660
+ simde_x_vloadq_u16(UINT16_C(11045), UINT16_C(11045), UINT16_C(11045), UINT16_C(11045),
661
+ UINT16_C(11045), UINT16_C(11045), UINT16_C(11045), UINT16_C(11045)) },
662
+ { UINT16_C(56313),
663
+ simde_x_vloadq_u16(UINT16_C(56313), UINT16_C(56313), UINT16_C(56313), UINT16_C(56313),
664
+ UINT16_C(56313), UINT16_C(56313), UINT16_C(56313), UINT16_C(56313)) },
665
+ { UINT16_C( 1055),
666
+ simde_x_vloadq_u16(UINT16_C( 1055), UINT16_C( 1055), UINT16_C( 1055), UINT16_C( 1055),
667
+ UINT16_C( 1055), UINT16_C( 1055), UINT16_C( 1055), UINT16_C( 1055)) }
668
+ };
669
+
670
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
671
+ simde_uint16x8_t r = simde_vdupq_n_u16(test_vec[i].a);
672
+ simde_neon_assert_uint16x8(r, ==, test_vec[i].r);
673
+ }
674
+
675
+ return MUNIT_OK;
676
+ }
677
+
678
+ static MunitResult
679
+ test_simde_vdupq_n_u32(const MunitParameter params[], void* data) {
680
+ (void) params;
681
+ (void) data;
682
+
683
+ const struct {
684
+ uint32_t a;
685
+ simde_uint32x4_t r;
686
+ } test_vec[8] = {
687
+ { UINT32_C(3205406207),
688
+ simde_x_vloadq_u32(UINT32_C(3205406207), UINT32_C(3205406207),
689
+ UINT32_C(3205406207), UINT32_C(3205406207)) },
690
+ { UINT32_C(2641608279),
691
+ simde_x_vloadq_u32(UINT32_C(2641608279), UINT32_C(2641608279),
692
+ UINT32_C(2641608279), UINT32_C(2641608279)) },
693
+ { UINT32_C( 69583),
694
+ simde_x_vloadq_u32(UINT32_C( 69583), UINT32_C( 69583),
695
+ UINT32_C( 69583), UINT32_C( 69583)) },
696
+ { UINT32_C(1363136797),
697
+ simde_x_vloadq_u32(UINT32_C(1363136797), UINT32_C(1363136797),
698
+ UINT32_C(1363136797), UINT32_C(1363136797)) },
699
+ { UINT32_C(1146760842),
700
+ simde_x_vloadq_u32(UINT32_C(1146760842), UINT32_C(1146760842),
701
+ UINT32_C(1146760842), UINT32_C(1146760842)) },
702
+ { UINT32_C(3800978822),
703
+ simde_x_vloadq_u32(UINT32_C(3800978822), UINT32_C(3800978822),
704
+ UINT32_C(3800978822), UINT32_C(3800978822)) },
705
+ { UINT32_C( 414287630),
706
+ simde_x_vloadq_u32(UINT32_C( 414287630), UINT32_C( 414287630),
707
+ UINT32_C( 414287630), UINT32_C( 414287630)) },
708
+ { UINT32_C(1867338402),
709
+ simde_x_vloadq_u32(UINT32_C(1867338402), UINT32_C(1867338402),
710
+ UINT32_C(1867338402), UINT32_C(1867338402)) }
711
+ };
712
+
713
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
714
+ simde_uint32x4_t r = simde_vdupq_n_u32(test_vec[i].a);
715
+ simde_neon_assert_uint32x4(r, ==, test_vec[i].r);
716
+ }
717
+
718
+ return MUNIT_OK;
719
+ }
720
+
721
+ static MunitResult
722
+ test_simde_vdupq_n_u64(const MunitParameter params[], void* data) {
723
+ (void) params;
724
+ (void) data;
725
+
726
+ const struct {
727
+ uint64_t a;
728
+ simde_uint64x2_t r;
729
+ } test_vec[8] = {
730
+ { UINT64_C(3848393335905724000),
731
+ simde_x_vloadq_u64(UINT64_C(3848393335905724000), UINT64_C(3848393335905724000)) },
732
+ { UINT64_C(7521514816403184111),
733
+ simde_x_vloadq_u64(UINT64_C(7521514816403184111), UINT64_C(7521514816403184111)) },
734
+ { UINT64_C(10503742284511346378),
735
+ simde_x_vloadq_u64(UINT64_C(10503742284511346378), UINT64_C(10503742284511346378)) },
736
+ { UINT64_C(3888914191608226801),
737
+ simde_x_vloadq_u64(UINT64_C(3888914191608226801), UINT64_C(3888914191608226801)) },
738
+ { UINT64_C(10404224794072508643),
739
+ simde_x_vloadq_u64(UINT64_C(10404224794072508643), UINT64_C(10404224794072508643)) },
740
+ { UINT64_C(6148912474229806797),
741
+ simde_x_vloadq_u64(UINT64_C(6148912474229806797), UINT64_C(6148912474229806797)) },
742
+ { UINT64_C(6257259334766132716),
743
+ simde_x_vloadq_u64(UINT64_C(6257259334766132716), UINT64_C(6257259334766132716)) },
744
+ { UINT64_C(6904870949189420238),
745
+ simde_x_vloadq_u64(UINT64_C(6904870949189420238), UINT64_C(6904870949189420238)) }
746
+ };
747
+
748
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
749
+ simde_uint64x2_t r = simde_vdupq_n_u64(test_vec[i].a);
750
+ simde_neon_assert_uint64x2(r, ==, test_vec[i].r);
751
+ }
752
+
753
+ return MUNIT_OK;
754
+ }
755
+
756
+ static MunitResult
757
+ test_simde_vdupq_n_f32(const MunitParameter params[], void* data) {
758
+ (void) params;
759
+ (void) data;
760
+
761
+ const struct {
762
+ simde_float32 a;
763
+ simde_float32x4_t r;
764
+ } test_vec[8] = {
765
+ { SIMDE_FLOAT32_C( 202.87),
766
+ simde_x_vloadq_f32(SIMDE_FLOAT32_C( 202.87), SIMDE_FLOAT32_C( 202.87),
767
+ SIMDE_FLOAT32_C( 202.87), SIMDE_FLOAT32_C( 202.87)) },
768
+ { SIMDE_FLOAT32_C( 673.43),
769
+ simde_x_vloadq_f32(SIMDE_FLOAT32_C( 673.43), SIMDE_FLOAT32_C( 673.43),
770
+ SIMDE_FLOAT32_C( 673.43), SIMDE_FLOAT32_C( 673.43)) },
771
+ { SIMDE_FLOAT32_C( -450.12),
772
+ simde_x_vloadq_f32(SIMDE_FLOAT32_C( -450.12), SIMDE_FLOAT32_C( -450.12),
773
+ SIMDE_FLOAT32_C( -450.12), SIMDE_FLOAT32_C( -450.12)) },
774
+ { SIMDE_FLOAT32_C( 35.07),
775
+ simde_x_vloadq_f32(SIMDE_FLOAT32_C( 35.07), SIMDE_FLOAT32_C( 35.07),
776
+ SIMDE_FLOAT32_C( 35.07), SIMDE_FLOAT32_C( 35.07)) },
777
+ { SIMDE_FLOAT32_C( 403.71),
778
+ simde_x_vloadq_f32(SIMDE_FLOAT32_C( 403.71), SIMDE_FLOAT32_C( 403.71),
779
+ SIMDE_FLOAT32_C( 403.71), SIMDE_FLOAT32_C( 403.71)) },
780
+ { SIMDE_FLOAT32_C( 332.31),
781
+ simde_x_vloadq_f32(SIMDE_FLOAT32_C( 332.31), SIMDE_FLOAT32_C( 332.31),
782
+ SIMDE_FLOAT32_C( 332.31), SIMDE_FLOAT32_C( 332.31)) },
783
+ { SIMDE_FLOAT32_C( -965.58),
784
+ simde_x_vloadq_f32(SIMDE_FLOAT32_C( -965.58), SIMDE_FLOAT32_C( -965.58),
785
+ SIMDE_FLOAT32_C( -965.58), SIMDE_FLOAT32_C( -965.58)) },
786
+ { SIMDE_FLOAT32_C( -646.22),
787
+ simde_x_vloadq_f32(SIMDE_FLOAT32_C( -646.22), SIMDE_FLOAT32_C( -646.22),
788
+ SIMDE_FLOAT32_C( -646.22), SIMDE_FLOAT32_C( -646.22)) }
789
+ };
790
+
791
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
792
+ simde_float32x4_t r = simde_vdupq_n_f32(test_vec[i].a);
793
+ simde_neon_assert_float32x4_equal(r, test_vec[i].r, 1);
794
+ }
795
+
796
+ return MUNIT_OK;
797
+ }
798
+
799
+ static MunitResult
800
+ test_simde_vdupq_n_f64(const MunitParameter params[], void* data) {
801
+ (void) params;
802
+ (void) data;
803
+
804
+ const struct {
805
+ simde_float64 a;
806
+ simde_float64x2_t r;
807
+ } test_vec[8] = {
808
+ { SIMDE_FLOAT64_C( 384.02),
809
+ simde_x_vloadq_f64(SIMDE_FLOAT64_C( 384.02), SIMDE_FLOAT64_C( 384.02)) },
810
+ { SIMDE_FLOAT64_C( -82.35),
811
+ simde_x_vloadq_f64(SIMDE_FLOAT64_C( -82.35), SIMDE_FLOAT64_C( -82.35)) },
812
+ { SIMDE_FLOAT64_C( -747.51),
813
+ simde_x_vloadq_f64(SIMDE_FLOAT64_C( -747.51), SIMDE_FLOAT64_C( -747.51)) },
814
+ { SIMDE_FLOAT64_C( 819.29),
815
+ simde_x_vloadq_f64(SIMDE_FLOAT64_C( 819.29), SIMDE_FLOAT64_C( 819.29)) },
816
+ { SIMDE_FLOAT64_C( -252.78),
817
+ simde_x_vloadq_f64(SIMDE_FLOAT64_C( -252.78), SIMDE_FLOAT64_C( -252.78)) },
818
+ { SIMDE_FLOAT64_C( -146.98),
819
+ simde_x_vloadq_f64(SIMDE_FLOAT64_C( -146.98), SIMDE_FLOAT64_C( -146.98)) },
820
+ { SIMDE_FLOAT64_C( 148.38),
821
+ simde_x_vloadq_f64(SIMDE_FLOAT64_C( 148.38), SIMDE_FLOAT64_C( 148.38)) },
822
+ { SIMDE_FLOAT64_C( 401.85),
823
+ simde_x_vloadq_f64(SIMDE_FLOAT64_C( 401.85), SIMDE_FLOAT64_C( 401.85)) }
824
+ };
825
+
826
+ for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
827
+ simde_float64x2_t r = simde_vdupq_n_f64(test_vec[i].a);
828
+ simde_neon_assert_float64x2_equal(r, test_vec[i].r, 1);
829
+ }
830
+
831
+ return MUNIT_OK;
832
+ }
833
+
834
+ #endif /* defined(SIMDE_NEON_NATIVE) || defined(SIMDE_NO_NATIVE) || defined(SIMDE_ALWAYS_BUILD_NATIVE_TESTS) */
835
+
836
+ HEDLEY_DIAGNOSTIC_PUSH
837
+ HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL
838
+
839
+ static MunitTest test_suite_tests[] = {
840
+ #if defined(SIMDE_NEON_NATIVE) || defined(SIMDE_NO_NATIVE) || defined(SIMDE_ALWAYS_BUILD_NATIVE_TESTS)
841
+ SIMDE_TESTS_NEON_DEFINE_TEST(n_s8),
842
+ SIMDE_TESTS_NEON_DEFINE_TEST(n_s16),
843
+ SIMDE_TESTS_NEON_DEFINE_TEST(n_s32),
844
+ SIMDE_TESTS_NEON_DEFINE_TEST(n_s64),
845
+ SIMDE_TESTS_NEON_DEFINE_TEST(n_u8),
846
+ SIMDE_TESTS_NEON_DEFINE_TEST(n_u16),
847
+ SIMDE_TESTS_NEON_DEFINE_TEST(n_u32),
848
+ SIMDE_TESTS_NEON_DEFINE_TEST(n_u64),
849
+ SIMDE_TESTS_NEON_DEFINE_TEST(n_f32),
850
+ SIMDE_TESTS_NEON_DEFINE_TEST(n_f64),
851
+
852
+ SIMDE_TESTS_NEON_DEFINE_TEST_FULL(q, n_s8),
853
+ SIMDE_TESTS_NEON_DEFINE_TEST_FULL(q, n_s16),
854
+ SIMDE_TESTS_NEON_DEFINE_TEST_FULL(q, n_s32),
855
+ SIMDE_TESTS_NEON_DEFINE_TEST_FULL(q, n_s64),
856
+ SIMDE_TESTS_NEON_DEFINE_TEST_FULL(q, n_u8),
857
+ SIMDE_TESTS_NEON_DEFINE_TEST_FULL(q, n_u16),
858
+ SIMDE_TESTS_NEON_DEFINE_TEST_FULL(q, n_u32),
859
+ SIMDE_TESTS_NEON_DEFINE_TEST_FULL(q, n_u64),
860
+ SIMDE_TESTS_NEON_DEFINE_TEST_FULL(q, n_f32),
861
+ SIMDE_TESTS_NEON_DEFINE_TEST_FULL(q, n_f64),
862
+ #endif /* defined(SIMDE_NEON_NATIVE) || defined(SIMDE_NO_NATIVE) || defined(SIMDE_ALWAYS_BUILD_NATIVE_TESTS) */
863
+
864
+ { NULL, NULL, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }
865
+ };
866
+
867
+ HEDLEY_C_DECL MunitSuite* SIMDE_TESTS_GENERATE_SYMBOL(SIMDE_TESTS_CURRENT_NEON_OP)(void) {
868
+ static MunitSuite suite = { (char*) "/v" HEDLEY_STRINGIFY(SIMDE_TESTS_CURRENT_NEON_OP), test_suite_tests, NULL, 1, MUNIT_SUITE_OPTION_NONE };
869
+
870
+ return &suite;
871
+ }
872
+
873
+ HEDLEY_DIAGNOSTIC_POP