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  */
26 
27 #if !defined(SIMDE_ARM_NEON_TYPES_H)
28 #define SIMDE_ARM_NEON_TYPES_H
29 
30 #include "../../simde-common.h"
31 
32 HEDLEY_DIAGNOSTIC_PUSH
33 SIMDE_DISABLE_UNWANTED_DIAGNOSTICS
34 SIMDE_BEGIN_DECLS_
35 
36 #if defined(SIMDE_VECTOR_SUBSCRIPT)
37   #define SIMDE_ARM_NEON_TYPE_INT_DEFINE_(Element_Type_Name, Element_Count, Alignment) \
38     typedef struct simde_##Element_Type_Name##x##Element_Count##_private { \
39       SIMDE_ALIGN_TO(Alignment) Element_Type_Name##_t values SIMDE_VECTOR(sizeof(Element_Type_Name##_t) * Element_Count); \
40     } simde_##Element_Type_Name##x##Element_Count##_private;
41   #define SIMDE_ARM_NEON_TYPE_FLOAT_DEFINE_(Element_Size, Element_Count, Alignment) \
42     typedef struct simde_float##Element_Size##x##Element_Count##_private { \
43       SIMDE_ALIGN_TO(Alignment) simde_float##Element_Size values SIMDE_VECTOR(sizeof(simde_float##Element_Size) * Element_Count); \
44     } simde_float##Element_Size##x##Element_Count##_private;
45 #else
46   #define SIMDE_ARM_NEON_TYPE_INT_DEFINE_(Element_Type_Name, Element_Count, Alignment) \
47     typedef struct simde_##Element_Type_Name##x##Element_Count##_private { \
48       SIMDE_ALIGN_TO(Alignment) Element_Type_Name##_t values[Element_Count]; \
49     } simde_##Element_Type_Name##x##Element_Count##_private;
50   #define SIMDE_ARM_NEON_TYPE_FLOAT_DEFINE_(Element_Size, Element_Count, Alignment) \
51     typedef struct simde_float##Element_Size##x##Element_Count##_private { \
52       SIMDE_ALIGN_TO(Alignment) simde_float##Element_Size values[Element_Count]; \
53     } simde_float##Element_Size##x##Element_Count##_private;
54 #endif
55 
56 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(     int8,  8, SIMDE_ALIGN_8_)
57 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(    int16,  4, SIMDE_ALIGN_8_)
58 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(    int32,  2, SIMDE_ALIGN_8_)
59 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(    int64,  1, SIMDE_ALIGN_8_)
60 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(    uint8,  8, SIMDE_ALIGN_8_)
61 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(   uint16,  4, SIMDE_ALIGN_8_)
62 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(   uint32,  2, SIMDE_ALIGN_8_)
63 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(   uint64,  1, SIMDE_ALIGN_8_)
64 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(     int8, 16, SIMDE_ALIGN_16_)
65 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(    int16,  8, SIMDE_ALIGN_16_)
66 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(    int32,  4, SIMDE_ALIGN_16_)
67 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(    int64,  2, SIMDE_ALIGN_16_)
68 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(    uint8, 16, SIMDE_ALIGN_16_)
69 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(   uint16,  8, SIMDE_ALIGN_16_)
70 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(   uint32,  4, SIMDE_ALIGN_16_)
71 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(   uint64,  2, SIMDE_ALIGN_16_)
72 SIMDE_ARM_NEON_TYPE_FLOAT_DEFINE_(32, 2, SIMDE_ALIGN_8_)
73 SIMDE_ARM_NEON_TYPE_FLOAT_DEFINE_(64, 1, SIMDE_ALIGN_8_)
74 SIMDE_ARM_NEON_TYPE_FLOAT_DEFINE_(32, 4, SIMDE_ALIGN_16_)
75 SIMDE_ARM_NEON_TYPE_FLOAT_DEFINE_(64, 2, SIMDE_ALIGN_16_)
76 
77 #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
78   typedef     float32_t     simde_float32_t;
79 
80   typedef      int8x8_t      simde_int8x8_t;
81   typedef     int16x4_t     simde_int16x4_t;
82   typedef     int32x2_t     simde_int32x2_t;
83   typedef     int64x1_t     simde_int64x1_t;
84   typedef     uint8x8_t     simde_uint8x8_t;
85   typedef    uint16x4_t    simde_uint16x4_t;
86   typedef    uint32x2_t    simde_uint32x2_t;
87   typedef    uint64x1_t    simde_uint64x1_t;
88   typedef   float32x2_t   simde_float32x2_t;
89 
90   typedef     int8x16_t     simde_int8x16_t;
91   typedef     int16x8_t     simde_int16x8_t;
92   typedef     int32x4_t     simde_int32x4_t;
93   typedef     int64x2_t     simde_int64x2_t;
94   typedef    uint8x16_t    simde_uint8x16_t;
95   typedef    uint16x8_t    simde_uint16x8_t;
96   typedef    uint32x4_t    simde_uint32x4_t;
97   typedef    uint64x2_t    simde_uint64x2_t;
98   typedef   float32x4_t   simde_float32x4_t;
99 
100   typedef    int8x8x2_t    simde_int8x8x2_t;
101   typedef   int16x4x2_t   simde_int16x4x2_t;
102   typedef   int32x2x2_t   simde_int32x2x2_t;
103   typedef   int64x1x2_t   simde_int64x1x2_t;
104   typedef   uint8x8x2_t   simde_uint8x8x2_t;
105   typedef  uint16x4x2_t  simde_uint16x4x2_t;
106   typedef  uint32x2x2_t  simde_uint32x2x2_t;
107   typedef  uint64x1x2_t  simde_uint64x1x2_t;
108   typedef float32x2x2_t simde_float32x2x2_t;
109 
110   typedef   int8x16x2_t   simde_int8x16x2_t;
111   typedef   int16x8x2_t   simde_int16x8x2_t;
112   typedef   int32x4x2_t   simde_int32x4x2_t;
113   typedef   int64x2x2_t   simde_int64x2x2_t;
114   typedef  uint8x16x2_t  simde_uint8x16x2_t;
115   typedef  uint16x8x2_t  simde_uint16x8x2_t;
116   typedef  uint32x4x2_t  simde_uint32x4x2_t;
117   typedef  uint64x2x2_t  simde_uint64x2x2_t;
118   typedef float32x4x2_t simde_float32x4x2_t;
119 
120   typedef    int8x8x3_t    simde_int8x8x3_t;
121   typedef   int16x4x3_t   simde_int16x4x3_t;
122   typedef   int32x2x3_t   simde_int32x2x3_t;
123   typedef   int64x1x3_t   simde_int64x1x3_t;
124   typedef   uint8x8x3_t   simde_uint8x8x3_t;
125   typedef  uint16x4x3_t  simde_uint16x4x3_t;
126   typedef  uint32x2x3_t  simde_uint32x2x3_t;
127   typedef  uint64x1x3_t  simde_uint64x1x3_t;
128   typedef float32x2x3_t simde_float32x2x3_t;
129 
130   typedef   int8x16x3_t   simde_int8x16x3_t;
131   typedef   int16x8x3_t   simde_int16x8x3_t;
132   typedef   int32x4x3_t   simde_int32x4x3_t;
133   typedef   int64x2x3_t   simde_int64x2x3_t;
134   typedef  uint8x16x3_t  simde_uint8x16x3_t;
135   typedef  uint16x8x3_t  simde_uint16x8x3_t;
136   typedef  uint32x4x3_t  simde_uint32x4x3_t;
137   typedef  uint64x2x3_t  simde_uint64x2x3_t;
138   typedef float32x4x3_t simde_float32x4x3_t;
139 
140   typedef    int8x8x4_t    simde_int8x8x4_t;
141   typedef   int16x4x4_t   simde_int16x4x4_t;
142   typedef   int32x2x4_t   simde_int32x2x4_t;
143   typedef   int64x1x4_t   simde_int64x1x4_t;
144   typedef   uint8x8x4_t   simde_uint8x8x4_t;
145   typedef  uint16x4x4_t  simde_uint16x4x4_t;
146   typedef  uint32x2x4_t  simde_uint32x2x4_t;
147   typedef  uint64x1x4_t  simde_uint64x1x4_t;
148   typedef float32x2x4_t simde_float32x2x4_t;
149 
150   typedef   int8x16x4_t   simde_int8x16x4_t;
151   typedef   int16x8x4_t   simde_int16x8x4_t;
152   typedef   int32x4x4_t   simde_int32x4x4_t;
153   typedef   int64x2x4_t   simde_int64x2x4_t;
154   typedef  uint8x16x4_t  simde_uint8x16x4_t;
155   typedef  uint16x8x4_t  simde_uint16x8x4_t;
156   typedef  uint32x4x4_t  simde_uint32x4x4_t;
157   typedef  uint64x2x4_t  simde_uint64x2x4_t;
158   typedef float32x4x4_t simde_float32x4x4_t;
159 
160   #if defined(SIMDE_ARM_NEON_A64V8_NATIVE)
161     typedef     float64_t     simde_float64_t;
162     typedef   float64x1_t   simde_float64x1_t;
163     typedef   float64x2_t   simde_float64x2_t;
164     typedef float64x1x2_t simde_float64x1x2_t;
165     typedef float64x2x2_t simde_float64x2x2_t;
166     typedef float64x1x3_t simde_float64x1x3_t;
167     typedef float64x2x3_t simde_float64x2x3_t;
168     typedef float64x1x4_t simde_float64x1x4_t;
169     typedef float64x2x4_t simde_float64x2x4_t;
170   #else
171     #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X1
172     #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X2
173     #define SIMDE_ARM_NEON_NEED_PORTABLE_F64
174     #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X1XN
175     #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X2XN
176   #endif
177 #elif defined(SIMDE_ARCH_X86) || defined(SIMDE_ARCH_AMD64)
178   #define SIMDE_ARM_NEON_NEED_PORTABLE_F32
179   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64
180 
181   #define SIMDE_ARM_NEON_NEED_PORTABLE_VXN
182   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X1XN
183   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X2XN
184 
185   #if defined(SIMDE_X86_MMX_NATIVE)
186     typedef __m64    simde_int8x8_t;
187     typedef __m64   simde_int16x4_t;
188     typedef __m64   simde_int32x2_t;
189     typedef __m64   simde_int64x1_t;
190     typedef __m64   simde_uint8x8_t;
191     typedef __m64  simde_uint16x4_t;
192     typedef __m64  simde_uint32x2_t;
193     typedef __m64  simde_uint64x1_t;
194     typedef __m64 simde_float32x2_t;
195     typedef __m64 simde_float64x1_t;
196   #else
197     #define SIMDE_ARM_NEON_NEED_PORTABLE_I8X8
198     #define SIMDE_ARM_NEON_NEED_PORTABLE_I16X4
199     #define SIMDE_ARM_NEON_NEED_PORTABLE_I32X2
200     #define SIMDE_ARM_NEON_NEED_PORTABLE_I64X1
201     #define SIMDE_ARM_NEON_NEED_PORTABLE_U8X8
202     #define SIMDE_ARM_NEON_NEED_PORTABLE_U16X4
203     #define SIMDE_ARM_NEON_NEED_PORTABLE_U32X2
204     #define SIMDE_ARM_NEON_NEED_PORTABLE_U64X1
205     #define SIMDE_ARM_NEON_NEED_PORTABLE_F32X2
206     #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X1
207   #endif
208 
209   #if defined(SIMDE_X86_SSE_NATIVE)
210     typedef __m128 simde_float32x4_t;
211   #else
212     #define SIMDE_ARM_NEON_NEED_PORTABLE_F32X4
213   #endif
214 
215   #if defined(SIMDE_X86_SSE2_NATIVE)
216     typedef  __m128i  simde_int8x16_t;
217     typedef  __m128i  simde_int16x8_t;
218     typedef  __m128i  simde_int32x4_t;
219     typedef  __m128i  simde_int64x2_t;
220     typedef __m128i  simde_uint8x16_t;
221     typedef __m128i  simde_uint16x8_t;
222     typedef __m128i  simde_uint32x4_t;
223     typedef __m128i  simde_uint64x2_t;
224     typedef __m128d simde_float64x2_t;
225   #else
226     #define SIMDE_ARM_NEON_NEED_PORTABLE_I8X16
227     #define SIMDE_ARM_NEON_NEED_PORTABLE_I16X8
228     #define SIMDE_ARM_NEON_NEED_PORTABLE_I32X4
229     #define SIMDE_ARM_NEON_NEED_PORTABLE_I64X2
230     #define SIMDE_ARM_NEON_NEED_PORTABLE_U8X16
231     #define SIMDE_ARM_NEON_NEED_PORTABLE_U16X8
232     #define SIMDE_ARM_NEON_NEED_PORTABLE_U32X4
233     #define SIMDE_ARM_NEON_NEED_PORTABLE_U64X2
234     #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X2
235   #endif
236 #elif defined(SIMDE_WASM_SIMD128_NATIVE)
237   #define SIMDE_ARM_NEON_NEED_PORTABLE_F32
238   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64
239 
240   #define SIMDE_ARM_NEON_NEED_PORTABLE_64BIT
241 
242   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X1XN
243   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X2XN
244   #define SIMDE_ARM_NEON_NEED_PORTABLE_VXN
245 
246   typedef v128_t   simde_int8x16_t;
247   typedef v128_t   simde_int16x8_t;
248   typedef v128_t   simde_int32x4_t;
249   typedef v128_t   simde_int64x2_t;
250   typedef v128_t  simde_uint8x16_t;
251   typedef v128_t  simde_uint16x8_t;
252   typedef v128_t  simde_uint32x4_t;
253   typedef v128_t  simde_uint64x2_t;
254   typedef v128_t simde_float32x4_t;
255   typedef v128_t simde_float64x2_t;
256 #elif defined(SIMDE_POWER_ALTIVEC_P6_NATIVE)
257   #define SIMDE_ARM_NEON_NEED_PORTABLE_F32
258   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64
259 
260   #define SIMDE_ARM_NEON_NEED_PORTABLE_64BIT
261   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X1XN
262   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X2XN
263   #define SIMDE_ARM_NEON_NEED_PORTABLE_VXN
264 
265   typedef SIMDE_POWER_ALTIVEC_VECTOR(signed char)          simde_int8x16_t;
266   typedef SIMDE_POWER_ALTIVEC_VECTOR(signed short)         simde_int16x8_t;
267   typedef SIMDE_POWER_ALTIVEC_VECTOR(signed int)           simde_int32x4_t;
268   typedef SIMDE_POWER_ALTIVEC_VECTOR(unsigned char)       simde_uint8x16_t;
269   typedef SIMDE_POWER_ALTIVEC_VECTOR(unsigned short)      simde_uint16x8_t;
270   typedef SIMDE_POWER_ALTIVEC_VECTOR(unsigned int)        simde_uint32x4_t;
271   typedef SIMDE_POWER_ALTIVEC_VECTOR(float)              simde_float32x4_t;
272 
273   #if defined(SIMDE_POWER_ALTIVEC_P7_NATIVE)
274     typedef SIMDE_POWER_ALTIVEC_VECTOR(signed long long)       simde_int64x2_t;
275     typedef SIMDE_POWER_ALTIVEC_VECTOR(unsigned long long)     simde_uint64x2_t;
276     typedef SIMDE_POWER_ALTIVEC_VECTOR(double) simde_float64x2_t;
277   #else
278     #define SIMDE_ARM_NEON_NEED_PORTABLE_I64X2
279     #define SIMDE_ARM_NEON_NEED_PORTABLE_U64X2
280     #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X2
281   #endif
282 #else
283   #define SIMDE_ARM_NEON_NEED_PORTABLE_F32
284   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64
285   #define SIMDE_ARM_NEON_NEED_PORTABLE_64BIT
286   #define SIMDE_ARM_NEON_NEED_PORTABLE_128BIT
287 
288   #define SIMDE_ARM_NEON_NEED_PORTABLE_VXN
289   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X1XN
290   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X2XN
291 #endif
292 
293 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_I8X8) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
294   typedef simde_int8x8_private simde_int8x8_t;
295 #endif
296 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_I16X4) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
297   typedef simde_int16x4_private simde_int16x4_t;
298 #endif
299 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_I32X2) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
300   typedef simde_int32x2_private simde_int32x2_t;
301 #endif
302 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_I64X1) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
303   typedef simde_int64x1_private simde_int64x1_t;
304 #endif
305 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_U8X8) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
306   typedef simde_uint8x8_private simde_uint8x8_t;
307 #endif
308 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_U16X4) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
309   typedef simde_uint16x4_private simde_uint16x4_t;
310 #endif
311 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_U32X2) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
312   typedef simde_uint32x2_private simde_uint32x2_t;
313 #endif
314 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_U64X1) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
315   typedef simde_uint64x1_private simde_uint64x1_t;
316 #endif
317 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_F32X2) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
318   typedef simde_float32x2_private simde_float32x2_t;
319 #endif
320 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_F64X1) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
321   typedef simde_float64x1_private simde_float64x1_t;
322 #endif
323 
324 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_I8X16) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
325   typedef simde_int8x16_private simde_int8x16_t;
326 #endif
327 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_I16X8) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
328   typedef simde_int16x8_private simde_int16x8_t;
329 #endif
330 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_I32X4) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
331   typedef simde_int32x4_private simde_int32x4_t;
332 #endif
333 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_I64X2) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
334   typedef simde_int64x2_private simde_int64x2_t;
335 #endif
336 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_U8X16) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
337   typedef simde_uint8x16_private simde_uint8x16_t;
338 #endif
339 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_U16X8) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
340   typedef simde_uint16x8_private simde_uint16x8_t;
341 #endif
342 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_U32X4) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
343   typedef simde_uint32x4_private simde_uint32x4_t;
344 #endif
345 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_U64X2) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
346   typedef simde_uint64x2_private simde_uint64x2_t;
347 #endif
348 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_F32X4) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
349   typedef simde_float32x4_private simde_float32x4_t;
350 #endif
351 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_F64X2) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
352   typedef simde_float64x2_private simde_float64x2_t;
353 #endif
354 
355 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_F32)
356   typedef simde_float32 simde_float32_t;
357 #endif
358 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_F64)
359   typedef simde_float64 simde_float64_t;
360 #endif
361 
362 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_VXN) && !defined(SIMDE_BUG_INTEL_857088)
363   typedef struct    simde_int8x8x2_t {
364     simde_int8x8_t val[2];
365   } simde_int8x8x2_t;
366   typedef struct   simde_int16x4x2_t {
367     simde_int16x4_t val[2];
368   } simde_int16x4x2_t;
369   typedef struct   simde_int32x2x2_t {
370     simde_int32x2_t val[2];
371   } simde_int32x2x2_t;
372   typedef struct   simde_int64x1x2_t {
373     simde_int64x1_t val[2];
374   } simde_int64x1x2_t;
375   typedef struct   simde_uint8x8x2_t {
376     simde_uint8x8_t val[2];
377   } simde_uint8x8x2_t;
378   typedef struct  simde_uint16x4x2_t {
379     simde_uint16x4_t val[2];
380   } simde_uint16x4x2_t;
381   typedef struct  simde_uint32x2x2_t {
382     simde_uint32x2_t val[2];
383   } simde_uint32x2x2_t;
384   typedef struct  simde_uint64x1x2_t {
385     simde_uint64x1_t val[2];
386   } simde_uint64x1x2_t;
387   typedef struct simde_float32x2x2_t {
388     simde_float32x2_t val[2];
389   } simde_float32x2x2_t;
390 
391   typedef struct   simde_int8x16x2_t {
392     simde_int8x16_t val[2];
393   } simde_int8x16x2_t;
394   typedef struct   simde_int16x8x2_t {
395     simde_int16x8_t val[2];
396   } simde_int16x8x2_t;
397   typedef struct   simde_int32x4x2_t {
398     simde_int32x4_t val[2];
399   } simde_int32x4x2_t;
400   typedef struct   simde_int64x2x2_t {
401     simde_int64x2_t val[2];
402   } simde_int64x2x2_t;
403   typedef struct  simde_uint8x16x2_t {
404     simde_uint8x16_t val[2];
405   } simde_uint8x16x2_t;
406   typedef struct  simde_uint16x8x2_t {
407     simde_uint16x8_t val[2];
408   } simde_uint16x8x2_t;
409   typedef struct  simde_uint32x4x2_t {
410     simde_uint32x4_t val[2];
411   } simde_uint32x4x2_t;
412   typedef struct  simde_uint64x2x2_t {
413     simde_uint64x2_t val[2];
414   } simde_uint64x2x2_t;
415   typedef struct simde_float32x4x2_t {
416     simde_float32x4_t val[2];
417   } simde_float32x4x2_t;
418 
419   typedef struct    simde_int8x8x3_t {
420     simde_int8x8_t val[3];
421   } simde_int8x8x3_t;
422   typedef struct   simde_int16x4x3_t {
423     simde_int16x4_t val[3];
424   } simde_int16x4x3_t;
425   typedef struct   simde_int32x2x3_t {
426     simde_int32x2_t val[3];
427   } simde_int32x2x3_t;
428   typedef struct   simde_int64x1x3_t {
429     simde_int64x1_t val[3];
430   } simde_int64x1x3_t;
431   typedef struct   simde_uint8x8x3_t {
432     simde_uint8x8_t val[3];
433   } simde_uint8x8x3_t;
434   typedef struct  simde_uint16x4x3_t {
435     simde_uint16x4_t val[3];
436   } simde_uint16x4x3_t;
437   typedef struct  simde_uint32x2x3_t {
438     simde_uint32x2_t val[3];
439   } simde_uint32x2x3_t;
440   typedef struct  simde_uint64x1x3_t {
441     simde_uint64x1_t val[3];
442   } simde_uint64x1x3_t;
443   typedef struct simde_float32x2x3_t {
444     simde_float32x2_t val[3];
445   } simde_float32x2x3_t;
446 
447   typedef struct   simde_int8x16x3_t {
448     simde_int8x16_t val[3];
449   } simde_int8x16x3_t;
450   typedef struct   simde_int16x8x3_t {
451     simde_int16x8_t val[3];
452   } simde_int16x8x3_t;
453   typedef struct   simde_int32x4x3_t {
454     simde_int32x4_t val[3];
455   } simde_int32x4x3_t;
456   typedef struct   simde_int64x2x3_t {
457     simde_int64x2_t val[3];
458   } simde_int64x2x3_t;
459   typedef struct  simde_uint8x16x3_t {
460     simde_uint8x16_t val[3];
461   } simde_uint8x16x3_t;
462   typedef struct  simde_uint16x8x3_t {
463     simde_uint16x8_t val[3];
464   } simde_uint16x8x3_t;
465   typedef struct  simde_uint32x4x3_t {
466     simde_uint32x4_t val[3];
467   } simde_uint32x4x3_t;
468   typedef struct  simde_uint64x2x3_t {
469     simde_uint64x2_t val[3];
470   } simde_uint64x2x3_t;
471   typedef struct simde_float32x4x3_t {
472     simde_float32x4_t val[3];
473   } simde_float32x4x3_t;
474 
475   typedef struct    simde_int8x8x4_t {
476     simde_int8x8_t val[4];
477   } simde_int8x8x4_t;
478   typedef struct   simde_int16x4x4_t {
479     simde_int16x4_t val[4];
480   } simde_int16x4x4_t;
481   typedef struct   simde_int32x2x4_t {
482     simde_int32x2_t val[4];
483   } simde_int32x2x4_t;
484   typedef struct   simde_int64x1x4_t {
485     simde_int64x1_t val[4];
486   } simde_int64x1x4_t;
487   typedef struct   simde_uint8x8x4_t {
488     simde_uint8x8_t val[4];
489   } simde_uint8x8x4_t;
490   typedef struct  simde_uint16x4x4_t {
491     simde_uint16x4_t val[4];
492   } simde_uint16x4x4_t;
493   typedef struct  simde_uint32x2x4_t {
494     simde_uint32x2_t val[4];
495   } simde_uint32x2x4_t;
496   typedef struct  simde_uint64x1x4_t {
497     simde_uint64x1_t val[4];
498   } simde_uint64x1x4_t;
499   typedef struct simde_float32x2x4_t {
500     simde_float32x2_t val[4];
501   } simde_float32x2x4_t;
502 
503   typedef struct   simde_int8x16x4_t {
504     simde_int8x16_t val[4];
505   } simde_int8x16x4_t;
506   typedef struct   simde_int16x8x4_t {
507     simde_int16x8_t val[4];
508   } simde_int16x8x4_t;
509   typedef struct   simde_int32x4x4_t {
510     simde_int32x4_t val[4];
511   } simde_int32x4x4_t;
512   typedef struct   simde_int64x2x4_t {
513     simde_int64x2_t val[4];
514   } simde_int64x2x4_t;
515   typedef struct  simde_uint8x16x4_t {
516     simde_uint8x16_t val[4];
517   } simde_uint8x16x4_t;
518   typedef struct  simde_uint16x8x4_t {
519     simde_uint16x8_t val[4];
520   } simde_uint16x8x4_t;
521   typedef struct  simde_uint32x4x4_t {
522     simde_uint32x4_t val[4];
523   } simde_uint32x4x4_t;
524   typedef struct  simde_uint64x2x4_t {
525     simde_uint64x2_t val[4];
526   } simde_uint64x2x4_t;
527   typedef struct simde_float32x4x4_t {
528     simde_float32x4_t val[4];
529   } simde_float32x4x4_t;
530 #endif
531 
532 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_F64X1XN)
533   typedef struct   simde_float64x1x2_t {
534     simde_float64x1_t val[2];
535   } simde_float64x1x2_t;
536 
537   typedef struct   simde_float64x1x3_t {
538     simde_float64x1_t val[3];
539   } simde_float64x1x3_t;
540 
541   typedef struct   simde_float64x1x4_t {
542     simde_float64x1_t val[4];
543   } simde_float64x1x4_t;
544 #endif
545 
546 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_F64X2XN)
547   typedef struct   simde_float64x2x2_t {
548     simde_float64x2_t val[2];
549   } simde_float64x2x2_t;
550 
551  typedef struct   simde_float64x2x3_t {
552    simde_float64x2_t val[3];
553  } simde_float64x2x3_t;
554 
555  typedef struct   simde_float64x2x4_t {
556    simde_float64x2_t val[4];
557  } simde_float64x2x4_t;
558 #endif
559 
560 #if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES)
561   typedef   simde_float32_t     float32_t;
562 
563   typedef    simde_int8x8_t      int8x8_t;
564   typedef   simde_int16x4_t     int16x4_t;
565   typedef   simde_int32x2_t     int32x2_t;
566   typedef   simde_int64x1_t     int64x1_t;
567   typedef   simde_uint8x8_t     uint8x8_t;
568   typedef  simde_uint16x4_t    uint16x4_t;
569   typedef  simde_uint32x2_t    uint32x2_t;
570   typedef  simde_uint64x1_t    uint64x1_t;
571   typedef simde_float32x2_t   float32x2_t;
572 
573   typedef   simde_int8x16_t     int8x16_t;
574   typedef   simde_int16x8_t     int16x8_t;
575   typedef   simde_int32x4_t     int32x4_t;
576   typedef   simde_int64x2_t     int64x2_t;
577   typedef  simde_uint8x16_t    uint8x16_t;
578   typedef  simde_uint16x8_t    uint16x8_t;
579   typedef  simde_uint32x4_t    uint32x4_t;
580   typedef  simde_uint64x2_t    uint64x2_t;
581   typedef simde_float32x4_t   float32x4_t;
582 
583   typedef  simde_int8x8x2_t    int8x8x2_t;
584   typedef simde_int16x4x2_t   int16x4x2_t;
585   typedef simde_int32x2x2_t   int32x2x2_t;
586   typedef simde_int64x1x2_t   int64x1x2_t;
587   typedef simde_uint8x8x2_t   uint8x8x2_t;
588   typedef simde_uint16x4x2_t  uint16x4x2_t;
589   typedef simde_uint32x2x2_t  uint32x2x2_t;
590   typedef simde_uint64x1x2_t  uint64x1x2_t;
591   typedef simde_float32x2x2_t float32x2x2_t;
592 
593   typedef simde_int8x16x2_t   int8x16x2_t;
594   typedef simde_int16x8x2_t   int16x8x2_t;
595   typedef simde_int32x4x2_t   int32x4x2_t;
596   typedef simde_int64x2x2_t   int64x2x2_t;
597   typedef simde_uint8x16x2_t  uint8x16x2_t;
598   typedef simde_uint16x8x2_t  uint16x8x2_t;
599   typedef simde_uint32x4x2_t  uint32x4x2_t;
600   typedef simde_uint64x2x2_t  uint64x2x2_t;
601   typedef simde_float32x4x2_t float32x4x2_t;
602 
603   typedef  simde_int8x8x3_t    int8x8x3_t;
604   typedef simde_int16x4x3_t   int16x4x3_t;
605   typedef simde_int32x2x3_t   int32x2x3_t;
606   typedef simde_int64x1x3_t   int64x1x3_t;
607   typedef simde_uint8x8x3_t   uint8x8x3_t;
608   typedef simde_uint16x4x3_t  uint16x4x3_t;
609   typedef simde_uint32x2x3_t  uint32x2x3_t;
610   typedef simde_uint64x1x3_t  uint64x1x3_t;
611   typedef simde_float32x2x3_t float32x2x3_t;
612 
613   typedef simde_int8x16x3_t   int8x16x3_t;
614   typedef simde_int16x8x3_t   int16x8x3_t;
615   typedef simde_int32x4x3_t   int32x4x3_t;
616   typedef simde_int64x2x3_t   int64x2x3_t;
617   typedef simde_uint8x16x3_t  uint8x16x3_t;
618   typedef simde_uint16x8x3_t  uint16x8x3_t;
619   typedef simde_uint32x4x3_t  uint32x4x3_t;
620   typedef simde_uint64x2x3_t  uint64x2x3_t;
621   typedef simde_float32x4x3_t float32x4x3_t;
622 
623   typedef  simde_int8x8x4_t    int8x8x4_t;
624   typedef simde_int16x4x4_t   int16x4x4_t;
625   typedef simde_int32x2x4_t   int32x2x4_t;
626   typedef simde_int64x1x4_t   int64x1x4_t;
627   typedef simde_uint8x8x4_t   uint8x8x4_t;
628   typedef simde_uint16x4x4_t  uint16x4x4_t;
629   typedef simde_uint32x2x4_t  uint32x2x4_t;
630   typedef simde_uint64x1x4_t  uint64x1x4_t;
631   typedef simde_float32x2x4_t float32x2x4_t;
632 
633   typedef simde_int8x16x4_t   int8x16x4_t;
634   typedef simde_int16x8x4_t   int16x8x4_t;
635   typedef simde_int32x4x4_t   int32x4x4_t;
636   typedef simde_int64x2x4_t   int64x2x4_t;
637   typedef simde_uint8x16x4_t  uint8x16x4_t;
638   typedef simde_uint16x8x4_t  uint16x8x4_t;
639   typedef simde_uint32x4x4_t  uint32x4x4_t;
640   typedef simde_uint64x2x4_t  uint64x2x4_t;
641   typedef simde_float32x4x4_t float32x4x4_t;
642 #endif
643 #if defined(SIMDE_ARM_NEON_A64V8_ENABLE_NATIVE_ALIASES)
644   typedef   simde_float64_t     float64_t;
645   typedef simde_float64x1_t   float64x1_t;
646   typedef simde_float64x2_t   float64x2_t;
647   typedef simde_float64x1x2_t float64x1x2_t;
648   typedef simde_float64x2x2_t float64x2x2_t;
649   typedef simde_float64x1x3_t float64x1x3_t;
650   typedef simde_float64x2x3_t float64x2x3_t;
651   typedef simde_float64x1x4_t float64x1x4_t;
652   typedef simde_float64x2x4_t float64x2x4_t;
653 #endif
654 
655 #define SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(T) \
656   SIMDE_FUNCTION_ATTRIBUTES simde_##T##_private simde_##T##_to_private (simde_##T##_t value) { simde_##T##_private to; simde_memcpy(&to, &value, sizeof(to)); return to; } \
657   SIMDE_FUNCTION_ATTRIBUTES simde_##T##_t simde_##T##_from_private (simde_##T##_private value) { simde_##T##_t to; simde_memcpy(&to, &value, sizeof(to)); return to; }
658 
659 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(int8x8)
660 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(int16x4)
661 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(int32x2)
662 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(int64x1)
663 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(uint8x8)
664 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(uint16x4)
665 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(uint32x2)
666 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(uint64x1)
667 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(float32x2)
668 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(float64x1)
669 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(int8x16)
670 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(int16x8)
671 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(int32x4)
672 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(int64x2)
673 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(uint8x16)
674 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(uint16x8)
675 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(uint32x4)
676 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(uint64x2)
677 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(float32x4)
678 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(float64x2)
679 
680 SIMDE_END_DECLS_
681 HEDLEY_DIAGNOSTIC_POP
682 
683 #endif /* SIMDE_ARM_NEON_TYPES_H */
684