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(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(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(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(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,  8)
57 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(    int16, 4,  8)
58 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(    int32, 2,  8)
59 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(    int64, 1,  8)
60 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(    uint8, 8,  8)
61 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(   uint16, 4,  8)
62 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(   uint32, 2,  8)
63 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(   uint64, 1,  8)
64 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(     int8, 16, 16)
65 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(    int16, 8,  16)
66 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(    int32, 4,  16)
67 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(    int64, 2,  16)
68 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(    uint8, 16, 16)
69 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(   uint16, 8,  16)
70 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(   uint32, 4,  16)
71 SIMDE_ARM_NEON_TYPE_INT_DEFINE_(   uint64, 2,  16)
72 SIMDE_ARM_NEON_TYPE_FLOAT_DEFINE_(32, 2, 8)
73 SIMDE_ARM_NEON_TYPE_FLOAT_DEFINE_(64, 1, 8)
74 SIMDE_ARM_NEON_TYPE_FLOAT_DEFINE_(32, 4, 16)
75 SIMDE_ARM_NEON_TYPE_FLOAT_DEFINE_(64, 2, 16)
76 
77 #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
78   typedef    int8x8_t    simde_int8x8_t;
79   typedef   int16x4_t   simde_int16x4_t;
80   typedef   int32x2_t   simde_int32x2_t;
81   typedef   int64x1_t   simde_int64x1_t;
82   typedef   uint8x8_t   simde_uint8x8_t;
83   typedef  uint16x4_t  simde_uint16x4_t;
84   typedef  uint32x2_t  simde_uint32x2_t;
85   typedef  uint64x1_t  simde_uint64x1_t;
86   typedef float32x2_t simde_float32x2_t;
87 
88   typedef   int8x16_t   simde_int8x16_t;
89   typedef   int16x8_t   simde_int16x8_t;
90   typedef   int32x4_t   simde_int32x4_t;
91   typedef   int64x2_t   simde_int64x2_t;
92   typedef  uint8x16_t  simde_uint8x16_t;
93   typedef  uint16x8_t  simde_uint16x8_t;
94   typedef  uint32x4_t  simde_uint32x4_t;
95   typedef  uint64x2_t  simde_uint64x2_t;
96   typedef float32x4_t simde_float32x4_t;
97 
98   typedef    int8x8x2_t    simde_int8x8x2_t;
99   typedef   int16x4x2_t   simde_int16x4x2_t;
100   typedef   int32x2x2_t   simde_int32x2x2_t;
101   typedef   int64x1x2_t   simde_int64x1x2_t;
102   typedef   uint8x8x2_t   simde_uint8x8x2_t;
103   typedef  uint16x4x2_t  simde_uint16x4x2_t;
104   typedef  uint32x2x2_t  simde_uint32x2x2_t;
105   typedef  uint64x1x2_t  simde_uint64x1x2_t;
106   typedef float32x2x2_t simde_float32x2x2_t;
107 
108   typedef   int8x16x2_t   simde_int8x16x2_t;
109   typedef   int16x8x2_t   simde_int16x8x2_t;
110   typedef   int32x4x2_t   simde_int32x4x2_t;
111   typedef   int64x2x2_t   simde_int64x2x2_t;
112   typedef  uint8x16x2_t  simde_uint8x16x2_t;
113   typedef  uint16x8x2_t  simde_uint16x8x2_t;
114   typedef  uint32x4x2_t  simde_uint32x4x2_t;
115   typedef  uint64x2x2_t  simde_uint64x2x2_t;
116   typedef float32x4x2_t simde_float32x4x2_t;
117 
118   typedef   float32_t   simde_float32_t;
119 
120   typedef    int8x8x2_t    simde_int8x8x2_t;
121   typedef   int16x4x2_t   simde_int16x4x2_t;
122   typedef   int32x2x2_t   simde_int32x2x2_t;
123   typedef   int64x1x2_t   simde_int64x1x2_t;
124   typedef   uint8x8x2_t   simde_uint8x8x2_t;
125   typedef  uint16x4x2_t  simde_uint16x4x2_t;
126   typedef  uint32x2x2_t  simde_uint32x2x2_t;
127   typedef  uint64x1x2_t  simde_uint64x1x2_t;
128   typedef float32x2x2_t simde_float32x2x2_t;
129 
130   typedef   int8x16x2_t   simde_int8x16x2_t;
131   typedef   int16x8x2_t   simde_int16x8x2_t;
132   typedef   int32x4x2_t   simde_int32x4x2_t;
133   typedef   int64x2x2_t   simde_int64x2x2_t;
134   typedef  uint8x16x2_t  simde_uint8x16x2_t;
135   typedef  uint16x8x2_t  simde_uint16x8x2_t;
136   typedef  uint32x4x2_t  simde_uint32x4x2_t;
137   typedef  uint64x2x2_t  simde_uint64x2x2_t;
138   typedef float32x4x2_t simde_float32x4x2_t;
139 
140   #if defined(SIMDE_ARM_NEON_A64V8_NATIVE)
141     typedef float64x1_t simde_float64x1_t;
142     typedef float64x2_t simde_float64x2_t;
143     typedef   float64_t   simde_float64_t;
144 
145     typedef float64x1x2_t simde_float64x1x2_t;
146     typedef float64x2x2_t simde_float64x2x2_t;
147     typedef   float64x2_t   simde_float64x2_t;
148   #else
149     #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X1
150     #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X2
151     #define SIMDE_ARM_NEON_NEED_PORTABLE_F64
152 
153     #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X1X2
154     #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X2X2
155   #endif
156 #elif defined(SIMDE_ARCH_X86) || defined(SIMDE_ARCH_AMD64)
157   #define SIMDE_ARM_NEON_NEED_PORTABLE_F32
158   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64
159 
160   #define SIMDE_ARM_NEON_NEED_PORTABLE_VX2
161   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X1X2
162   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X2X2
163 
164   #if defined(SIMDE_X86_MMX_NATIVE)
165     typedef __m64    simde_int8x8_t;
166     typedef __m64   simde_int16x4_t;
167     typedef __m64   simde_int32x2_t;
168     typedef __m64   simde_int64x1_t;
169     typedef __m64   simde_uint8x8_t;
170     typedef __m64  simde_uint16x4_t;
171     typedef __m64  simde_uint32x2_t;
172     typedef __m64  simde_uint64x1_t;
173     typedef __m64 simde_float32x2_t;
174     typedef __m64 simde_float64x1_t;
175   #else
176     #define SIMDE_ARM_NEON_NEED_PORTABLE_I8X8
177     #define SIMDE_ARM_NEON_NEED_PORTABLE_I16X4
178     #define SIMDE_ARM_NEON_NEED_PORTABLE_I32X2
179     #define SIMDE_ARM_NEON_NEED_PORTABLE_I64X1
180     #define SIMDE_ARM_NEON_NEED_PORTABLE_U8X8
181     #define SIMDE_ARM_NEON_NEED_PORTABLE_U16X4
182     #define SIMDE_ARM_NEON_NEED_PORTABLE_U32X2
183     #define SIMDE_ARM_NEON_NEED_PORTABLE_U64X1
184     #define SIMDE_ARM_NEON_NEED_PORTABLE_F32X2
185     #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X1
186   #endif
187 
188   #if defined(SIMDE_X86_SSE_NATIVE)
189     typedef __m128 simde_float32x4_t;
190   #else
191     #define SIMDE_ARM_NEON_NEED_PORTABLE_F32X4
192   #endif
193 
194   #if defined(SIMDE_X86_SSE2_NATIVE)
195     typedef  __m128i  simde_int8x16_t;
196     typedef  __m128i  simde_int16x8_t;
197     typedef  __m128i  simde_int32x4_t;
198     typedef  __m128i  simde_int64x2_t;
199     typedef __m128i  simde_uint8x16_t;
200     typedef __m128i  simde_uint16x8_t;
201     typedef __m128i  simde_uint32x4_t;
202     typedef __m128i  simde_uint64x2_t;
203     typedef __m128d simde_float64x2_t;
204   #else
205     #define SIMDE_ARM_NEON_NEED_PORTABLE_I8X16
206     #define SIMDE_ARM_NEON_NEED_PORTABLE_I16X8
207     #define SIMDE_ARM_NEON_NEED_PORTABLE_I32X4
208     #define SIMDE_ARM_NEON_NEED_PORTABLE_I64X2
209     #define SIMDE_ARM_NEON_NEED_PORTABLE_U8X16
210     #define SIMDE_ARM_NEON_NEED_PORTABLE_U16X8
211     #define SIMDE_ARM_NEON_NEED_PORTABLE_U32X4
212     #define SIMDE_ARM_NEON_NEED_PORTABLE_U64X2
213     #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X2
214   #endif
215 #elif defined(SIMDE_WASM_SIMD128_NATIVE)
216   #define SIMDE_ARM_NEON_NEED_PORTABLE_F32
217   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64
218 
219   #define SIMDE_ARM_NEON_NEED_PORTABLE_64BIT
220 
221   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X1X2
222   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X2X2
223   #define SIMDE_ARM_NEON_NEED_PORTABLE_VX2
224 
225   typedef v128_t   simde_int8x16_t;
226   typedef v128_t   simde_int16x8_t;
227   typedef v128_t   simde_int32x4_t;
228   typedef v128_t   simde_int64x2_t;
229   typedef v128_t  simde_uint8x16_t;
230   typedef v128_t  simde_uint16x8_t;
231   typedef v128_t  simde_uint32x4_t;
232   typedef v128_t  simde_uint64x2_t;
233   typedef v128_t simde_float32x4_t;
234   typedef v128_t simde_float64x2_t;
235 #elif defined(SIMDE_POWER_ALTIVEC_P5_NATIVE)
236   #define SIMDE_ARM_NEON_NEED_PORTABLE_F32
237   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64
238 
239   #define SIMDE_ARM_NEON_NEED_PORTABLE_64BIT
240   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X1X2
241   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X2X2
242   #define SIMDE_ARM_NEON_NEED_PORTABLE_VX2
243 
244   typedef SIMDE_POWER_ALTIVEC_VECTOR(signed char)          simde_int8x16_t;
245   typedef SIMDE_POWER_ALTIVEC_VECTOR(signed short)         simde_int16x8_t;
246   typedef SIMDE_POWER_ALTIVEC_VECTOR(signed int)           simde_int32x4_t;
247   typedef SIMDE_POWER_ALTIVEC_VECTOR(unsigned char)       simde_uint8x16_t;
248   typedef SIMDE_POWER_ALTIVEC_VECTOR(unsigned short)      simde_uint16x8_t;
249   typedef SIMDE_POWER_ALTIVEC_VECTOR(unsigned int)        simde_uint32x4_t;
250   typedef SIMDE_POWER_ALTIVEC_VECTOR(float)              simde_float32x4_t;
251 
252   #if defined(SIMDE_POWER_ALTIVEC_P7_NATIVE)
253     typedef SIMDE_POWER_ALTIVEC_VECTOR(signed long long)       simde_int64x2_t;
254     typedef SIMDE_POWER_ALTIVEC_VECTOR(unsigned long long)     simde_uint64x2_t;
255     typedef SIMDE_ALIGN(16) SIMDE_POWER_ALTIVEC_VECTOR(double) simde_float64x2_t;
256   #else
257     #define SIMDE_ARM_NEON_NEED_PORTABLE_I64X2
258     #define SIMDE_ARM_NEON_NEED_PORTABLE_U64X2
259     #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X2
260   #endif
261 #else
262   #define SIMDE_ARM_NEON_NEED_PORTABLE_F32
263   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64
264   #define SIMDE_ARM_NEON_NEED_PORTABLE_64BIT
265   #define SIMDE_ARM_NEON_NEED_PORTABLE_128BIT
266 
267   #define SIMDE_ARM_NEON_NEED_PORTABLE_VX2
268   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X1X2
269   #define SIMDE_ARM_NEON_NEED_PORTABLE_F64X2X2
270 #endif
271 
272 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_I8X8) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
273   typedef simde_int8x8_private simde_int8x8_t;
274 #endif
275 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_I16X4) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
276   typedef simde_int16x4_private simde_int16x4_t;
277 #endif
278 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_I32X2) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
279   typedef simde_int32x2_private simde_int32x2_t;
280 #endif
281 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_I64X1) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
282   typedef simde_int64x1_private simde_int64x1_t;
283 #endif
284 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_U8X8) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
285   typedef simde_uint8x8_private simde_uint8x8_t;
286 #endif
287 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_U16X4) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
288   typedef simde_uint16x4_private simde_uint16x4_t;
289 #endif
290 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_U32X2) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
291   typedef simde_uint32x2_private simde_uint32x2_t;
292 #endif
293 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_U64X1) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
294   typedef simde_uint64x1_private simde_uint64x1_t;
295 #endif
296 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_F32X2) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
297   typedef simde_float32x2_private simde_float32x2_t;
298 #endif
299 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_F64X1) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_64BIT)
300   typedef simde_float64x1_private simde_float64x1_t;
301 #endif
302 
303 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_I8X16) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
304   typedef simde_int8x16_private simde_int8x16_t;
305 #endif
306 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_I16X8) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
307   typedef simde_int16x8_private simde_int16x8_t;
308 #endif
309 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_I32X4) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
310   typedef simde_int32x4_private simde_int32x4_t;
311 #endif
312 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_I64X2) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
313   typedef simde_int64x2_private simde_int64x2_t;
314 #endif
315 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_U8X16) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
316   typedef simde_uint8x16_private simde_uint8x16_t;
317 #endif
318 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_U16X8) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
319   typedef simde_uint16x8_private simde_uint16x8_t;
320 #endif
321 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_U32X4) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
322   typedef simde_uint32x4_private simde_uint32x4_t;
323 #endif
324 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_U64X2) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
325   typedef simde_uint64x2_private simde_uint64x2_t;
326 #endif
327 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_F32X4) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
328   typedef simde_float32x4_private simde_float32x4_t;
329 #endif
330 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_F64X2) || defined(SIMDE_ARM_NEON_NEED_PORTABLE_128BIT)
331   typedef simde_float64x2_private simde_float64x2_t;
332 #endif
333 
334 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_F32)
335   typedef simde_float32 simde_float32_t;
336 #endif
337 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_F64)
338   typedef simde_float64 simde_float64_t;
339 #endif
340 
341 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_VX2) && !defined(SIMDE_BUG_INTEL_857088)
342   typedef struct    simde_int8x8x2_t {
343     simde_int8x8_t val[2];
344   } simde_int8x8x2_t;
345   typedef struct   simde_int16x4x2_t {
346     simde_int16x4_t val[2];
347   } simde_int16x4x2_t;
348   typedef struct   simde_int32x2x2_t {
349     simde_int32x2_t val[2];
350   } simde_int32x2x2_t;
351   typedef struct   simde_int64x1x2_t {
352     simde_int64x1_t val[2];
353   } simde_int64x1x2_t;
354   typedef struct   simde_uint8x8x2_t {
355     simde_uint8x8_t val[2];
356   } simde_uint8x8x2_t;
357   typedef struct  simde_uint16x4x2_t {
358     simde_uint16x4_t val[2];
359   } simde_uint16x4x2_t;
360   typedef struct  simde_uint32x2x2_t {
361     simde_uint32x2_t val[2];
362   } simde_uint32x2x2_t;
363   typedef struct  simde_uint64x1x2_t {
364     simde_uint64x1_t val[2];
365   } simde_uint64x1x2_t;
366   typedef struct simde_float32x2x2_t {
367     simde_float32x2_t val[2];
368   } simde_float32x2x2_t;
369 
370   typedef struct   simde_int8x16x2_t {
371     simde_int8x16_t val[2];
372   } simde_int8x16x2_t;
373   typedef struct   simde_int16x8x2_t {
374     simde_int16x8_t val[2];
375   } simde_int16x8x2_t;
376   typedef struct   simde_int32x4x2_t {
377     simde_int32x4_t val[2];
378   } simde_int32x4x2_t;
379   typedef struct   simde_int64x2x2_t {
380     simde_int64x2_t val[2];
381   } simde_int64x2x2_t;
382   typedef struct  simde_uint8x16x2_t {
383     simde_uint8x16_t val[2];
384   } simde_uint8x16x2_t;
385   typedef struct  simde_uint16x8x2_t {
386     simde_uint16x8_t val[2];
387   } simde_uint16x8x2_t;
388   typedef struct  simde_uint32x4x2_t {
389     simde_uint32x4_t val[2];
390   } simde_uint32x4x2_t;
391   typedef struct  simde_uint64x2x2_t {
392     simde_uint64x2_t val[2];
393   } simde_uint64x2x2_t;
394   typedef struct simde_float32x4x2_t {
395     simde_float32x4_t val[2];
396   } simde_float32x4x2_t;
397 #endif
398 
399 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_F64X1X2)
400   typedef struct   simde_float64x1x2_t {
401     simde_float64x1_t val[2];
402   } simde_float64x1x2_t;
403 #endif
404 
405 #if defined(SIMDE_ARM_NEON_NEED_PORTABLE_F64X2X2)
406 typedef struct   simde_float64x2x2_t {
407   simde_float64x2_t val[2];
408 } simde_float64x2x2_t;
409 #endif
410 
411 #if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES)
412   typedef    simde_int8x8_t    int8x8_t;
413   typedef   simde_int16x4_t   int16x4_t;
414   typedef   simde_int32x2_t   int32x2_t;
415   typedef   simde_int64x1_t   int64x1_t;
416   typedef   simde_uint8x8_t   uint8x8_t;
417   typedef  simde_uint16x4_t  uint16x4_t;
418   typedef  simde_uint32x2_t  uint32x2_t;
419   typedef  simde_uint64x1_t  uint64x1_t;
420   typedef simde_float32x2_t float32x2_t;
421   typedef   simde_int8x16_t   int8x16_t;
422   typedef   simde_int16x8_t   int16x8_t;
423   typedef   simde_int32x4_t   int32x4_t;
424   typedef   simde_int64x2_t   int64x2_t;
425   typedef  simde_uint8x16_t  uint8x16_t;
426   typedef  simde_uint16x8_t  uint16x8_t;
427   typedef  simde_uint32x4_t  uint32x4_t;
428   typedef  simde_uint64x2_t  uint64x2_t;
429   typedef simde_float32x4_t float32x4_t;
430 
431   typedef    simde_int8x8x2_t    int8x8x2_t;
432   typedef   simde_int16x4x2_t   int16x4x2_t;
433   typedef   simde_int32x2x2_t   int32x2x2_t;
434   typedef   simde_int64x1x2_t   int64x1x2_t;
435   typedef   simde_uint8x8x2_t   uint8x8x2_t;
436   typedef  simde_uint16x4x2_t  uint16x4x2_t;
437   typedef  simde_uint32x2x2_t  uint32x2x2_t;
438   typedef  simde_uint64x1x2_t  uint64x1x2_t;
439   typedef simde_float32x2x2_t float32x2x2_t;
440   typedef   simde_int8x16x2_t   int8x16x2_t;
441   typedef   simde_int16x8x2_t   int16x8x2_t;
442   typedef   simde_int32x4x2_t   int32x4x2_t;
443   typedef   simde_int64x2x2_t   int64x2x2_t;
444   typedef  simde_uint8x16x2_t  uint8x16x2_t;
445   typedef  simde_uint16x8x2_t  uint16x8x2_t;
446   typedef  simde_uint32x4x2_t  uint32x4x2_t;
447   typedef  simde_uint64x2x2_t  uint64x2x2_t;
448   typedef simde_float32x4x2_t float32x4x2_t;
449 
450 #endif
451 #if defined(SIMDE_ARM_NEON_A64V8_ENABLE_NATIVE_ALIASES)
452   typedef simde_float64x1_t   float64x1_t;
453   typedef simde_float64x2_t   float64x2_t;
454 
455   typedef  simde_uint64x1x2_t  uint64x1x2_t;
456   typedef simde_float64x2x2_t float64x2x2_t;
457 #endif
458 
459 #define SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(T) \
460   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; } \
461   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; }
462 
463 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(int8x8)
464 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(int16x4)
465 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(int32x2)
466 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(int64x1)
467 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(uint8x8)
468 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(uint16x4)
469 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(uint32x2)
470 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(uint64x1)
471 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(float32x2)
472 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(float64x1)
473 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(int8x16)
474 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(int16x8)
475 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(int32x4)
476 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(int64x2)
477 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(uint8x16)
478 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(uint16x8)
479 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(uint32x4)
480 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(uint64x2)
481 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(float32x4)
482 SIMDE_ARM_NEON_TYPE_DEFINE_CONVERSIONS_(float64x2)
483 
484 SIMDE_END_DECLS_
485 HEDLEY_DIAGNOSTIC_POP
486 
487 #endif /* SIMDE_ARM_NEON_TYPES_H */
488