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