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