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