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