vector_make.h (338643B) - Raw
1 /*! @header 2 * This header defines functions for constructing, extending, and truncating 3 * simd vector types. 4 * 5 * For each vector type `simd_typeN` supported by <simd/simd.h>, the following 6 * constructors are provided: 7 * 8 * ~~~ 9 * simd_typeN simd_make_typeN(type other); 10 * simd_typeN simd_make_typeN(simd_typeM other); 11 * ~~~ 12 * For the scalar-input version, or if M < N, these functions zero-extend 13 * `other` to produce a wider vector. If M == N, `other` is passed through 14 * unmodified. If `M > N`, `other` is truncated to form the result. 15 * 16 * ~~~ 17 * simd_typeN simd_make_typeN_undef(type other); 18 * simd_typeN simd_make_typeN_undef(simd_typeM other); 19 * ~~~ 20 * These functions are only available for M < N and for scalar inputs. They 21 * extend `other` to produce a wider vector where the contents of the newly- 22 * formed lanes are undefined. 23 * 24 * In addition, if N is 2, 3, or 4, the following constructors are available: 25 * ~~~ 26 * simd_make_typeN(parts ...) 27 * ~~~ 28 * where parts is a list of scalars and smaller vectors such that the sum of 29 * the number of lanes in the arguments is equal to N. For example, a 30 * `simd_float3` can be constructed from three `floats`, or a `float` and a 31 * `simd_float2` in any order: 32 * ~~~ 33 * simd_float2 ab = { 1, 2 }; 34 * simd_float3 vector = simd_make_float3(ab, 3); 35 * ~~~ 36 * 37 * In C++ the above functions are templated in the simd:: namespace. 38 * 39 * C++ Function Equivalent C Function 40 * ------------------------------------------------------------------- 41 * simd::make<simd::typeN>(x ...) simd_make_typeN(x ...) 42 * simd::make_undef<simd::typeN>(x ...) simd_make_typeN_undef(x ...) 43 * 44 * 45 * In addition, templated Vector<ScalarType, count> struct is available for 46 * templated code based on the scalar type. 47 * 48 * template <typename ScalarType, size_t count> struct simd::Vector { 49 * // static const size_t count 50 * // typedef scalar_t 51 * // typedef type 52 * // typedef packed_t 53 * }; 54 * 55 * Lookup the equivalent Vector struct according to typeN: 56 * template <typename typeN> struct simd::get_traits 57 * { 58 * // using type = Vector<ScalarType, count>; 59 * }; 60 * 61 * This is commonly used to get the type traits of typeN, so a helper type, 62 * namely traits, is available to query the type traits easily. 63 * simd::traits<typeN>::count 64 * simd::traits<typeN>::scalar_t 65 * 66 * @copyright 2014-2016 Apple, Inc. All rights reserved. 67 * @unsorted */ 68 69 #ifndef SIMD_VECTOR_CONSTRUCTORS 70 #define SIMD_VECTOR_CONSTRUCTORS 71 72 #include <simd/vector_types.h> 73 #include <stddef.h> 74 #if SIMD_COMPILER_HAS_REQUIRED_FEATURES 75 76 #ifdef __cplusplus 77 extern "C" { 78 #endif 79 80 /*! @abstract Concatenates `x` and `y` to form a vector of two 8-bit signed 81 * (twos-complement) integers. */ 82 static inline SIMD_CFUNC simd_char2 simd_make_char2(char x, char y) { 83 simd_char2 result; 84 result.x = x; 85 result.y = y; 86 return result; 87 } 88 89 /*! @abstract Zero-extends `other` to form a vector of two 8-bit signed 90 * (twos-complement) integers. */ 91 static inline SIMD_CFUNC simd_char2 simd_make_char2(char other) { 92 simd_char2 result = 0; 93 result.x = other; 94 return result; 95 } 96 97 /*! @abstract Extends `other` to form a vector of two 8-bit signed (twos- 98 * complement) integers. The contents of the newly-created vector lanes are 99 * unspecified. */ 100 static inline SIMD_CFUNC simd_char2 simd_make_char2_undef(char other) { 101 simd_char2 result; 102 result.x = other; 103 return result; 104 } 105 106 /*! @abstract Returns `other` unmodified. This function is a convenience for 107 * templated and autogenerated code. */ 108 static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char2 other) { 109 return other; 110 } 111 112 /*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos- 113 * complement) integers. */ 114 static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char3 other) { 115 return other.xy; 116 } 117 118 /*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos- 119 * complement) integers. */ 120 static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char4 other) { 121 return other.xy; 122 } 123 124 /*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos- 125 * complement) integers. */ 126 static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char8 other) { 127 return other.xy; 128 } 129 130 /*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos- 131 * complement) integers. */ 132 static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char16 other) { 133 return other.xy; 134 } 135 136 /*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos- 137 * complement) integers. */ 138 static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char32 other) { 139 return other.xy; 140 } 141 142 /*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos- 143 * complement) integers. */ 144 static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char64 other) { 145 return other.xy; 146 } 147 148 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 8-bit 149 * signed (twos-complement) integers. */ 150 static inline SIMD_CFUNC simd_char3 simd_make_char3(char x, char y, char z) { 151 simd_char3 result; 152 result.x = x; 153 result.y = y; 154 result.z = z; 155 return result; 156 } 157 158 /*! @abstract Concatenates `x` and `yz` to form a vector of three 8-bit 159 * signed (twos-complement) integers. */ 160 static inline SIMD_CFUNC simd_char3 simd_make_char3(char x, simd_char2 yz) { 161 simd_char3 result; 162 result.x = x; 163 result.yz = yz; 164 return result; 165 } 166 167 /*! @abstract Concatenates `xy` and `z` to form a vector of three 8-bit 168 * signed (twos-complement) integers. */ 169 static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char2 xy, char z) { 170 simd_char3 result; 171 result.xy = xy; 172 result.z = z; 173 return result; 174 } 175 176 /*! @abstract Zero-extends `other` to form a vector of three 8-bit signed 177 * (twos-complement) integers. */ 178 static inline SIMD_CFUNC simd_char3 simd_make_char3(char other) { 179 simd_char3 result = 0; 180 result.x = other; 181 return result; 182 } 183 184 /*! @abstract Extends `other` to form a vector of three 8-bit signed (twos- 185 * complement) integers. The contents of the newly-created vector lanes are 186 * unspecified. */ 187 static inline SIMD_CFUNC simd_char3 simd_make_char3_undef(char other) { 188 simd_char3 result; 189 result.x = other; 190 return result; 191 } 192 193 /*! @abstract Zero-extends `other` to form a vector of three 8-bit signed 194 * (twos-complement) integers. */ 195 static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char2 other) { 196 simd_char3 result = 0; 197 result.xy = other; 198 return result; 199 } 200 201 /*! @abstract Extends `other` to form a vector of three 8-bit signed (twos- 202 * complement) integers. The contents of the newly-created vector lanes are 203 * unspecified. */ 204 static inline SIMD_CFUNC simd_char3 simd_make_char3_undef(simd_char2 other) { 205 simd_char3 result; 206 result.xy = other; 207 return result; 208 } 209 210 /*! @abstract Returns `other` unmodified. This function is a convenience for 211 * templated and autogenerated code. */ 212 static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char3 other) { 213 return other; 214 } 215 216 /*! @abstract Truncates `other` to form a vector of three 8-bit signed 217 * (twos-complement) integers. */ 218 static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char4 other) { 219 return other.xyz; 220 } 221 222 /*! @abstract Truncates `other` to form a vector of three 8-bit signed 223 * (twos-complement) integers. */ 224 static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char8 other) { 225 return other.xyz; 226 } 227 228 /*! @abstract Truncates `other` to form a vector of three 8-bit signed 229 * (twos-complement) integers. */ 230 static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char16 other) { 231 return other.xyz; 232 } 233 234 /*! @abstract Truncates `other` to form a vector of three 8-bit signed 235 * (twos-complement) integers. */ 236 static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char32 other) { 237 return other.xyz; 238 } 239 240 /*! @abstract Truncates `other` to form a vector of three 8-bit signed 241 * (twos-complement) integers. */ 242 static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char64 other) { 243 return other.xyz; 244 } 245 246 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 247 * 8-bit signed (twos-complement) integers. */ 248 static inline SIMD_CFUNC simd_char4 simd_make_char4(char x, char y, char z, char w) { 249 simd_char4 result; 250 result.x = x; 251 result.y = y; 252 result.z = z; 253 result.w = w; 254 return result; 255 } 256 257 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 8-bit 258 * signed (twos-complement) integers. */ 259 static inline SIMD_CFUNC simd_char4 simd_make_char4(char x, char y, simd_char2 zw) { 260 simd_char4 result; 261 result.x = x; 262 result.y = y; 263 result.zw = zw; 264 return result; 265 } 266 267 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 8-bit 268 * signed (twos-complement) integers. */ 269 static inline SIMD_CFUNC simd_char4 simd_make_char4(char x, simd_char2 yz, char w) { 270 simd_char4 result; 271 result.x = x; 272 result.yz = yz; 273 result.w = w; 274 return result; 275 } 276 277 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 8-bit 278 * signed (twos-complement) integers. */ 279 static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char2 xy, char z, char w) { 280 simd_char4 result; 281 result.xy = xy; 282 result.z = z; 283 result.w = w; 284 return result; 285 } 286 287 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 8-bit 288 * signed (twos-complement) integers. */ 289 static inline SIMD_CFUNC simd_char4 simd_make_char4(char x, simd_char3 yzw) { 290 simd_char4 result; 291 result.x = x; 292 result.yzw = yzw; 293 return result; 294 } 295 296 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 8-bit 297 * signed (twos-complement) integers. */ 298 static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char2 xy, simd_char2 zw) { 299 simd_char4 result; 300 result.xy = xy; 301 result.zw = zw; 302 return result; 303 } 304 305 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 8-bit 306 * signed (twos-complement) integers. */ 307 static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char3 xyz, char w) { 308 simd_char4 result; 309 result.xyz = xyz; 310 result.w = w; 311 return result; 312 } 313 314 /*! @abstract Zero-extends `other` to form a vector of four 8-bit signed 315 * (twos-complement) integers. */ 316 static inline SIMD_CFUNC simd_char4 simd_make_char4(char other) { 317 simd_char4 result = 0; 318 result.x = other; 319 return result; 320 } 321 322 /*! @abstract Extends `other` to form a vector of four 8-bit signed (twos- 323 * complement) integers. The contents of the newly-created vector lanes are 324 * unspecified. */ 325 static inline SIMD_CFUNC simd_char4 simd_make_char4_undef(char other) { 326 simd_char4 result; 327 result.x = other; 328 return result; 329 } 330 331 /*! @abstract Zero-extends `other` to form a vector of four 8-bit signed 332 * (twos-complement) integers. */ 333 static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char2 other) { 334 simd_char4 result = 0; 335 result.xy = other; 336 return result; 337 } 338 339 /*! @abstract Extends `other` to form a vector of four 8-bit signed (twos- 340 * complement) integers. The contents of the newly-created vector lanes are 341 * unspecified. */ 342 static inline SIMD_CFUNC simd_char4 simd_make_char4_undef(simd_char2 other) { 343 simd_char4 result; 344 result.xy = other; 345 return result; 346 } 347 348 /*! @abstract Zero-extends `other` to form a vector of four 8-bit signed 349 * (twos-complement) integers. */ 350 static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char3 other) { 351 simd_char4 result = 0; 352 result.xyz = other; 353 return result; 354 } 355 356 /*! @abstract Extends `other` to form a vector of four 8-bit signed (twos- 357 * complement) integers. The contents of the newly-created vector lanes are 358 * unspecified. */ 359 static inline SIMD_CFUNC simd_char4 simd_make_char4_undef(simd_char3 other) { 360 simd_char4 result; 361 result.xyz = other; 362 return result; 363 } 364 365 /*! @abstract Returns `other` unmodified. This function is a convenience for 366 * templated and autogenerated code. */ 367 static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char4 other) { 368 return other; 369 } 370 371 /*! @abstract Truncates `other` to form a vector of four 8-bit signed (twos- 372 * complement) integers. */ 373 static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char8 other) { 374 return other.xyzw; 375 } 376 377 /*! @abstract Truncates `other` to form a vector of four 8-bit signed (twos- 378 * complement) integers. */ 379 static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char16 other) { 380 return other.xyzw; 381 } 382 383 /*! @abstract Truncates `other` to form a vector of four 8-bit signed (twos- 384 * complement) integers. */ 385 static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char32 other) { 386 return other.xyzw; 387 } 388 389 /*! @abstract Truncates `other` to form a vector of four 8-bit signed (twos- 390 * complement) integers. */ 391 static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char64 other) { 392 return other.xyzw; 393 } 394 395 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 8-bit 396 * signed (twos-complement) integers. */ 397 static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char4 lo, simd_char4 hi) { 398 simd_char8 result; 399 result.lo = lo; 400 result.hi = hi; 401 return result; 402 } 403 404 /*! @abstract Zero-extends `other` to form a vector of eight 8-bit signed 405 * (twos-complement) integers. */ 406 static inline SIMD_CFUNC simd_char8 simd_make_char8(char other) { 407 simd_char8 result = 0; 408 result.x = other; 409 return result; 410 } 411 412 /*! @abstract Extends `other` to form a vector of eight 8-bit signed (twos- 413 * complement) integers. The contents of the newly-created vector lanes are 414 * unspecified. */ 415 static inline SIMD_CFUNC simd_char8 simd_make_char8_undef(char other) { 416 simd_char8 result; 417 result.x = other; 418 return result; 419 } 420 421 /*! @abstract Zero-extends `other` to form a vector of eight 8-bit signed 422 * (twos-complement) integers. */ 423 static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char2 other) { 424 simd_char8 result = 0; 425 result.xy = other; 426 return result; 427 } 428 429 /*! @abstract Extends `other` to form a vector of eight 8-bit signed (twos- 430 * complement) integers. The contents of the newly-created vector lanes are 431 * unspecified. */ 432 static inline SIMD_CFUNC simd_char8 simd_make_char8_undef(simd_char2 other) { 433 simd_char8 result; 434 result.xy = other; 435 return result; 436 } 437 438 /*! @abstract Zero-extends `other` to form a vector of eight 8-bit signed 439 * (twos-complement) integers. */ 440 static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char3 other) { 441 simd_char8 result = 0; 442 result.xyz = other; 443 return result; 444 } 445 446 /*! @abstract Extends `other` to form a vector of eight 8-bit signed (twos- 447 * complement) integers. The contents of the newly-created vector lanes are 448 * unspecified. */ 449 static inline SIMD_CFUNC simd_char8 simd_make_char8_undef(simd_char3 other) { 450 simd_char8 result; 451 result.xyz = other; 452 return result; 453 } 454 455 /*! @abstract Zero-extends `other` to form a vector of eight 8-bit signed 456 * (twos-complement) integers. */ 457 static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char4 other) { 458 simd_char8 result = 0; 459 result.xyzw = other; 460 return result; 461 } 462 463 /*! @abstract Extends `other` to form a vector of eight 8-bit signed (twos- 464 * complement) integers. The contents of the newly-created vector lanes are 465 * unspecified. */ 466 static inline SIMD_CFUNC simd_char8 simd_make_char8_undef(simd_char4 other) { 467 simd_char8 result; 468 result.xyzw = other; 469 return result; 470 } 471 472 /*! @abstract Returns `other` unmodified. This function is a convenience for 473 * templated and autogenerated code. */ 474 static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char8 other) { 475 return other; 476 } 477 478 /*! @abstract Truncates `other` to form a vector of eight 8-bit signed 479 * (twos-complement) integers. */ 480 static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char16 other) { 481 return simd_make_char8(other.lo); 482 } 483 484 /*! @abstract Truncates `other` to form a vector of eight 8-bit signed 485 * (twos-complement) integers. */ 486 static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char32 other) { 487 return simd_make_char8(other.lo); 488 } 489 490 /*! @abstract Truncates `other` to form a vector of eight 8-bit signed 491 * (twos-complement) integers. */ 492 static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char64 other) { 493 return simd_make_char8(other.lo); 494 } 495 496 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 8-bit 497 * signed (twos-complement) integers. */ 498 static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char8 lo, simd_char8 hi) { 499 simd_char16 result; 500 result.lo = lo; 501 result.hi = hi; 502 return result; 503 } 504 505 /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit signed 506 * (twos-complement) integers. */ 507 static inline SIMD_CFUNC simd_char16 simd_make_char16(char other) { 508 simd_char16 result = 0; 509 result.x = other; 510 return result; 511 } 512 513 /*! @abstract Extends `other` to form a vector of sixteen 8-bit signed 514 * (twos-complement) integers. The contents of the newly-created vector 515 * lanes are unspecified. */ 516 static inline SIMD_CFUNC simd_char16 simd_make_char16_undef(char other) { 517 simd_char16 result; 518 result.x = other; 519 return result; 520 } 521 522 /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit signed 523 * (twos-complement) integers. */ 524 static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char2 other) { 525 simd_char16 result = 0; 526 result.xy = other; 527 return result; 528 } 529 530 /*! @abstract Extends `other` to form a vector of sixteen 8-bit signed 531 * (twos-complement) integers. The contents of the newly-created vector 532 * lanes are unspecified. */ 533 static inline SIMD_CFUNC simd_char16 simd_make_char16_undef(simd_char2 other) { 534 simd_char16 result; 535 result.xy = other; 536 return result; 537 } 538 539 /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit signed 540 * (twos-complement) integers. */ 541 static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char3 other) { 542 simd_char16 result = 0; 543 result.xyz = other; 544 return result; 545 } 546 547 /*! @abstract Extends `other` to form a vector of sixteen 8-bit signed 548 * (twos-complement) integers. The contents of the newly-created vector 549 * lanes are unspecified. */ 550 static inline SIMD_CFUNC simd_char16 simd_make_char16_undef(simd_char3 other) { 551 simd_char16 result; 552 result.xyz = other; 553 return result; 554 } 555 556 /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit signed 557 * (twos-complement) integers. */ 558 static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char4 other) { 559 simd_char16 result = 0; 560 result.xyzw = other; 561 return result; 562 } 563 564 /*! @abstract Extends `other` to form a vector of sixteen 8-bit signed 565 * (twos-complement) integers. The contents of the newly-created vector 566 * lanes are unspecified. */ 567 static inline SIMD_CFUNC simd_char16 simd_make_char16_undef(simd_char4 other) { 568 simd_char16 result; 569 result.xyzw = other; 570 return result; 571 } 572 573 /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit signed 574 * (twos-complement) integers. */ 575 static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char8 other) { 576 simd_char16 result = 0; 577 result.lo = simd_make_char8(other); 578 return result; 579 } 580 581 /*! @abstract Extends `other` to form a vector of sixteen 8-bit signed 582 * (twos-complement) integers. The contents of the newly-created vector 583 * lanes are unspecified. */ 584 static inline SIMD_CFUNC simd_char16 simd_make_char16_undef(simd_char8 other) { 585 simd_char16 result; 586 result.lo = simd_make_char8(other); 587 return result; 588 } 589 590 /*! @abstract Returns `other` unmodified. This function is a convenience for 591 * templated and autogenerated code. */ 592 static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char16 other) { 593 return other; 594 } 595 596 /*! @abstract Truncates `other` to form a vector of sixteen 8-bit signed 597 * (twos-complement) integers. */ 598 static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char32 other) { 599 return simd_make_char16(other.lo); 600 } 601 602 /*! @abstract Truncates `other` to form a vector of sixteen 8-bit signed 603 * (twos-complement) integers. */ 604 static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char64 other) { 605 return simd_make_char16(other.lo); 606 } 607 608 /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two 609 * 8-bit signed (twos-complement) integers. */ 610 static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char16 lo, simd_char16 hi) { 611 simd_char32 result; 612 result.lo = lo; 613 result.hi = hi; 614 return result; 615 } 616 617 /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit 618 * signed (twos-complement) integers. */ 619 static inline SIMD_CFUNC simd_char32 simd_make_char32(char other) { 620 simd_char32 result = 0; 621 result.x = other; 622 return result; 623 } 624 625 /*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed 626 * (twos-complement) integers. The contents of the newly-created vector 627 * lanes are unspecified. */ 628 static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(char other) { 629 simd_char32 result; 630 result.x = other; 631 return result; 632 } 633 634 /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit 635 * signed (twos-complement) integers. */ 636 static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char2 other) { 637 simd_char32 result = 0; 638 result.xy = other; 639 return result; 640 } 641 642 /*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed 643 * (twos-complement) integers. The contents of the newly-created vector 644 * lanes are unspecified. */ 645 static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(simd_char2 other) { 646 simd_char32 result; 647 result.xy = other; 648 return result; 649 } 650 651 /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit 652 * signed (twos-complement) integers. */ 653 static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char3 other) { 654 simd_char32 result = 0; 655 result.xyz = other; 656 return result; 657 } 658 659 /*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed 660 * (twos-complement) integers. The contents of the newly-created vector 661 * lanes are unspecified. */ 662 static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(simd_char3 other) { 663 simd_char32 result; 664 result.xyz = other; 665 return result; 666 } 667 668 /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit 669 * signed (twos-complement) integers. */ 670 static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char4 other) { 671 simd_char32 result = 0; 672 result.xyzw = other; 673 return result; 674 } 675 676 /*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed 677 * (twos-complement) integers. The contents of the newly-created vector 678 * lanes are unspecified. */ 679 static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(simd_char4 other) { 680 simd_char32 result; 681 result.xyzw = other; 682 return result; 683 } 684 685 /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit 686 * signed (twos-complement) integers. */ 687 static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char8 other) { 688 simd_char32 result = 0; 689 result.lo = simd_make_char16(other); 690 return result; 691 } 692 693 /*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed 694 * (twos-complement) integers. The contents of the newly-created vector 695 * lanes are unspecified. */ 696 static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(simd_char8 other) { 697 simd_char32 result; 698 result.lo = simd_make_char16(other); 699 return result; 700 } 701 702 /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit 703 * signed (twos-complement) integers. */ 704 static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char16 other) { 705 simd_char32 result = 0; 706 result.lo = simd_make_char16(other); 707 return result; 708 } 709 710 /*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed 711 * (twos-complement) integers. The contents of the newly-created vector 712 * lanes are unspecified. */ 713 static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(simd_char16 other) { 714 simd_char32 result; 715 result.lo = simd_make_char16(other); 716 return result; 717 } 718 719 /*! @abstract Returns `other` unmodified. This function is a convenience for 720 * templated and autogenerated code. */ 721 static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char32 other) { 722 return other; 723 } 724 725 /*! @abstract Truncates `other` to form a vector of thirty-two 8-bit signed 726 * (twos-complement) integers. */ 727 static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char64 other) { 728 return simd_make_char32(other.lo); 729 } 730 731 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixty-four 732 * 8-bit signed (twos-complement) integers. */ 733 static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char32 lo, simd_char32 hi) { 734 simd_char64 result; 735 result.lo = lo; 736 result.hi = hi; 737 return result; 738 } 739 740 /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit 741 * signed (twos-complement) integers. */ 742 static inline SIMD_CFUNC simd_char64 simd_make_char64(char other) { 743 simd_char64 result = 0; 744 result.x = other; 745 return result; 746 } 747 748 /*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed 749 * (twos-complement) integers. The contents of the newly-created vector 750 * lanes are unspecified. */ 751 static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(char other) { 752 simd_char64 result; 753 result.x = other; 754 return result; 755 } 756 757 /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit 758 * signed (twos-complement) integers. */ 759 static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char2 other) { 760 simd_char64 result = 0; 761 result.xy = other; 762 return result; 763 } 764 765 /*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed 766 * (twos-complement) integers. The contents of the newly-created vector 767 * lanes are unspecified. */ 768 static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char2 other) { 769 simd_char64 result; 770 result.xy = other; 771 return result; 772 } 773 774 /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit 775 * signed (twos-complement) integers. */ 776 static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char3 other) { 777 simd_char64 result = 0; 778 result.xyz = other; 779 return result; 780 } 781 782 /*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed 783 * (twos-complement) integers. The contents of the newly-created vector 784 * lanes are unspecified. */ 785 static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char3 other) { 786 simd_char64 result; 787 result.xyz = other; 788 return result; 789 } 790 791 /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit 792 * signed (twos-complement) integers. */ 793 static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char4 other) { 794 simd_char64 result = 0; 795 result.xyzw = other; 796 return result; 797 } 798 799 /*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed 800 * (twos-complement) integers. The contents of the newly-created vector 801 * lanes are unspecified. */ 802 static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char4 other) { 803 simd_char64 result; 804 result.xyzw = other; 805 return result; 806 } 807 808 /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit 809 * signed (twos-complement) integers. */ 810 static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char8 other) { 811 simd_char64 result = 0; 812 result.lo = simd_make_char32(other); 813 return result; 814 } 815 816 /*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed 817 * (twos-complement) integers. The contents of the newly-created vector 818 * lanes are unspecified. */ 819 static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char8 other) { 820 simd_char64 result; 821 result.lo = simd_make_char32(other); 822 return result; 823 } 824 825 /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit 826 * signed (twos-complement) integers. */ 827 static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char16 other) { 828 simd_char64 result = 0; 829 result.lo = simd_make_char32(other); 830 return result; 831 } 832 833 /*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed 834 * (twos-complement) integers. The contents of the newly-created vector 835 * lanes are unspecified. */ 836 static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char16 other) { 837 simd_char64 result; 838 result.lo = simd_make_char32(other); 839 return result; 840 } 841 842 /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit 843 * signed (twos-complement) integers. */ 844 static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char32 other) { 845 simd_char64 result = 0; 846 result.lo = simd_make_char32(other); 847 return result; 848 } 849 850 /*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed 851 * (twos-complement) integers. The contents of the newly-created vector 852 * lanes are unspecified. */ 853 static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char32 other) { 854 simd_char64 result; 855 result.lo = simd_make_char32(other); 856 return result; 857 } 858 859 /*! @abstract Returns `other` unmodified. This function is a convenience for 860 * templated and autogenerated code. */ 861 static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char64 other) { 862 return other; 863 } 864 865 /*! @abstract Concatenates `x` and `y` to form a vector of two 8-bit 866 * unsigned integers. */ 867 static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(unsigned char x, unsigned char y) { 868 simd_uchar2 result; 869 result.x = x; 870 result.y = y; 871 return result; 872 } 873 874 /*! @abstract Zero-extends `other` to form a vector of two 8-bit unsigned 875 * integers. */ 876 static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(unsigned char other) { 877 simd_uchar2 result = 0; 878 result.x = other; 879 return result; 880 } 881 882 /*! @abstract Extends `other` to form a vector of two 8-bit unsigned 883 * integers. The contents of the newly-created vector lanes are 884 * unspecified. */ 885 static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2_undef(unsigned char other) { 886 simd_uchar2 result; 887 result.x = other; 888 return result; 889 } 890 891 /*! @abstract Returns `other` unmodified. This function is a convenience for 892 * templated and autogenerated code. */ 893 static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar2 other) { 894 return other; 895 } 896 897 /*! @abstract Truncates `other` to form a vector of two 8-bit unsigned 898 * integers. */ 899 static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar3 other) { 900 return other.xy; 901 } 902 903 /*! @abstract Truncates `other` to form a vector of two 8-bit unsigned 904 * integers. */ 905 static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar4 other) { 906 return other.xy; 907 } 908 909 /*! @abstract Truncates `other` to form a vector of two 8-bit unsigned 910 * integers. */ 911 static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar8 other) { 912 return other.xy; 913 } 914 915 /*! @abstract Truncates `other` to form a vector of two 8-bit unsigned 916 * integers. */ 917 static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar16 other) { 918 return other.xy; 919 } 920 921 /*! @abstract Truncates `other` to form a vector of two 8-bit unsigned 922 * integers. */ 923 static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar32 other) { 924 return other.xy; 925 } 926 927 /*! @abstract Truncates `other` to form a vector of two 8-bit unsigned 928 * integers. */ 929 static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar64 other) { 930 return other.xy; 931 } 932 933 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 8-bit 934 * unsigned integers. */ 935 static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(unsigned char x, unsigned char y, unsigned char z) { 936 simd_uchar3 result; 937 result.x = x; 938 result.y = y; 939 result.z = z; 940 return result; 941 } 942 943 /*! @abstract Concatenates `x` and `yz` to form a vector of three 8-bit 944 * unsigned integers. */ 945 static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(unsigned char x, simd_uchar2 yz) { 946 simd_uchar3 result; 947 result.x = x; 948 result.yz = yz; 949 return result; 950 } 951 952 /*! @abstract Concatenates `xy` and `z` to form a vector of three 8-bit 953 * unsigned integers. */ 954 static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar2 xy, unsigned char z) { 955 simd_uchar3 result; 956 result.xy = xy; 957 result.z = z; 958 return result; 959 } 960 961 /*! @abstract Zero-extends `other` to form a vector of three 8-bit unsigned 962 * integers. */ 963 static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(unsigned char other) { 964 simd_uchar3 result = 0; 965 result.x = other; 966 return result; 967 } 968 969 /*! @abstract Extends `other` to form a vector of three 8-bit unsigned 970 * integers. The contents of the newly-created vector lanes are 971 * unspecified. */ 972 static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3_undef(unsigned char other) { 973 simd_uchar3 result; 974 result.x = other; 975 return result; 976 } 977 978 /*! @abstract Zero-extends `other` to form a vector of three 8-bit unsigned 979 * integers. */ 980 static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar2 other) { 981 simd_uchar3 result = 0; 982 result.xy = other; 983 return result; 984 } 985 986 /*! @abstract Extends `other` to form a vector of three 8-bit unsigned 987 * integers. The contents of the newly-created vector lanes are 988 * unspecified. */ 989 static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3_undef(simd_uchar2 other) { 990 simd_uchar3 result; 991 result.xy = other; 992 return result; 993 } 994 995 /*! @abstract Returns `other` unmodified. This function is a convenience for 996 * templated and autogenerated code. */ 997 static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar3 other) { 998 return other; 999 } 1000 1001 /*! @abstract Truncates `other` to form a vector of three 8-bit unsigned 1002 * integers. */ 1003 static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar4 other) { 1004 return other.xyz; 1005 } 1006 1007 /*! @abstract Truncates `other` to form a vector of three 8-bit unsigned 1008 * integers. */ 1009 static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar8 other) { 1010 return other.xyz; 1011 } 1012 1013 /*! @abstract Truncates `other` to form a vector of three 8-bit unsigned 1014 * integers. */ 1015 static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar16 other) { 1016 return other.xyz; 1017 } 1018 1019 /*! @abstract Truncates `other` to form a vector of three 8-bit unsigned 1020 * integers. */ 1021 static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar32 other) { 1022 return other.xyz; 1023 } 1024 1025 /*! @abstract Truncates `other` to form a vector of three 8-bit unsigned 1026 * integers. */ 1027 static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar64 other) { 1028 return other.xyz; 1029 } 1030 1031 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 1032 * 8-bit unsigned integers. */ 1033 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(unsigned char x, unsigned char y, unsigned char z, unsigned char w) { 1034 simd_uchar4 result; 1035 result.x = x; 1036 result.y = y; 1037 result.z = z; 1038 result.w = w; 1039 return result; 1040 } 1041 1042 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 8-bit 1043 * unsigned integers. */ 1044 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(unsigned char x, unsigned char y, simd_uchar2 zw) { 1045 simd_uchar4 result; 1046 result.x = x; 1047 result.y = y; 1048 result.zw = zw; 1049 return result; 1050 } 1051 1052 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 8-bit 1053 * unsigned integers. */ 1054 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(unsigned char x, simd_uchar2 yz, unsigned char w) { 1055 simd_uchar4 result; 1056 result.x = x; 1057 result.yz = yz; 1058 result.w = w; 1059 return result; 1060 } 1061 1062 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 8-bit 1063 * unsigned integers. */ 1064 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar2 xy, unsigned char z, unsigned char w) { 1065 simd_uchar4 result; 1066 result.xy = xy; 1067 result.z = z; 1068 result.w = w; 1069 return result; 1070 } 1071 1072 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 8-bit 1073 * unsigned integers. */ 1074 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(unsigned char x, simd_uchar3 yzw) { 1075 simd_uchar4 result; 1076 result.x = x; 1077 result.yzw = yzw; 1078 return result; 1079 } 1080 1081 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 8-bit 1082 * unsigned integers. */ 1083 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar2 xy, simd_uchar2 zw) { 1084 simd_uchar4 result; 1085 result.xy = xy; 1086 result.zw = zw; 1087 return result; 1088 } 1089 1090 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 8-bit 1091 * unsigned integers. */ 1092 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar3 xyz, unsigned char w) { 1093 simd_uchar4 result; 1094 result.xyz = xyz; 1095 result.w = w; 1096 return result; 1097 } 1098 1099 /*! @abstract Zero-extends `other` to form a vector of four 8-bit unsigned 1100 * integers. */ 1101 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(unsigned char other) { 1102 simd_uchar4 result = 0; 1103 result.x = other; 1104 return result; 1105 } 1106 1107 /*! @abstract Extends `other` to form a vector of four 8-bit unsigned 1108 * integers. The contents of the newly-created vector lanes are 1109 * unspecified. */ 1110 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4_undef(unsigned char other) { 1111 simd_uchar4 result; 1112 result.x = other; 1113 return result; 1114 } 1115 1116 /*! @abstract Zero-extends `other` to form a vector of four 8-bit unsigned 1117 * integers. */ 1118 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar2 other) { 1119 simd_uchar4 result = 0; 1120 result.xy = other; 1121 return result; 1122 } 1123 1124 /*! @abstract Extends `other` to form a vector of four 8-bit unsigned 1125 * integers. The contents of the newly-created vector lanes are 1126 * unspecified. */ 1127 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4_undef(simd_uchar2 other) { 1128 simd_uchar4 result; 1129 result.xy = other; 1130 return result; 1131 } 1132 1133 /*! @abstract Zero-extends `other` to form a vector of four 8-bit unsigned 1134 * integers. */ 1135 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar3 other) { 1136 simd_uchar4 result = 0; 1137 result.xyz = other; 1138 return result; 1139 } 1140 1141 /*! @abstract Extends `other` to form a vector of four 8-bit unsigned 1142 * integers. The contents of the newly-created vector lanes are 1143 * unspecified. */ 1144 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4_undef(simd_uchar3 other) { 1145 simd_uchar4 result; 1146 result.xyz = other; 1147 return result; 1148 } 1149 1150 /*! @abstract Returns `other` unmodified. This function is a convenience for 1151 * templated and autogenerated code. */ 1152 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar4 other) { 1153 return other; 1154 } 1155 1156 /*! @abstract Truncates `other` to form a vector of four 8-bit unsigned 1157 * integers. */ 1158 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar8 other) { 1159 return other.xyzw; 1160 } 1161 1162 /*! @abstract Truncates `other` to form a vector of four 8-bit unsigned 1163 * integers. */ 1164 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar16 other) { 1165 return other.xyzw; 1166 } 1167 1168 /*! @abstract Truncates `other` to form a vector of four 8-bit unsigned 1169 * integers. */ 1170 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar32 other) { 1171 return other.xyzw; 1172 } 1173 1174 /*! @abstract Truncates `other` to form a vector of four 8-bit unsigned 1175 * integers. */ 1176 static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar64 other) { 1177 return other.xyzw; 1178 } 1179 1180 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 8-bit 1181 * unsigned integers. */ 1182 static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar4 lo, simd_uchar4 hi) { 1183 simd_uchar8 result; 1184 result.lo = lo; 1185 result.hi = hi; 1186 return result; 1187 } 1188 1189 /*! @abstract Zero-extends `other` to form a vector of eight 8-bit unsigned 1190 * integers. */ 1191 static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(unsigned char other) { 1192 simd_uchar8 result = 0; 1193 result.x = other; 1194 return result; 1195 } 1196 1197 /*! @abstract Extends `other` to form a vector of eight 8-bit unsigned 1198 * integers. The contents of the newly-created vector lanes are 1199 * unspecified. */ 1200 static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8_undef(unsigned char other) { 1201 simd_uchar8 result; 1202 result.x = other; 1203 return result; 1204 } 1205 1206 /*! @abstract Zero-extends `other` to form a vector of eight 8-bit unsigned 1207 * integers. */ 1208 static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar2 other) { 1209 simd_uchar8 result = 0; 1210 result.xy = other; 1211 return result; 1212 } 1213 1214 /*! @abstract Extends `other` to form a vector of eight 8-bit unsigned 1215 * integers. The contents of the newly-created vector lanes are 1216 * unspecified. */ 1217 static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8_undef(simd_uchar2 other) { 1218 simd_uchar8 result; 1219 result.xy = other; 1220 return result; 1221 } 1222 1223 /*! @abstract Zero-extends `other` to form a vector of eight 8-bit unsigned 1224 * integers. */ 1225 static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar3 other) { 1226 simd_uchar8 result = 0; 1227 result.xyz = other; 1228 return result; 1229 } 1230 1231 /*! @abstract Extends `other` to form a vector of eight 8-bit unsigned 1232 * integers. The contents of the newly-created vector lanes are 1233 * unspecified. */ 1234 static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8_undef(simd_uchar3 other) { 1235 simd_uchar8 result; 1236 result.xyz = other; 1237 return result; 1238 } 1239 1240 /*! @abstract Zero-extends `other` to form a vector of eight 8-bit unsigned 1241 * integers. */ 1242 static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar4 other) { 1243 simd_uchar8 result = 0; 1244 result.xyzw = other; 1245 return result; 1246 } 1247 1248 /*! @abstract Extends `other` to form a vector of eight 8-bit unsigned 1249 * integers. The contents of the newly-created vector lanes are 1250 * unspecified. */ 1251 static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8_undef(simd_uchar4 other) { 1252 simd_uchar8 result; 1253 result.xyzw = other; 1254 return result; 1255 } 1256 1257 /*! @abstract Returns `other` unmodified. This function is a convenience for 1258 * templated and autogenerated code. */ 1259 static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar8 other) { 1260 return other; 1261 } 1262 1263 /*! @abstract Truncates `other` to form a vector of eight 8-bit unsigned 1264 * integers. */ 1265 static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar16 other) { 1266 return simd_make_uchar8(other.lo); 1267 } 1268 1269 /*! @abstract Truncates `other` to form a vector of eight 8-bit unsigned 1270 * integers. */ 1271 static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar32 other) { 1272 return simd_make_uchar8(other.lo); 1273 } 1274 1275 /*! @abstract Truncates `other` to form a vector of eight 8-bit unsigned 1276 * integers. */ 1277 static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar64 other) { 1278 return simd_make_uchar8(other.lo); 1279 } 1280 1281 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 8-bit 1282 * unsigned integers. */ 1283 static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar8 lo, simd_uchar8 hi) { 1284 simd_uchar16 result; 1285 result.lo = lo; 1286 result.hi = hi; 1287 return result; 1288 } 1289 1290 /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit 1291 * unsigned integers. */ 1292 static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(unsigned char other) { 1293 simd_uchar16 result = 0; 1294 result.x = other; 1295 return result; 1296 } 1297 1298 /*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned 1299 * integers. The contents of the newly-created vector lanes are 1300 * unspecified. */ 1301 static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16_undef(unsigned char other) { 1302 simd_uchar16 result; 1303 result.x = other; 1304 return result; 1305 } 1306 1307 /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit 1308 * unsigned integers. */ 1309 static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar2 other) { 1310 simd_uchar16 result = 0; 1311 result.xy = other; 1312 return result; 1313 } 1314 1315 /*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned 1316 * integers. The contents of the newly-created vector lanes are 1317 * unspecified. */ 1318 static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16_undef(simd_uchar2 other) { 1319 simd_uchar16 result; 1320 result.xy = other; 1321 return result; 1322 } 1323 1324 /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit 1325 * unsigned integers. */ 1326 static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar3 other) { 1327 simd_uchar16 result = 0; 1328 result.xyz = other; 1329 return result; 1330 } 1331 1332 /*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned 1333 * integers. The contents of the newly-created vector lanes are 1334 * unspecified. */ 1335 static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16_undef(simd_uchar3 other) { 1336 simd_uchar16 result; 1337 result.xyz = other; 1338 return result; 1339 } 1340 1341 /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit 1342 * unsigned integers. */ 1343 static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar4 other) { 1344 simd_uchar16 result = 0; 1345 result.xyzw = other; 1346 return result; 1347 } 1348 1349 /*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned 1350 * integers. The contents of the newly-created vector lanes are 1351 * unspecified. */ 1352 static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16_undef(simd_uchar4 other) { 1353 simd_uchar16 result; 1354 result.xyzw = other; 1355 return result; 1356 } 1357 1358 /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit 1359 * unsigned integers. */ 1360 static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar8 other) { 1361 simd_uchar16 result = 0; 1362 result.lo = simd_make_uchar8(other); 1363 return result; 1364 } 1365 1366 /*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned 1367 * integers. The contents of the newly-created vector lanes are 1368 * unspecified. */ 1369 static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16_undef(simd_uchar8 other) { 1370 simd_uchar16 result; 1371 result.lo = simd_make_uchar8(other); 1372 return result; 1373 } 1374 1375 /*! @abstract Returns `other` unmodified. This function is a convenience for 1376 * templated and autogenerated code. */ 1377 static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar16 other) { 1378 return other; 1379 } 1380 1381 /*! @abstract Truncates `other` to form a vector of sixteen 8-bit unsigned 1382 * integers. */ 1383 static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar32 other) { 1384 return simd_make_uchar16(other.lo); 1385 } 1386 1387 /*! @abstract Truncates `other` to form a vector of sixteen 8-bit unsigned 1388 * integers. */ 1389 static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar64 other) { 1390 return simd_make_uchar16(other.lo); 1391 } 1392 1393 /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two 1394 * 8-bit unsigned integers. */ 1395 static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar16 lo, simd_uchar16 hi) { 1396 simd_uchar32 result; 1397 result.lo = lo; 1398 result.hi = hi; 1399 return result; 1400 } 1401 1402 /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit 1403 * unsigned integers. */ 1404 static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(unsigned char other) { 1405 simd_uchar32 result = 0; 1406 result.x = other; 1407 return result; 1408 } 1409 1410 /*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned 1411 * integers. The contents of the newly-created vector lanes are 1412 * unspecified. */ 1413 static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(unsigned char other) { 1414 simd_uchar32 result; 1415 result.x = other; 1416 return result; 1417 } 1418 1419 /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit 1420 * unsigned integers. */ 1421 static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar2 other) { 1422 simd_uchar32 result = 0; 1423 result.xy = other; 1424 return result; 1425 } 1426 1427 /*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned 1428 * integers. The contents of the newly-created vector lanes are 1429 * unspecified. */ 1430 static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(simd_uchar2 other) { 1431 simd_uchar32 result; 1432 result.xy = other; 1433 return result; 1434 } 1435 1436 /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit 1437 * unsigned integers. */ 1438 static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar3 other) { 1439 simd_uchar32 result = 0; 1440 result.xyz = other; 1441 return result; 1442 } 1443 1444 /*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned 1445 * integers. The contents of the newly-created vector lanes are 1446 * unspecified. */ 1447 static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(simd_uchar3 other) { 1448 simd_uchar32 result; 1449 result.xyz = other; 1450 return result; 1451 } 1452 1453 /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit 1454 * unsigned integers. */ 1455 static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar4 other) { 1456 simd_uchar32 result = 0; 1457 result.xyzw = other; 1458 return result; 1459 } 1460 1461 /*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned 1462 * integers. The contents of the newly-created vector lanes are 1463 * unspecified. */ 1464 static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(simd_uchar4 other) { 1465 simd_uchar32 result; 1466 result.xyzw = other; 1467 return result; 1468 } 1469 1470 /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit 1471 * unsigned integers. */ 1472 static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar8 other) { 1473 simd_uchar32 result = 0; 1474 result.lo = simd_make_uchar16(other); 1475 return result; 1476 } 1477 1478 /*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned 1479 * integers. The contents of the newly-created vector lanes are 1480 * unspecified. */ 1481 static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(simd_uchar8 other) { 1482 simd_uchar32 result; 1483 result.lo = simd_make_uchar16(other); 1484 return result; 1485 } 1486 1487 /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit 1488 * unsigned integers. */ 1489 static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar16 other) { 1490 simd_uchar32 result = 0; 1491 result.lo = simd_make_uchar16(other); 1492 return result; 1493 } 1494 1495 /*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned 1496 * integers. The contents of the newly-created vector lanes are 1497 * unspecified. */ 1498 static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(simd_uchar16 other) { 1499 simd_uchar32 result; 1500 result.lo = simd_make_uchar16(other); 1501 return result; 1502 } 1503 1504 /*! @abstract Returns `other` unmodified. This function is a convenience for 1505 * templated and autogenerated code. */ 1506 static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar32 other) { 1507 return other; 1508 } 1509 1510 /*! @abstract Truncates `other` to form a vector of thirty-two 8-bit 1511 * unsigned integers. */ 1512 static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar64 other) { 1513 return simd_make_uchar32(other.lo); 1514 } 1515 1516 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixty-four 1517 * 8-bit unsigned integers. */ 1518 static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar32 lo, simd_uchar32 hi) { 1519 simd_uchar64 result; 1520 result.lo = lo; 1521 result.hi = hi; 1522 return result; 1523 } 1524 1525 /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit 1526 * unsigned integers. */ 1527 static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(unsigned char other) { 1528 simd_uchar64 result = 0; 1529 result.x = other; 1530 return result; 1531 } 1532 1533 /*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned 1534 * integers. The contents of the newly-created vector lanes are 1535 * unspecified. */ 1536 static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(unsigned char other) { 1537 simd_uchar64 result; 1538 result.x = other; 1539 return result; 1540 } 1541 1542 /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit 1543 * unsigned integers. */ 1544 static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar2 other) { 1545 simd_uchar64 result = 0; 1546 result.xy = other; 1547 return result; 1548 } 1549 1550 /*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned 1551 * integers. The contents of the newly-created vector lanes are 1552 * unspecified. */ 1553 static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar2 other) { 1554 simd_uchar64 result; 1555 result.xy = other; 1556 return result; 1557 } 1558 1559 /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit 1560 * unsigned integers. */ 1561 static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar3 other) { 1562 simd_uchar64 result = 0; 1563 result.xyz = other; 1564 return result; 1565 } 1566 1567 /*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned 1568 * integers. The contents of the newly-created vector lanes are 1569 * unspecified. */ 1570 static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar3 other) { 1571 simd_uchar64 result; 1572 result.xyz = other; 1573 return result; 1574 } 1575 1576 /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit 1577 * unsigned integers. */ 1578 static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar4 other) { 1579 simd_uchar64 result = 0; 1580 result.xyzw = other; 1581 return result; 1582 } 1583 1584 /*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned 1585 * integers. The contents of the newly-created vector lanes are 1586 * unspecified. */ 1587 static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar4 other) { 1588 simd_uchar64 result; 1589 result.xyzw = other; 1590 return result; 1591 } 1592 1593 /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit 1594 * unsigned integers. */ 1595 static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar8 other) { 1596 simd_uchar64 result = 0; 1597 result.lo = simd_make_uchar32(other); 1598 return result; 1599 } 1600 1601 /*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned 1602 * integers. The contents of the newly-created vector lanes are 1603 * unspecified. */ 1604 static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar8 other) { 1605 simd_uchar64 result; 1606 result.lo = simd_make_uchar32(other); 1607 return result; 1608 } 1609 1610 /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit 1611 * unsigned integers. */ 1612 static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar16 other) { 1613 simd_uchar64 result = 0; 1614 result.lo = simd_make_uchar32(other); 1615 return result; 1616 } 1617 1618 /*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned 1619 * integers. The contents of the newly-created vector lanes are 1620 * unspecified. */ 1621 static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar16 other) { 1622 simd_uchar64 result; 1623 result.lo = simd_make_uchar32(other); 1624 return result; 1625 } 1626 1627 /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit 1628 * unsigned integers. */ 1629 static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar32 other) { 1630 simd_uchar64 result = 0; 1631 result.lo = simd_make_uchar32(other); 1632 return result; 1633 } 1634 1635 /*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned 1636 * integers. The contents of the newly-created vector lanes are 1637 * unspecified. */ 1638 static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar32 other) { 1639 simd_uchar64 result; 1640 result.lo = simd_make_uchar32(other); 1641 return result; 1642 } 1643 1644 /*! @abstract Returns `other` unmodified. This function is a convenience for 1645 * templated and autogenerated code. */ 1646 static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar64 other) { 1647 return other; 1648 } 1649 1650 /*! @abstract Concatenates `x` and `y` to form a vector of two 16-bit signed 1651 * (twos-complement) integers. */ 1652 static inline SIMD_CFUNC simd_short2 simd_make_short2(short x, short y) { 1653 simd_short2 result; 1654 result.x = x; 1655 result.y = y; 1656 return result; 1657 } 1658 1659 /*! @abstract Zero-extends `other` to form a vector of two 16-bit signed 1660 * (twos-complement) integers. */ 1661 static inline SIMD_CFUNC simd_short2 simd_make_short2(short other) { 1662 simd_short2 result = 0; 1663 result.x = other; 1664 return result; 1665 } 1666 1667 /*! @abstract Extends `other` to form a vector of two 16-bit signed (twos- 1668 * complement) integers. The contents of the newly-created vector lanes are 1669 * unspecified. */ 1670 static inline SIMD_CFUNC simd_short2 simd_make_short2_undef(short other) { 1671 simd_short2 result; 1672 result.x = other; 1673 return result; 1674 } 1675 1676 /*! @abstract Returns `other` unmodified. This function is a convenience for 1677 * templated and autogenerated code. */ 1678 static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short2 other) { 1679 return other; 1680 } 1681 1682 /*! @abstract Truncates `other` to form a vector of two 16-bit signed (twos- 1683 * complement) integers. */ 1684 static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short3 other) { 1685 return other.xy; 1686 } 1687 1688 /*! @abstract Truncates `other` to form a vector of two 16-bit signed (twos- 1689 * complement) integers. */ 1690 static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short4 other) { 1691 return other.xy; 1692 } 1693 1694 /*! @abstract Truncates `other` to form a vector of two 16-bit signed (twos- 1695 * complement) integers. */ 1696 static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short8 other) { 1697 return other.xy; 1698 } 1699 1700 /*! @abstract Truncates `other` to form a vector of two 16-bit signed (twos- 1701 * complement) integers. */ 1702 static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short16 other) { 1703 return other.xy; 1704 } 1705 1706 /*! @abstract Truncates `other` to form a vector of two 16-bit signed (twos- 1707 * complement) integers. */ 1708 static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short32 other) { 1709 return other.xy; 1710 } 1711 1712 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 16-bit 1713 * signed (twos-complement) integers. */ 1714 static inline SIMD_CFUNC simd_short3 simd_make_short3(short x, short y, short z) { 1715 simd_short3 result; 1716 result.x = x; 1717 result.y = y; 1718 result.z = z; 1719 return result; 1720 } 1721 1722 /*! @abstract Concatenates `x` and `yz` to form a vector of three 16-bit 1723 * signed (twos-complement) integers. */ 1724 static inline SIMD_CFUNC simd_short3 simd_make_short3(short x, simd_short2 yz) { 1725 simd_short3 result; 1726 result.x = x; 1727 result.yz = yz; 1728 return result; 1729 } 1730 1731 /*! @abstract Concatenates `xy` and `z` to form a vector of three 16-bit 1732 * signed (twos-complement) integers. */ 1733 static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short2 xy, short z) { 1734 simd_short3 result; 1735 result.xy = xy; 1736 result.z = z; 1737 return result; 1738 } 1739 1740 /*! @abstract Zero-extends `other` to form a vector of three 16-bit signed 1741 * (twos-complement) integers. */ 1742 static inline SIMD_CFUNC simd_short3 simd_make_short3(short other) { 1743 simd_short3 result = 0; 1744 result.x = other; 1745 return result; 1746 } 1747 1748 /*! @abstract Extends `other` to form a vector of three 16-bit signed (twos- 1749 * complement) integers. The contents of the newly-created vector lanes are 1750 * unspecified. */ 1751 static inline SIMD_CFUNC simd_short3 simd_make_short3_undef(short other) { 1752 simd_short3 result; 1753 result.x = other; 1754 return result; 1755 } 1756 1757 /*! @abstract Zero-extends `other` to form a vector of three 16-bit signed 1758 * (twos-complement) integers. */ 1759 static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short2 other) { 1760 simd_short3 result = 0; 1761 result.xy = other; 1762 return result; 1763 } 1764 1765 /*! @abstract Extends `other` to form a vector of three 16-bit signed (twos- 1766 * complement) integers. The contents of the newly-created vector lanes are 1767 * unspecified. */ 1768 static inline SIMD_CFUNC simd_short3 simd_make_short3_undef(simd_short2 other) { 1769 simd_short3 result; 1770 result.xy = other; 1771 return result; 1772 } 1773 1774 /*! @abstract Returns `other` unmodified. This function is a convenience for 1775 * templated and autogenerated code. */ 1776 static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short3 other) { 1777 return other; 1778 } 1779 1780 /*! @abstract Truncates `other` to form a vector of three 16-bit signed 1781 * (twos-complement) integers. */ 1782 static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short4 other) { 1783 return other.xyz; 1784 } 1785 1786 /*! @abstract Truncates `other` to form a vector of three 16-bit signed 1787 * (twos-complement) integers. */ 1788 static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short8 other) { 1789 return other.xyz; 1790 } 1791 1792 /*! @abstract Truncates `other` to form a vector of three 16-bit signed 1793 * (twos-complement) integers. */ 1794 static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short16 other) { 1795 return other.xyz; 1796 } 1797 1798 /*! @abstract Truncates `other` to form a vector of three 16-bit signed 1799 * (twos-complement) integers. */ 1800 static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short32 other) { 1801 return other.xyz; 1802 } 1803 1804 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 1805 * 16-bit signed (twos-complement) integers. */ 1806 static inline SIMD_CFUNC simd_short4 simd_make_short4(short x, short y, short z, short w) { 1807 simd_short4 result; 1808 result.x = x; 1809 result.y = y; 1810 result.z = z; 1811 result.w = w; 1812 return result; 1813 } 1814 1815 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 16-bit 1816 * signed (twos-complement) integers. */ 1817 static inline SIMD_CFUNC simd_short4 simd_make_short4(short x, short y, simd_short2 zw) { 1818 simd_short4 result; 1819 result.x = x; 1820 result.y = y; 1821 result.zw = zw; 1822 return result; 1823 } 1824 1825 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 16-bit 1826 * signed (twos-complement) integers. */ 1827 static inline SIMD_CFUNC simd_short4 simd_make_short4(short x, simd_short2 yz, short w) { 1828 simd_short4 result; 1829 result.x = x; 1830 result.yz = yz; 1831 result.w = w; 1832 return result; 1833 } 1834 1835 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 16-bit 1836 * signed (twos-complement) integers. */ 1837 static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short2 xy, short z, short w) { 1838 simd_short4 result; 1839 result.xy = xy; 1840 result.z = z; 1841 result.w = w; 1842 return result; 1843 } 1844 1845 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 16-bit 1846 * signed (twos-complement) integers. */ 1847 static inline SIMD_CFUNC simd_short4 simd_make_short4(short x, simd_short3 yzw) { 1848 simd_short4 result; 1849 result.x = x; 1850 result.yzw = yzw; 1851 return result; 1852 } 1853 1854 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 16-bit 1855 * signed (twos-complement) integers. */ 1856 static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short2 xy, simd_short2 zw) { 1857 simd_short4 result; 1858 result.xy = xy; 1859 result.zw = zw; 1860 return result; 1861 } 1862 1863 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 16-bit 1864 * signed (twos-complement) integers. */ 1865 static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short3 xyz, short w) { 1866 simd_short4 result; 1867 result.xyz = xyz; 1868 result.w = w; 1869 return result; 1870 } 1871 1872 /*! @abstract Zero-extends `other` to form a vector of four 16-bit signed 1873 * (twos-complement) integers. */ 1874 static inline SIMD_CFUNC simd_short4 simd_make_short4(short other) { 1875 simd_short4 result = 0; 1876 result.x = other; 1877 return result; 1878 } 1879 1880 /*! @abstract Extends `other` to form a vector of four 16-bit signed (twos- 1881 * complement) integers. The contents of the newly-created vector lanes are 1882 * unspecified. */ 1883 static inline SIMD_CFUNC simd_short4 simd_make_short4_undef(short other) { 1884 simd_short4 result; 1885 result.x = other; 1886 return result; 1887 } 1888 1889 /*! @abstract Zero-extends `other` to form a vector of four 16-bit signed 1890 * (twos-complement) integers. */ 1891 static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short2 other) { 1892 simd_short4 result = 0; 1893 result.xy = other; 1894 return result; 1895 } 1896 1897 /*! @abstract Extends `other` to form a vector of four 16-bit signed (twos- 1898 * complement) integers. The contents of the newly-created vector lanes are 1899 * unspecified. */ 1900 static inline SIMD_CFUNC simd_short4 simd_make_short4_undef(simd_short2 other) { 1901 simd_short4 result; 1902 result.xy = other; 1903 return result; 1904 } 1905 1906 /*! @abstract Zero-extends `other` to form a vector of four 16-bit signed 1907 * (twos-complement) integers. */ 1908 static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short3 other) { 1909 simd_short4 result = 0; 1910 result.xyz = other; 1911 return result; 1912 } 1913 1914 /*! @abstract Extends `other` to form a vector of four 16-bit signed (twos- 1915 * complement) integers. The contents of the newly-created vector lanes are 1916 * unspecified. */ 1917 static inline SIMD_CFUNC simd_short4 simd_make_short4_undef(simd_short3 other) { 1918 simd_short4 result; 1919 result.xyz = other; 1920 return result; 1921 } 1922 1923 /*! @abstract Returns `other` unmodified. This function is a convenience for 1924 * templated and autogenerated code. */ 1925 static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short4 other) { 1926 return other; 1927 } 1928 1929 /*! @abstract Truncates `other` to form a vector of four 16-bit signed 1930 * (twos-complement) integers. */ 1931 static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short8 other) { 1932 return other.xyzw; 1933 } 1934 1935 /*! @abstract Truncates `other` to form a vector of four 16-bit signed 1936 * (twos-complement) integers. */ 1937 static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short16 other) { 1938 return other.xyzw; 1939 } 1940 1941 /*! @abstract Truncates `other` to form a vector of four 16-bit signed 1942 * (twos-complement) integers. */ 1943 static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short32 other) { 1944 return other.xyzw; 1945 } 1946 1947 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 16-bit 1948 * signed (twos-complement) integers. */ 1949 static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short4 lo, simd_short4 hi) { 1950 simd_short8 result; 1951 result.lo = lo; 1952 result.hi = hi; 1953 return result; 1954 } 1955 1956 /*! @abstract Zero-extends `other` to form a vector of eight 16-bit signed 1957 * (twos-complement) integers. */ 1958 static inline SIMD_CFUNC simd_short8 simd_make_short8(short other) { 1959 simd_short8 result = 0; 1960 result.x = other; 1961 return result; 1962 } 1963 1964 /*! @abstract Extends `other` to form a vector of eight 16-bit signed (twos- 1965 * complement) integers. The contents of the newly-created vector lanes are 1966 * unspecified. */ 1967 static inline SIMD_CFUNC simd_short8 simd_make_short8_undef(short other) { 1968 simd_short8 result; 1969 result.x = other; 1970 return result; 1971 } 1972 1973 /*! @abstract Zero-extends `other` to form a vector of eight 16-bit signed 1974 * (twos-complement) integers. */ 1975 static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short2 other) { 1976 simd_short8 result = 0; 1977 result.xy = other; 1978 return result; 1979 } 1980 1981 /*! @abstract Extends `other` to form a vector of eight 16-bit signed (twos- 1982 * complement) integers. The contents of the newly-created vector lanes are 1983 * unspecified. */ 1984 static inline SIMD_CFUNC simd_short8 simd_make_short8_undef(simd_short2 other) { 1985 simd_short8 result; 1986 result.xy = other; 1987 return result; 1988 } 1989 1990 /*! @abstract Zero-extends `other` to form a vector of eight 16-bit signed 1991 * (twos-complement) integers. */ 1992 static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short3 other) { 1993 simd_short8 result = 0; 1994 result.xyz = other; 1995 return result; 1996 } 1997 1998 /*! @abstract Extends `other` to form a vector of eight 16-bit signed (twos- 1999 * complement) integers. The contents of the newly-created vector lanes are 2000 * unspecified. */ 2001 static inline SIMD_CFUNC simd_short8 simd_make_short8_undef(simd_short3 other) { 2002 simd_short8 result; 2003 result.xyz = other; 2004 return result; 2005 } 2006 2007 /*! @abstract Zero-extends `other` to form a vector of eight 16-bit signed 2008 * (twos-complement) integers. */ 2009 static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short4 other) { 2010 simd_short8 result = 0; 2011 result.xyzw = other; 2012 return result; 2013 } 2014 2015 /*! @abstract Extends `other` to form a vector of eight 16-bit signed (twos- 2016 * complement) integers. The contents of the newly-created vector lanes are 2017 * unspecified. */ 2018 static inline SIMD_CFUNC simd_short8 simd_make_short8_undef(simd_short4 other) { 2019 simd_short8 result; 2020 result.xyzw = other; 2021 return result; 2022 } 2023 2024 /*! @abstract Returns `other` unmodified. This function is a convenience for 2025 * templated and autogenerated code. */ 2026 static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short8 other) { 2027 return other; 2028 } 2029 2030 /*! @abstract Truncates `other` to form a vector of eight 16-bit signed 2031 * (twos-complement) integers. */ 2032 static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short16 other) { 2033 return simd_make_short8(other.lo); 2034 } 2035 2036 /*! @abstract Truncates `other` to form a vector of eight 16-bit signed 2037 * (twos-complement) integers. */ 2038 static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short32 other) { 2039 return simd_make_short8(other.lo); 2040 } 2041 2042 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 16-bit 2043 * signed (twos-complement) integers. */ 2044 static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short8 lo, simd_short8 hi) { 2045 simd_short16 result; 2046 result.lo = lo; 2047 result.hi = hi; 2048 return result; 2049 } 2050 2051 /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit signed 2052 * (twos-complement) integers. */ 2053 static inline SIMD_CFUNC simd_short16 simd_make_short16(short other) { 2054 simd_short16 result = 0; 2055 result.x = other; 2056 return result; 2057 } 2058 2059 /*! @abstract Extends `other` to form a vector of sixteen 16-bit signed 2060 * (twos-complement) integers. The contents of the newly-created vector 2061 * lanes are unspecified. */ 2062 static inline SIMD_CFUNC simd_short16 simd_make_short16_undef(short other) { 2063 simd_short16 result; 2064 result.x = other; 2065 return result; 2066 } 2067 2068 /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit signed 2069 * (twos-complement) integers. */ 2070 static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short2 other) { 2071 simd_short16 result = 0; 2072 result.xy = other; 2073 return result; 2074 } 2075 2076 /*! @abstract Extends `other` to form a vector of sixteen 16-bit signed 2077 * (twos-complement) integers. The contents of the newly-created vector 2078 * lanes are unspecified. */ 2079 static inline SIMD_CFUNC simd_short16 simd_make_short16_undef(simd_short2 other) { 2080 simd_short16 result; 2081 result.xy = other; 2082 return result; 2083 } 2084 2085 /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit signed 2086 * (twos-complement) integers. */ 2087 static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short3 other) { 2088 simd_short16 result = 0; 2089 result.xyz = other; 2090 return result; 2091 } 2092 2093 /*! @abstract Extends `other` to form a vector of sixteen 16-bit signed 2094 * (twos-complement) integers. The contents of the newly-created vector 2095 * lanes are unspecified. */ 2096 static inline SIMD_CFUNC simd_short16 simd_make_short16_undef(simd_short3 other) { 2097 simd_short16 result; 2098 result.xyz = other; 2099 return result; 2100 } 2101 2102 /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit signed 2103 * (twos-complement) integers. */ 2104 static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short4 other) { 2105 simd_short16 result = 0; 2106 result.xyzw = other; 2107 return result; 2108 } 2109 2110 /*! @abstract Extends `other` to form a vector of sixteen 16-bit signed 2111 * (twos-complement) integers. The contents of the newly-created vector 2112 * lanes are unspecified. */ 2113 static inline SIMD_CFUNC simd_short16 simd_make_short16_undef(simd_short4 other) { 2114 simd_short16 result; 2115 result.xyzw = other; 2116 return result; 2117 } 2118 2119 /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit signed 2120 * (twos-complement) integers. */ 2121 static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short8 other) { 2122 simd_short16 result = 0; 2123 result.lo = simd_make_short8(other); 2124 return result; 2125 } 2126 2127 /*! @abstract Extends `other` to form a vector of sixteen 16-bit signed 2128 * (twos-complement) integers. The contents of the newly-created vector 2129 * lanes are unspecified. */ 2130 static inline SIMD_CFUNC simd_short16 simd_make_short16_undef(simd_short8 other) { 2131 simd_short16 result; 2132 result.lo = simd_make_short8(other); 2133 return result; 2134 } 2135 2136 /*! @abstract Returns `other` unmodified. This function is a convenience for 2137 * templated and autogenerated code. */ 2138 static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short16 other) { 2139 return other; 2140 } 2141 2142 /*! @abstract Truncates `other` to form a vector of sixteen 16-bit signed 2143 * (twos-complement) integers. */ 2144 static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short32 other) { 2145 return simd_make_short16(other.lo); 2146 } 2147 2148 /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two 2149 * 16-bit signed (twos-complement) integers. */ 2150 static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short16 lo, simd_short16 hi) { 2151 simd_short32 result; 2152 result.lo = lo; 2153 result.hi = hi; 2154 return result; 2155 } 2156 2157 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 2158 * signed (twos-complement) integers. */ 2159 static inline SIMD_CFUNC simd_short32 simd_make_short32(short other) { 2160 simd_short32 result = 0; 2161 result.x = other; 2162 return result; 2163 } 2164 2165 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed 2166 * (twos-complement) integers. The contents of the newly-created vector 2167 * lanes are unspecified. */ 2168 static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(short other) { 2169 simd_short32 result; 2170 result.x = other; 2171 return result; 2172 } 2173 2174 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 2175 * signed (twos-complement) integers. */ 2176 static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short2 other) { 2177 simd_short32 result = 0; 2178 result.xy = other; 2179 return result; 2180 } 2181 2182 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed 2183 * (twos-complement) integers. The contents of the newly-created vector 2184 * lanes are unspecified. */ 2185 static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(simd_short2 other) { 2186 simd_short32 result; 2187 result.xy = other; 2188 return result; 2189 } 2190 2191 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 2192 * signed (twos-complement) integers. */ 2193 static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short3 other) { 2194 simd_short32 result = 0; 2195 result.xyz = other; 2196 return result; 2197 } 2198 2199 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed 2200 * (twos-complement) integers. The contents of the newly-created vector 2201 * lanes are unspecified. */ 2202 static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(simd_short3 other) { 2203 simd_short32 result; 2204 result.xyz = other; 2205 return result; 2206 } 2207 2208 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 2209 * signed (twos-complement) integers. */ 2210 static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short4 other) { 2211 simd_short32 result = 0; 2212 result.xyzw = other; 2213 return result; 2214 } 2215 2216 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed 2217 * (twos-complement) integers. The contents of the newly-created vector 2218 * lanes are unspecified. */ 2219 static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(simd_short4 other) { 2220 simd_short32 result; 2221 result.xyzw = other; 2222 return result; 2223 } 2224 2225 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 2226 * signed (twos-complement) integers. */ 2227 static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short8 other) { 2228 simd_short32 result = 0; 2229 result.lo = simd_make_short16(other); 2230 return result; 2231 } 2232 2233 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed 2234 * (twos-complement) integers. The contents of the newly-created vector 2235 * lanes are unspecified. */ 2236 static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(simd_short8 other) { 2237 simd_short32 result; 2238 result.lo = simd_make_short16(other); 2239 return result; 2240 } 2241 2242 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 2243 * signed (twos-complement) integers. */ 2244 static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short16 other) { 2245 simd_short32 result = 0; 2246 result.lo = simd_make_short16(other); 2247 return result; 2248 } 2249 2250 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed 2251 * (twos-complement) integers. The contents of the newly-created vector 2252 * lanes are unspecified. */ 2253 static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(simd_short16 other) { 2254 simd_short32 result; 2255 result.lo = simd_make_short16(other); 2256 return result; 2257 } 2258 2259 /*! @abstract Returns `other` unmodified. This function is a convenience for 2260 * templated and autogenerated code. */ 2261 static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short32 other) { 2262 return other; 2263 } 2264 2265 /*! @abstract Concatenates `x` and `y` to form a vector of two 16-bit 2266 * unsigned integers. */ 2267 static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(unsigned short x, unsigned short y) { 2268 simd_ushort2 result; 2269 result.x = x; 2270 result.y = y; 2271 return result; 2272 } 2273 2274 /*! @abstract Zero-extends `other` to form a vector of two 16-bit unsigned 2275 * integers. */ 2276 static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(unsigned short other) { 2277 simd_ushort2 result = 0; 2278 result.x = other; 2279 return result; 2280 } 2281 2282 /*! @abstract Extends `other` to form a vector of two 16-bit unsigned 2283 * integers. The contents of the newly-created vector lanes are 2284 * unspecified. */ 2285 static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2_undef(unsigned short other) { 2286 simd_ushort2 result; 2287 result.x = other; 2288 return result; 2289 } 2290 2291 /*! @abstract Returns `other` unmodified. This function is a convenience for 2292 * templated and autogenerated code. */ 2293 static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort2 other) { 2294 return other; 2295 } 2296 2297 /*! @abstract Truncates `other` to form a vector of two 16-bit unsigned 2298 * integers. */ 2299 static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort3 other) { 2300 return other.xy; 2301 } 2302 2303 /*! @abstract Truncates `other` to form a vector of two 16-bit unsigned 2304 * integers. */ 2305 static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort4 other) { 2306 return other.xy; 2307 } 2308 2309 /*! @abstract Truncates `other` to form a vector of two 16-bit unsigned 2310 * integers. */ 2311 static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort8 other) { 2312 return other.xy; 2313 } 2314 2315 /*! @abstract Truncates `other` to form a vector of two 16-bit unsigned 2316 * integers. */ 2317 static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort16 other) { 2318 return other.xy; 2319 } 2320 2321 /*! @abstract Truncates `other` to form a vector of two 16-bit unsigned 2322 * integers. */ 2323 static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort32 other) { 2324 return other.xy; 2325 } 2326 2327 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 16-bit 2328 * unsigned integers. */ 2329 static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(unsigned short x, unsigned short y, unsigned short z) { 2330 simd_ushort3 result; 2331 result.x = x; 2332 result.y = y; 2333 result.z = z; 2334 return result; 2335 } 2336 2337 /*! @abstract Concatenates `x` and `yz` to form a vector of three 16-bit 2338 * unsigned integers. */ 2339 static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(unsigned short x, simd_ushort2 yz) { 2340 simd_ushort3 result; 2341 result.x = x; 2342 result.yz = yz; 2343 return result; 2344 } 2345 2346 /*! @abstract Concatenates `xy` and `z` to form a vector of three 16-bit 2347 * unsigned integers. */ 2348 static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort2 xy, unsigned short z) { 2349 simd_ushort3 result; 2350 result.xy = xy; 2351 result.z = z; 2352 return result; 2353 } 2354 2355 /*! @abstract Zero-extends `other` to form a vector of three 16-bit unsigned 2356 * integers. */ 2357 static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(unsigned short other) { 2358 simd_ushort3 result = 0; 2359 result.x = other; 2360 return result; 2361 } 2362 2363 /*! @abstract Extends `other` to form a vector of three 16-bit unsigned 2364 * integers. The contents of the newly-created vector lanes are 2365 * unspecified. */ 2366 static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3_undef(unsigned short other) { 2367 simd_ushort3 result; 2368 result.x = other; 2369 return result; 2370 } 2371 2372 /*! @abstract Zero-extends `other` to form a vector of three 16-bit unsigned 2373 * integers. */ 2374 static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort2 other) { 2375 simd_ushort3 result = 0; 2376 result.xy = other; 2377 return result; 2378 } 2379 2380 /*! @abstract Extends `other` to form a vector of three 16-bit unsigned 2381 * integers. The contents of the newly-created vector lanes are 2382 * unspecified. */ 2383 static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3_undef(simd_ushort2 other) { 2384 simd_ushort3 result; 2385 result.xy = other; 2386 return result; 2387 } 2388 2389 /*! @abstract Returns `other` unmodified. This function is a convenience for 2390 * templated and autogenerated code. */ 2391 static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort3 other) { 2392 return other; 2393 } 2394 2395 /*! @abstract Truncates `other` to form a vector of three 16-bit unsigned 2396 * integers. */ 2397 static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort4 other) { 2398 return other.xyz; 2399 } 2400 2401 /*! @abstract Truncates `other` to form a vector of three 16-bit unsigned 2402 * integers. */ 2403 static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort8 other) { 2404 return other.xyz; 2405 } 2406 2407 /*! @abstract Truncates `other` to form a vector of three 16-bit unsigned 2408 * integers. */ 2409 static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort16 other) { 2410 return other.xyz; 2411 } 2412 2413 /*! @abstract Truncates `other` to form a vector of three 16-bit unsigned 2414 * integers. */ 2415 static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort32 other) { 2416 return other.xyz; 2417 } 2418 2419 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 2420 * 16-bit unsigned integers. */ 2421 static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(unsigned short x, unsigned short y, unsigned short z, unsigned short w) { 2422 simd_ushort4 result; 2423 result.x = x; 2424 result.y = y; 2425 result.z = z; 2426 result.w = w; 2427 return result; 2428 } 2429 2430 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 16-bit 2431 * unsigned integers. */ 2432 static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(unsigned short x, unsigned short y, simd_ushort2 zw) { 2433 simd_ushort4 result; 2434 result.x = x; 2435 result.y = y; 2436 result.zw = zw; 2437 return result; 2438 } 2439 2440 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 16-bit 2441 * unsigned integers. */ 2442 static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(unsigned short x, simd_ushort2 yz, unsigned short w) { 2443 simd_ushort4 result; 2444 result.x = x; 2445 result.yz = yz; 2446 result.w = w; 2447 return result; 2448 } 2449 2450 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 16-bit 2451 * unsigned integers. */ 2452 static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort2 xy, unsigned short z, unsigned short w) { 2453 simd_ushort4 result; 2454 result.xy = xy; 2455 result.z = z; 2456 result.w = w; 2457 return result; 2458 } 2459 2460 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 16-bit 2461 * unsigned integers. */ 2462 static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(unsigned short x, simd_ushort3 yzw) { 2463 simd_ushort4 result; 2464 result.x = x; 2465 result.yzw = yzw; 2466 return result; 2467 } 2468 2469 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 16-bit 2470 * unsigned integers. */ 2471 static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort2 xy, simd_ushort2 zw) { 2472 simd_ushort4 result; 2473 result.xy = xy; 2474 result.zw = zw; 2475 return result; 2476 } 2477 2478 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 16-bit 2479 * unsigned integers. */ 2480 static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort3 xyz, unsigned short w) { 2481 simd_ushort4 result; 2482 result.xyz = xyz; 2483 result.w = w; 2484 return result; 2485 } 2486 2487 /*! @abstract Zero-extends `other` to form a vector of four 16-bit unsigned 2488 * integers. */ 2489 static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(unsigned short other) { 2490 simd_ushort4 result = 0; 2491 result.x = other; 2492 return result; 2493 } 2494 2495 /*! @abstract Extends `other` to form a vector of four 16-bit unsigned 2496 * integers. The contents of the newly-created vector lanes are 2497 * unspecified. */ 2498 static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4_undef(unsigned short other) { 2499 simd_ushort4 result; 2500 result.x = other; 2501 return result; 2502 } 2503 2504 /*! @abstract Zero-extends `other` to form a vector of four 16-bit unsigned 2505 * integers. */ 2506 static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort2 other) { 2507 simd_ushort4 result = 0; 2508 result.xy = other; 2509 return result; 2510 } 2511 2512 /*! @abstract Extends `other` to form a vector of four 16-bit unsigned 2513 * integers. The contents of the newly-created vector lanes are 2514 * unspecified. */ 2515 static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4_undef(simd_ushort2 other) { 2516 simd_ushort4 result; 2517 result.xy = other; 2518 return result; 2519 } 2520 2521 /*! @abstract Zero-extends `other` to form a vector of four 16-bit unsigned 2522 * integers. */ 2523 static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort3 other) { 2524 simd_ushort4 result = 0; 2525 result.xyz = other; 2526 return result; 2527 } 2528 2529 /*! @abstract Extends `other` to form a vector of four 16-bit unsigned 2530 * integers. The contents of the newly-created vector lanes are 2531 * unspecified. */ 2532 static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4_undef(simd_ushort3 other) { 2533 simd_ushort4 result; 2534 result.xyz = other; 2535 return result; 2536 } 2537 2538 /*! @abstract Returns `other` unmodified. This function is a convenience for 2539 * templated and autogenerated code. */ 2540 static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort4 other) { 2541 return other; 2542 } 2543 2544 /*! @abstract Truncates `other` to form a vector of four 16-bit unsigned 2545 * integers. */ 2546 static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort8 other) { 2547 return other.xyzw; 2548 } 2549 2550 /*! @abstract Truncates `other` to form a vector of four 16-bit unsigned 2551 * integers. */ 2552 static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort16 other) { 2553 return other.xyzw; 2554 } 2555 2556 /*! @abstract Truncates `other` to form a vector of four 16-bit unsigned 2557 * integers. */ 2558 static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort32 other) { 2559 return other.xyzw; 2560 } 2561 2562 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 16-bit 2563 * unsigned integers. */ 2564 static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort4 lo, simd_ushort4 hi) { 2565 simd_ushort8 result; 2566 result.lo = lo; 2567 result.hi = hi; 2568 return result; 2569 } 2570 2571 /*! @abstract Zero-extends `other` to form a vector of eight 16-bit unsigned 2572 * integers. */ 2573 static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(unsigned short other) { 2574 simd_ushort8 result = 0; 2575 result.x = other; 2576 return result; 2577 } 2578 2579 /*! @abstract Extends `other` to form a vector of eight 16-bit unsigned 2580 * integers. The contents of the newly-created vector lanes are 2581 * unspecified. */ 2582 static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8_undef(unsigned short other) { 2583 simd_ushort8 result; 2584 result.x = other; 2585 return result; 2586 } 2587 2588 /*! @abstract Zero-extends `other` to form a vector of eight 16-bit unsigned 2589 * integers. */ 2590 static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort2 other) { 2591 simd_ushort8 result = 0; 2592 result.xy = other; 2593 return result; 2594 } 2595 2596 /*! @abstract Extends `other` to form a vector of eight 16-bit unsigned 2597 * integers. The contents of the newly-created vector lanes are 2598 * unspecified. */ 2599 static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8_undef(simd_ushort2 other) { 2600 simd_ushort8 result; 2601 result.xy = other; 2602 return result; 2603 } 2604 2605 /*! @abstract Zero-extends `other` to form a vector of eight 16-bit unsigned 2606 * integers. */ 2607 static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort3 other) { 2608 simd_ushort8 result = 0; 2609 result.xyz = other; 2610 return result; 2611 } 2612 2613 /*! @abstract Extends `other` to form a vector of eight 16-bit unsigned 2614 * integers. The contents of the newly-created vector lanes are 2615 * unspecified. */ 2616 static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8_undef(simd_ushort3 other) { 2617 simd_ushort8 result; 2618 result.xyz = other; 2619 return result; 2620 } 2621 2622 /*! @abstract Zero-extends `other` to form a vector of eight 16-bit unsigned 2623 * integers. */ 2624 static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort4 other) { 2625 simd_ushort8 result = 0; 2626 result.xyzw = other; 2627 return result; 2628 } 2629 2630 /*! @abstract Extends `other` to form a vector of eight 16-bit unsigned 2631 * integers. The contents of the newly-created vector lanes are 2632 * unspecified. */ 2633 static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8_undef(simd_ushort4 other) { 2634 simd_ushort8 result; 2635 result.xyzw = other; 2636 return result; 2637 } 2638 2639 /*! @abstract Returns `other` unmodified. This function is a convenience for 2640 * templated and autogenerated code. */ 2641 static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort8 other) { 2642 return other; 2643 } 2644 2645 /*! @abstract Truncates `other` to form a vector of eight 16-bit unsigned 2646 * integers. */ 2647 static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort16 other) { 2648 return simd_make_ushort8(other.lo); 2649 } 2650 2651 /*! @abstract Truncates `other` to form a vector of eight 16-bit unsigned 2652 * integers. */ 2653 static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort32 other) { 2654 return simd_make_ushort8(other.lo); 2655 } 2656 2657 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 16-bit 2658 * unsigned integers. */ 2659 static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort8 lo, simd_ushort8 hi) { 2660 simd_ushort16 result; 2661 result.lo = lo; 2662 result.hi = hi; 2663 return result; 2664 } 2665 2666 /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit 2667 * unsigned integers. */ 2668 static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(unsigned short other) { 2669 simd_ushort16 result = 0; 2670 result.x = other; 2671 return result; 2672 } 2673 2674 /*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned 2675 * integers. The contents of the newly-created vector lanes are 2676 * unspecified. */ 2677 static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16_undef(unsigned short other) { 2678 simd_ushort16 result; 2679 result.x = other; 2680 return result; 2681 } 2682 2683 /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit 2684 * unsigned integers. */ 2685 static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort2 other) { 2686 simd_ushort16 result = 0; 2687 result.xy = other; 2688 return result; 2689 } 2690 2691 /*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned 2692 * integers. The contents of the newly-created vector lanes are 2693 * unspecified. */ 2694 static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16_undef(simd_ushort2 other) { 2695 simd_ushort16 result; 2696 result.xy = other; 2697 return result; 2698 } 2699 2700 /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit 2701 * unsigned integers. */ 2702 static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort3 other) { 2703 simd_ushort16 result = 0; 2704 result.xyz = other; 2705 return result; 2706 } 2707 2708 /*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned 2709 * integers. The contents of the newly-created vector lanes are 2710 * unspecified. */ 2711 static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16_undef(simd_ushort3 other) { 2712 simd_ushort16 result; 2713 result.xyz = other; 2714 return result; 2715 } 2716 2717 /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit 2718 * unsigned integers. */ 2719 static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort4 other) { 2720 simd_ushort16 result = 0; 2721 result.xyzw = other; 2722 return result; 2723 } 2724 2725 /*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned 2726 * integers. The contents of the newly-created vector lanes are 2727 * unspecified. */ 2728 static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16_undef(simd_ushort4 other) { 2729 simd_ushort16 result; 2730 result.xyzw = other; 2731 return result; 2732 } 2733 2734 /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit 2735 * unsigned integers. */ 2736 static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort8 other) { 2737 simd_ushort16 result = 0; 2738 result.lo = simd_make_ushort8(other); 2739 return result; 2740 } 2741 2742 /*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned 2743 * integers. The contents of the newly-created vector lanes are 2744 * unspecified. */ 2745 static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16_undef(simd_ushort8 other) { 2746 simd_ushort16 result; 2747 result.lo = simd_make_ushort8(other); 2748 return result; 2749 } 2750 2751 /*! @abstract Returns `other` unmodified. This function is a convenience for 2752 * templated and autogenerated code. */ 2753 static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort16 other) { 2754 return other; 2755 } 2756 2757 /*! @abstract Truncates `other` to form a vector of sixteen 16-bit unsigned 2758 * integers. */ 2759 static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort32 other) { 2760 return simd_make_ushort16(other.lo); 2761 } 2762 2763 /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two 2764 * 16-bit unsigned integers. */ 2765 static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort16 lo, simd_ushort16 hi) { 2766 simd_ushort32 result; 2767 result.lo = lo; 2768 result.hi = hi; 2769 return result; 2770 } 2771 2772 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 2773 * unsigned integers. */ 2774 static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(unsigned short other) { 2775 simd_ushort32 result = 0; 2776 result.x = other; 2777 return result; 2778 } 2779 2780 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned 2781 * integers. The contents of the newly-created vector lanes are 2782 * unspecified. */ 2783 static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(unsigned short other) { 2784 simd_ushort32 result; 2785 result.x = other; 2786 return result; 2787 } 2788 2789 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 2790 * unsigned integers. */ 2791 static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort2 other) { 2792 simd_ushort32 result = 0; 2793 result.xy = other; 2794 return result; 2795 } 2796 2797 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned 2798 * integers. The contents of the newly-created vector lanes are 2799 * unspecified. */ 2800 static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(simd_ushort2 other) { 2801 simd_ushort32 result; 2802 result.xy = other; 2803 return result; 2804 } 2805 2806 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 2807 * unsigned integers. */ 2808 static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort3 other) { 2809 simd_ushort32 result = 0; 2810 result.xyz = other; 2811 return result; 2812 } 2813 2814 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned 2815 * integers. The contents of the newly-created vector lanes are 2816 * unspecified. */ 2817 static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(simd_ushort3 other) { 2818 simd_ushort32 result; 2819 result.xyz = other; 2820 return result; 2821 } 2822 2823 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 2824 * unsigned integers. */ 2825 static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort4 other) { 2826 simd_ushort32 result = 0; 2827 result.xyzw = other; 2828 return result; 2829 } 2830 2831 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned 2832 * integers. The contents of the newly-created vector lanes are 2833 * unspecified. */ 2834 static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(simd_ushort4 other) { 2835 simd_ushort32 result; 2836 result.xyzw = other; 2837 return result; 2838 } 2839 2840 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 2841 * unsigned integers. */ 2842 static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort8 other) { 2843 simd_ushort32 result = 0; 2844 result.lo = simd_make_ushort16(other); 2845 return result; 2846 } 2847 2848 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned 2849 * integers. The contents of the newly-created vector lanes are 2850 * unspecified. */ 2851 static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(simd_ushort8 other) { 2852 simd_ushort32 result; 2853 result.lo = simd_make_ushort16(other); 2854 return result; 2855 } 2856 2857 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 2858 * unsigned integers. */ 2859 static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort16 other) { 2860 simd_ushort32 result = 0; 2861 result.lo = simd_make_ushort16(other); 2862 return result; 2863 } 2864 2865 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned 2866 * integers. The contents of the newly-created vector lanes are 2867 * unspecified. */ 2868 static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(simd_ushort16 other) { 2869 simd_ushort32 result; 2870 result.lo = simd_make_ushort16(other); 2871 return result; 2872 } 2873 2874 /*! @abstract Returns `other` unmodified. This function is a convenience for 2875 * templated and autogenerated code. */ 2876 static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort32 other) { 2877 return other; 2878 } 2879 2880 /*! @abstract Concatenates `x` and `y` to form a vector of two 16-bit 2881 * floating-point numbers. */ 2882 static inline SIMD_CFUNC simd_half2 simd_make_half2(_Float16 x, _Float16 y) { 2883 simd_half2 result; 2884 result.x = x; 2885 result.y = y; 2886 return result; 2887 } 2888 2889 /*! @abstract Zero-extends `other` to form a vector of two 16-bit floating- 2890 * point numbers. */ 2891 static inline SIMD_CFUNC simd_half2 simd_make_half2(_Float16 other) { 2892 simd_half2 result = 0; 2893 result.x = other; 2894 return result; 2895 } 2896 2897 /*! @abstract Extends `other` to form a vector of two 16-bit floating-point 2898 * numbers. The contents of the newly-created vector lanes are unspecified. */ 2899 static inline SIMD_CFUNC simd_half2 simd_make_half2_undef(_Float16 other) { 2900 simd_half2 result; 2901 result.x = other; 2902 return result; 2903 } 2904 2905 /*! @abstract Returns `other` unmodified. This function is a convenience for 2906 * templated and autogenerated code. */ 2907 static inline SIMD_CFUNC simd_half2 simd_make_half2(simd_half2 other) { 2908 return other; 2909 } 2910 2911 /*! @abstract Truncates `other` to form a vector of two 16-bit floating- 2912 * point numbers. */ 2913 static inline SIMD_CFUNC simd_half2 simd_make_half2(simd_half3 other) { 2914 return other.xy; 2915 } 2916 2917 /*! @abstract Truncates `other` to form a vector of two 16-bit floating- 2918 * point numbers. */ 2919 static inline SIMD_CFUNC simd_half2 simd_make_half2(simd_half4 other) { 2920 return other.xy; 2921 } 2922 2923 /*! @abstract Truncates `other` to form a vector of two 16-bit floating- 2924 * point numbers. */ 2925 static inline SIMD_CFUNC simd_half2 simd_make_half2(simd_half8 other) { 2926 return other.xy; 2927 } 2928 2929 /*! @abstract Truncates `other` to form a vector of two 16-bit floating- 2930 * point numbers. */ 2931 static inline SIMD_CFUNC simd_half2 simd_make_half2(simd_half16 other) { 2932 return other.xy; 2933 } 2934 2935 /*! @abstract Truncates `other` to form a vector of two 16-bit floating- 2936 * point numbers. */ 2937 static inline SIMD_CFUNC simd_half2 simd_make_half2(simd_half32 other) { 2938 return other.xy; 2939 } 2940 2941 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 16-bit 2942 * floating-point numbers. */ 2943 static inline SIMD_CFUNC simd_half3 simd_make_half3(_Float16 x, _Float16 y, _Float16 z) { 2944 simd_half3 result; 2945 result.x = x; 2946 result.y = y; 2947 result.z = z; 2948 return result; 2949 } 2950 2951 /*! @abstract Concatenates `x` and `yz` to form a vector of three 16-bit 2952 * floating-point numbers. */ 2953 static inline SIMD_CFUNC simd_half3 simd_make_half3(_Float16 x, simd_half2 yz) { 2954 simd_half3 result; 2955 result.x = x; 2956 result.yz = yz; 2957 return result; 2958 } 2959 2960 /*! @abstract Concatenates `xy` and `z` to form a vector of three 16-bit 2961 * floating-point numbers. */ 2962 static inline SIMD_CFUNC simd_half3 simd_make_half3(simd_half2 xy, _Float16 z) { 2963 simd_half3 result; 2964 result.xy = xy; 2965 result.z = z; 2966 return result; 2967 } 2968 2969 /*! @abstract Zero-extends `other` to form a vector of three 16-bit 2970 * floating-point numbers. */ 2971 static inline SIMD_CFUNC simd_half3 simd_make_half3(_Float16 other) { 2972 simd_half3 result = 0; 2973 result.x = other; 2974 return result; 2975 } 2976 2977 /*! @abstract Extends `other` to form a vector of three 16-bit floating- 2978 * point numbers. The contents of the newly-created vector lanes are 2979 * unspecified. */ 2980 static inline SIMD_CFUNC simd_half3 simd_make_half3_undef(_Float16 other) { 2981 simd_half3 result; 2982 result.x = other; 2983 return result; 2984 } 2985 2986 /*! @abstract Zero-extends `other` to form a vector of three 16-bit 2987 * floating-point numbers. */ 2988 static inline SIMD_CFUNC simd_half3 simd_make_half3(simd_half2 other) { 2989 simd_half3 result = 0; 2990 result.xy = other; 2991 return result; 2992 } 2993 2994 /*! @abstract Extends `other` to form a vector of three 16-bit floating- 2995 * point numbers. The contents of the newly-created vector lanes are 2996 * unspecified. */ 2997 static inline SIMD_CFUNC simd_half3 simd_make_half3_undef(simd_half2 other) { 2998 simd_half3 result; 2999 result.xy = other; 3000 return result; 3001 } 3002 3003 /*! @abstract Returns `other` unmodified. This function is a convenience for 3004 * templated and autogenerated code. */ 3005 static inline SIMD_CFUNC simd_half3 simd_make_half3(simd_half3 other) { 3006 return other; 3007 } 3008 3009 /*! @abstract Truncates `other` to form a vector of three 16-bit floating- 3010 * point numbers. */ 3011 static inline SIMD_CFUNC simd_half3 simd_make_half3(simd_half4 other) { 3012 return other.xyz; 3013 } 3014 3015 /*! @abstract Truncates `other` to form a vector of three 16-bit floating- 3016 * point numbers. */ 3017 static inline SIMD_CFUNC simd_half3 simd_make_half3(simd_half8 other) { 3018 return other.xyz; 3019 } 3020 3021 /*! @abstract Truncates `other` to form a vector of three 16-bit floating- 3022 * point numbers. */ 3023 static inline SIMD_CFUNC simd_half3 simd_make_half3(simd_half16 other) { 3024 return other.xyz; 3025 } 3026 3027 /*! @abstract Truncates `other` to form a vector of three 16-bit floating- 3028 * point numbers. */ 3029 static inline SIMD_CFUNC simd_half3 simd_make_half3(simd_half32 other) { 3030 return other.xyz; 3031 } 3032 3033 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 3034 * 16-bit floating-point numbers. */ 3035 static inline SIMD_CFUNC simd_half4 simd_make_half4(_Float16 x, _Float16 y, _Float16 z, _Float16 w) { 3036 simd_half4 result; 3037 result.x = x; 3038 result.y = y; 3039 result.z = z; 3040 result.w = w; 3041 return result; 3042 } 3043 3044 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 16-bit 3045 * floating-point numbers. */ 3046 static inline SIMD_CFUNC simd_half4 simd_make_half4(_Float16 x, _Float16 y, simd_half2 zw) { 3047 simd_half4 result; 3048 result.x = x; 3049 result.y = y; 3050 result.zw = zw; 3051 return result; 3052 } 3053 3054 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 16-bit 3055 * floating-point numbers. */ 3056 static inline SIMD_CFUNC simd_half4 simd_make_half4(_Float16 x, simd_half2 yz, _Float16 w) { 3057 simd_half4 result; 3058 result.x = x; 3059 result.yz = yz; 3060 result.w = w; 3061 return result; 3062 } 3063 3064 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 16-bit 3065 * floating-point numbers. */ 3066 static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half2 xy, _Float16 z, _Float16 w) { 3067 simd_half4 result; 3068 result.xy = xy; 3069 result.z = z; 3070 result.w = w; 3071 return result; 3072 } 3073 3074 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 16-bit 3075 * floating-point numbers. */ 3076 static inline SIMD_CFUNC simd_half4 simd_make_half4(_Float16 x, simd_half3 yzw) { 3077 simd_half4 result; 3078 result.x = x; 3079 result.yzw = yzw; 3080 return result; 3081 } 3082 3083 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 16-bit 3084 * floating-point numbers. */ 3085 static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half2 xy, simd_half2 zw) { 3086 simd_half4 result; 3087 result.xy = xy; 3088 result.zw = zw; 3089 return result; 3090 } 3091 3092 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 16-bit 3093 * floating-point numbers. */ 3094 static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half3 xyz, _Float16 w) { 3095 simd_half4 result; 3096 result.xyz = xyz; 3097 result.w = w; 3098 return result; 3099 } 3100 3101 /*! @abstract Zero-extends `other` to form a vector of four 16-bit floating- 3102 * point numbers. */ 3103 static inline SIMD_CFUNC simd_half4 simd_make_half4(_Float16 other) { 3104 simd_half4 result = 0; 3105 result.x = other; 3106 return result; 3107 } 3108 3109 /*! @abstract Extends `other` to form a vector of four 16-bit floating-point 3110 * numbers. The contents of the newly-created vector lanes are unspecified. */ 3111 static inline SIMD_CFUNC simd_half4 simd_make_half4_undef(_Float16 other) { 3112 simd_half4 result; 3113 result.x = other; 3114 return result; 3115 } 3116 3117 /*! @abstract Zero-extends `other` to form a vector of four 16-bit floating- 3118 * point numbers. */ 3119 static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half2 other) { 3120 simd_half4 result = 0; 3121 result.xy = other; 3122 return result; 3123 } 3124 3125 /*! @abstract Extends `other` to form a vector of four 16-bit floating-point 3126 * numbers. The contents of the newly-created vector lanes are unspecified. */ 3127 static inline SIMD_CFUNC simd_half4 simd_make_half4_undef(simd_half2 other) { 3128 simd_half4 result; 3129 result.xy = other; 3130 return result; 3131 } 3132 3133 /*! @abstract Zero-extends `other` to form a vector of four 16-bit floating- 3134 * point numbers. */ 3135 static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half3 other) { 3136 simd_half4 result = 0; 3137 result.xyz = other; 3138 return result; 3139 } 3140 3141 /*! @abstract Extends `other` to form a vector of four 16-bit floating-point 3142 * numbers. The contents of the newly-created vector lanes are unspecified. */ 3143 static inline SIMD_CFUNC simd_half4 simd_make_half4_undef(simd_half3 other) { 3144 simd_half4 result; 3145 result.xyz = other; 3146 return result; 3147 } 3148 3149 /*! @abstract Returns `other` unmodified. This function is a convenience for 3150 * templated and autogenerated code. */ 3151 static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half4 other) { 3152 return other; 3153 } 3154 3155 /*! @abstract Truncates `other` to form a vector of four 16-bit floating- 3156 * point numbers. */ 3157 static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half8 other) { 3158 return other.xyzw; 3159 } 3160 3161 /*! @abstract Truncates `other` to form a vector of four 16-bit floating- 3162 * point numbers. */ 3163 static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half16 other) { 3164 return other.xyzw; 3165 } 3166 3167 /*! @abstract Truncates `other` to form a vector of four 16-bit floating- 3168 * point numbers. */ 3169 static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half32 other) { 3170 return other.xyzw; 3171 } 3172 3173 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 16-bit 3174 * floating-point numbers. */ 3175 static inline SIMD_CFUNC simd_half8 simd_make_half8(simd_half4 lo, simd_half4 hi) { 3176 simd_half8 result; 3177 result.lo = lo; 3178 result.hi = hi; 3179 return result; 3180 } 3181 3182 /*! @abstract Zero-extends `other` to form a vector of eight 16-bit 3183 * floating-point numbers. */ 3184 static inline SIMD_CFUNC simd_half8 simd_make_half8(_Float16 other) { 3185 simd_half8 result = 0; 3186 result.x = other; 3187 return result; 3188 } 3189 3190 /*! @abstract Extends `other` to form a vector of eight 16-bit floating- 3191 * point numbers. The contents of the newly-created vector lanes are 3192 * unspecified. */ 3193 static inline SIMD_CFUNC simd_half8 simd_make_half8_undef(_Float16 other) { 3194 simd_half8 result; 3195 result.x = other; 3196 return result; 3197 } 3198 3199 /*! @abstract Zero-extends `other` to form a vector of eight 16-bit 3200 * floating-point numbers. */ 3201 static inline SIMD_CFUNC simd_half8 simd_make_half8(simd_half2 other) { 3202 simd_half8 result = 0; 3203 result.xy = other; 3204 return result; 3205 } 3206 3207 /*! @abstract Extends `other` to form a vector of eight 16-bit floating- 3208 * point numbers. The contents of the newly-created vector lanes are 3209 * unspecified. */ 3210 static inline SIMD_CFUNC simd_half8 simd_make_half8_undef(simd_half2 other) { 3211 simd_half8 result; 3212 result.xy = other; 3213 return result; 3214 } 3215 3216 /*! @abstract Zero-extends `other` to form a vector of eight 16-bit 3217 * floating-point numbers. */ 3218 static inline SIMD_CFUNC simd_half8 simd_make_half8(simd_half3 other) { 3219 simd_half8 result = 0; 3220 result.xyz = other; 3221 return result; 3222 } 3223 3224 /*! @abstract Extends `other` to form a vector of eight 16-bit floating- 3225 * point numbers. The contents of the newly-created vector lanes are 3226 * unspecified. */ 3227 static inline SIMD_CFUNC simd_half8 simd_make_half8_undef(simd_half3 other) { 3228 simd_half8 result; 3229 result.xyz = other; 3230 return result; 3231 } 3232 3233 /*! @abstract Zero-extends `other` to form a vector of eight 16-bit 3234 * floating-point numbers. */ 3235 static inline SIMD_CFUNC simd_half8 simd_make_half8(simd_half4 other) { 3236 simd_half8 result = 0; 3237 result.xyzw = other; 3238 return result; 3239 } 3240 3241 /*! @abstract Extends `other` to form a vector of eight 16-bit floating- 3242 * point numbers. The contents of the newly-created vector lanes are 3243 * unspecified. */ 3244 static inline SIMD_CFUNC simd_half8 simd_make_half8_undef(simd_half4 other) { 3245 simd_half8 result; 3246 result.xyzw = other; 3247 return result; 3248 } 3249 3250 /*! @abstract Returns `other` unmodified. This function is a convenience for 3251 * templated and autogenerated code. */ 3252 static inline SIMD_CFUNC simd_half8 simd_make_half8(simd_half8 other) { 3253 return other; 3254 } 3255 3256 /*! @abstract Truncates `other` to form a vector of eight 16-bit floating- 3257 * point numbers. */ 3258 static inline SIMD_CFUNC simd_half8 simd_make_half8(simd_half16 other) { 3259 return simd_make_half8(other.lo); 3260 } 3261 3262 /*! @abstract Truncates `other` to form a vector of eight 16-bit floating- 3263 * point numbers. */ 3264 static inline SIMD_CFUNC simd_half8 simd_make_half8(simd_half32 other) { 3265 return simd_make_half8(other.lo); 3266 } 3267 3268 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 16-bit 3269 * floating-point numbers. */ 3270 static inline SIMD_CFUNC simd_half16 simd_make_half16(simd_half8 lo, simd_half8 hi) { 3271 simd_half16 result; 3272 result.lo = lo; 3273 result.hi = hi; 3274 return result; 3275 } 3276 3277 /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit 3278 * floating-point numbers. */ 3279 static inline SIMD_CFUNC simd_half16 simd_make_half16(_Float16 other) { 3280 simd_half16 result = 0; 3281 result.x = other; 3282 return result; 3283 } 3284 3285 /*! @abstract Extends `other` to form a vector of sixteen 16-bit floating- 3286 * point numbers. The contents of the newly-created vector lanes are 3287 * unspecified. */ 3288 static inline SIMD_CFUNC simd_half16 simd_make_half16_undef(_Float16 other) { 3289 simd_half16 result; 3290 result.x = other; 3291 return result; 3292 } 3293 3294 /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit 3295 * floating-point numbers. */ 3296 static inline SIMD_CFUNC simd_half16 simd_make_half16(simd_half2 other) { 3297 simd_half16 result = 0; 3298 result.xy = other; 3299 return result; 3300 } 3301 3302 /*! @abstract Extends `other` to form a vector of sixteen 16-bit floating- 3303 * point numbers. The contents of the newly-created vector lanes are 3304 * unspecified. */ 3305 static inline SIMD_CFUNC simd_half16 simd_make_half16_undef(simd_half2 other) { 3306 simd_half16 result; 3307 result.xy = other; 3308 return result; 3309 } 3310 3311 /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit 3312 * floating-point numbers. */ 3313 static inline SIMD_CFUNC simd_half16 simd_make_half16(simd_half3 other) { 3314 simd_half16 result = 0; 3315 result.xyz = other; 3316 return result; 3317 } 3318 3319 /*! @abstract Extends `other` to form a vector of sixteen 16-bit floating- 3320 * point numbers. The contents of the newly-created vector lanes are 3321 * unspecified. */ 3322 static inline SIMD_CFUNC simd_half16 simd_make_half16_undef(simd_half3 other) { 3323 simd_half16 result; 3324 result.xyz = other; 3325 return result; 3326 } 3327 3328 /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit 3329 * floating-point numbers. */ 3330 static inline SIMD_CFUNC simd_half16 simd_make_half16(simd_half4 other) { 3331 simd_half16 result = 0; 3332 result.xyzw = other; 3333 return result; 3334 } 3335 3336 /*! @abstract Extends `other` to form a vector of sixteen 16-bit floating- 3337 * point numbers. The contents of the newly-created vector lanes are 3338 * unspecified. */ 3339 static inline SIMD_CFUNC simd_half16 simd_make_half16_undef(simd_half4 other) { 3340 simd_half16 result; 3341 result.xyzw = other; 3342 return result; 3343 } 3344 3345 /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit 3346 * floating-point numbers. */ 3347 static inline SIMD_CFUNC simd_half16 simd_make_half16(simd_half8 other) { 3348 simd_half16 result = 0; 3349 result.lo = simd_make_half8(other); 3350 return result; 3351 } 3352 3353 /*! @abstract Extends `other` to form a vector of sixteen 16-bit floating- 3354 * point numbers. The contents of the newly-created vector lanes are 3355 * unspecified. */ 3356 static inline SIMD_CFUNC simd_half16 simd_make_half16_undef(simd_half8 other) { 3357 simd_half16 result; 3358 result.lo = simd_make_half8(other); 3359 return result; 3360 } 3361 3362 /*! @abstract Returns `other` unmodified. This function is a convenience for 3363 * templated and autogenerated code. */ 3364 static inline SIMD_CFUNC simd_half16 simd_make_half16(simd_half16 other) { 3365 return other; 3366 } 3367 3368 /*! @abstract Truncates `other` to form a vector of sixteen 16-bit floating- 3369 * point numbers. */ 3370 static inline SIMD_CFUNC simd_half16 simd_make_half16(simd_half32 other) { 3371 return simd_make_half16(other.lo); 3372 } 3373 3374 /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two 3375 * 16-bit floating-point numbers. */ 3376 static inline SIMD_CFUNC simd_half32 simd_make_half32(simd_half16 lo, simd_half16 hi) { 3377 simd_half32 result; 3378 result.lo = lo; 3379 result.hi = hi; 3380 return result; 3381 } 3382 3383 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 3384 * floating-point numbers. */ 3385 static inline SIMD_CFUNC simd_half32 simd_make_half32(_Float16 other) { 3386 simd_half32 result = 0; 3387 result.x = other; 3388 return result; 3389 } 3390 3391 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit 3392 * floating-point numbers. The contents of the newly-created vector lanes 3393 * are unspecified. */ 3394 static inline SIMD_CFUNC simd_half32 simd_make_half32_undef(_Float16 other) { 3395 simd_half32 result; 3396 result.x = other; 3397 return result; 3398 } 3399 3400 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 3401 * floating-point numbers. */ 3402 static inline SIMD_CFUNC simd_half32 simd_make_half32(simd_half2 other) { 3403 simd_half32 result = 0; 3404 result.xy = other; 3405 return result; 3406 } 3407 3408 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit 3409 * floating-point numbers. The contents of the newly-created vector lanes 3410 * are unspecified. */ 3411 static inline SIMD_CFUNC simd_half32 simd_make_half32_undef(simd_half2 other) { 3412 simd_half32 result; 3413 result.xy = other; 3414 return result; 3415 } 3416 3417 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 3418 * floating-point numbers. */ 3419 static inline SIMD_CFUNC simd_half32 simd_make_half32(simd_half3 other) { 3420 simd_half32 result = 0; 3421 result.xyz = other; 3422 return result; 3423 } 3424 3425 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit 3426 * floating-point numbers. The contents of the newly-created vector lanes 3427 * are unspecified. */ 3428 static inline SIMD_CFUNC simd_half32 simd_make_half32_undef(simd_half3 other) { 3429 simd_half32 result; 3430 result.xyz = other; 3431 return result; 3432 } 3433 3434 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 3435 * floating-point numbers. */ 3436 static inline SIMD_CFUNC simd_half32 simd_make_half32(simd_half4 other) { 3437 simd_half32 result = 0; 3438 result.xyzw = other; 3439 return result; 3440 } 3441 3442 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit 3443 * floating-point numbers. The contents of the newly-created vector lanes 3444 * are unspecified. */ 3445 static inline SIMD_CFUNC simd_half32 simd_make_half32_undef(simd_half4 other) { 3446 simd_half32 result; 3447 result.xyzw = other; 3448 return result; 3449 } 3450 3451 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 3452 * floating-point numbers. */ 3453 static inline SIMD_CFUNC simd_half32 simd_make_half32(simd_half8 other) { 3454 simd_half32 result = 0; 3455 result.lo = simd_make_half16(other); 3456 return result; 3457 } 3458 3459 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit 3460 * floating-point numbers. The contents of the newly-created vector lanes 3461 * are unspecified. */ 3462 static inline SIMD_CFUNC simd_half32 simd_make_half32_undef(simd_half8 other) { 3463 simd_half32 result; 3464 result.lo = simd_make_half16(other); 3465 return result; 3466 } 3467 3468 /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit 3469 * floating-point numbers. */ 3470 static inline SIMD_CFUNC simd_half32 simd_make_half32(simd_half16 other) { 3471 simd_half32 result = 0; 3472 result.lo = simd_make_half16(other); 3473 return result; 3474 } 3475 3476 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit 3477 * floating-point numbers. The contents of the newly-created vector lanes 3478 * are unspecified. */ 3479 static inline SIMD_CFUNC simd_half32 simd_make_half32_undef(simd_half16 other) { 3480 simd_half32 result; 3481 result.lo = simd_make_half16(other); 3482 return result; 3483 } 3484 3485 /*! @abstract Returns `other` unmodified. This function is a convenience for 3486 * templated and autogenerated code. */ 3487 static inline SIMD_CFUNC simd_half32 simd_make_half32(simd_half32 other) { 3488 return other; 3489 } 3490 3491 /*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit signed 3492 * (twos-complement) integers. */ 3493 static inline SIMD_CFUNC simd_int2 simd_make_int2(int x, int y) { 3494 simd_int2 result; 3495 result.x = x; 3496 result.y = y; 3497 return result; 3498 } 3499 3500 /*! @abstract Zero-extends `other` to form a vector of two 32-bit signed 3501 * (twos-complement) integers. */ 3502 static inline SIMD_CFUNC simd_int2 simd_make_int2(int other) { 3503 simd_int2 result = 0; 3504 result.x = other; 3505 return result; 3506 } 3507 3508 /*! @abstract Extends `other` to form a vector of two 32-bit signed (twos- 3509 * complement) integers. The contents of the newly-created vector lanes are 3510 * unspecified. */ 3511 static inline SIMD_CFUNC simd_int2 simd_make_int2_undef(int other) { 3512 simd_int2 result; 3513 result.x = other; 3514 return result; 3515 } 3516 3517 /*! @abstract Returns `other` unmodified. This function is a convenience for 3518 * templated and autogenerated code. */ 3519 static inline SIMD_CFUNC simd_int2 simd_make_int2(simd_int2 other) { 3520 return other; 3521 } 3522 3523 /*! @abstract Truncates `other` to form a vector of two 32-bit signed (twos- 3524 * complement) integers. */ 3525 static inline SIMD_CFUNC simd_int2 simd_make_int2(simd_int3 other) { 3526 return other.xy; 3527 } 3528 3529 /*! @abstract Truncates `other` to form a vector of two 32-bit signed (twos- 3530 * complement) integers. */ 3531 static inline SIMD_CFUNC simd_int2 simd_make_int2(simd_int4 other) { 3532 return other.xy; 3533 } 3534 3535 /*! @abstract Truncates `other` to form a vector of two 32-bit signed (twos- 3536 * complement) integers. */ 3537 static inline SIMD_CFUNC simd_int2 simd_make_int2(simd_int8 other) { 3538 return other.xy; 3539 } 3540 3541 /*! @abstract Truncates `other` to form a vector of two 32-bit signed (twos- 3542 * complement) integers. */ 3543 static inline SIMD_CFUNC simd_int2 simd_make_int2(simd_int16 other) { 3544 return other.xy; 3545 } 3546 3547 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit 3548 * signed (twos-complement) integers. */ 3549 static inline SIMD_CFUNC simd_int3 simd_make_int3(int x, int y, int z) { 3550 simd_int3 result; 3551 result.x = x; 3552 result.y = y; 3553 result.z = z; 3554 return result; 3555 } 3556 3557 /*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit 3558 * signed (twos-complement) integers. */ 3559 static inline SIMD_CFUNC simd_int3 simd_make_int3(int x, simd_int2 yz) { 3560 simd_int3 result; 3561 result.x = x; 3562 result.yz = yz; 3563 return result; 3564 } 3565 3566 /*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit 3567 * signed (twos-complement) integers. */ 3568 static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int2 xy, int z) { 3569 simd_int3 result; 3570 result.xy = xy; 3571 result.z = z; 3572 return result; 3573 } 3574 3575 /*! @abstract Zero-extends `other` to form a vector of three 32-bit signed 3576 * (twos-complement) integers. */ 3577 static inline SIMD_CFUNC simd_int3 simd_make_int3(int other) { 3578 simd_int3 result = 0; 3579 result.x = other; 3580 return result; 3581 } 3582 3583 /*! @abstract Extends `other` to form a vector of three 32-bit signed (twos- 3584 * complement) integers. The contents of the newly-created vector lanes are 3585 * unspecified. */ 3586 static inline SIMD_CFUNC simd_int3 simd_make_int3_undef(int other) { 3587 simd_int3 result; 3588 result.x = other; 3589 return result; 3590 } 3591 3592 /*! @abstract Zero-extends `other` to form a vector of three 32-bit signed 3593 * (twos-complement) integers. */ 3594 static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int2 other) { 3595 simd_int3 result = 0; 3596 result.xy = other; 3597 return result; 3598 } 3599 3600 /*! @abstract Extends `other` to form a vector of three 32-bit signed (twos- 3601 * complement) integers. The contents of the newly-created vector lanes are 3602 * unspecified. */ 3603 static inline SIMD_CFUNC simd_int3 simd_make_int3_undef(simd_int2 other) { 3604 simd_int3 result; 3605 result.xy = other; 3606 return result; 3607 } 3608 3609 /*! @abstract Returns `other` unmodified. This function is a convenience for 3610 * templated and autogenerated code. */ 3611 static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int3 other) { 3612 return other; 3613 } 3614 3615 /*! @abstract Truncates `other` to form a vector of three 32-bit signed 3616 * (twos-complement) integers. */ 3617 static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int4 other) { 3618 return other.xyz; 3619 } 3620 3621 /*! @abstract Truncates `other` to form a vector of three 32-bit signed 3622 * (twos-complement) integers. */ 3623 static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int8 other) { 3624 return other.xyz; 3625 } 3626 3627 /*! @abstract Truncates `other` to form a vector of three 32-bit signed 3628 * (twos-complement) integers. */ 3629 static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int16 other) { 3630 return other.xyz; 3631 } 3632 3633 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 3634 * 32-bit signed (twos-complement) integers. */ 3635 static inline SIMD_CFUNC simd_int4 simd_make_int4(int x, int y, int z, int w) { 3636 simd_int4 result; 3637 result.x = x; 3638 result.y = y; 3639 result.z = z; 3640 result.w = w; 3641 return result; 3642 } 3643 3644 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit 3645 * signed (twos-complement) integers. */ 3646 static inline SIMD_CFUNC simd_int4 simd_make_int4(int x, int y, simd_int2 zw) { 3647 simd_int4 result; 3648 result.x = x; 3649 result.y = y; 3650 result.zw = zw; 3651 return result; 3652 } 3653 3654 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit 3655 * signed (twos-complement) integers. */ 3656 static inline SIMD_CFUNC simd_int4 simd_make_int4(int x, simd_int2 yz, int w) { 3657 simd_int4 result; 3658 result.x = x; 3659 result.yz = yz; 3660 result.w = w; 3661 return result; 3662 } 3663 3664 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit 3665 * signed (twos-complement) integers. */ 3666 static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int2 xy, int z, int w) { 3667 simd_int4 result; 3668 result.xy = xy; 3669 result.z = z; 3670 result.w = w; 3671 return result; 3672 } 3673 3674 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit 3675 * signed (twos-complement) integers. */ 3676 static inline SIMD_CFUNC simd_int4 simd_make_int4(int x, simd_int3 yzw) { 3677 simd_int4 result; 3678 result.x = x; 3679 result.yzw = yzw; 3680 return result; 3681 } 3682 3683 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit 3684 * signed (twos-complement) integers. */ 3685 static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int2 xy, simd_int2 zw) { 3686 simd_int4 result; 3687 result.xy = xy; 3688 result.zw = zw; 3689 return result; 3690 } 3691 3692 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit 3693 * signed (twos-complement) integers. */ 3694 static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int3 xyz, int w) { 3695 simd_int4 result; 3696 result.xyz = xyz; 3697 result.w = w; 3698 return result; 3699 } 3700 3701 /*! @abstract Zero-extends `other` to form a vector of four 32-bit signed 3702 * (twos-complement) integers. */ 3703 static inline SIMD_CFUNC simd_int4 simd_make_int4(int other) { 3704 simd_int4 result = 0; 3705 result.x = other; 3706 return result; 3707 } 3708 3709 /*! @abstract Extends `other` to form a vector of four 32-bit signed (twos- 3710 * complement) integers. The contents of the newly-created vector lanes are 3711 * unspecified. */ 3712 static inline SIMD_CFUNC simd_int4 simd_make_int4_undef(int other) { 3713 simd_int4 result; 3714 result.x = other; 3715 return result; 3716 } 3717 3718 /*! @abstract Zero-extends `other` to form a vector of four 32-bit signed 3719 * (twos-complement) integers. */ 3720 static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int2 other) { 3721 simd_int4 result = 0; 3722 result.xy = other; 3723 return result; 3724 } 3725 3726 /*! @abstract Extends `other` to form a vector of four 32-bit signed (twos- 3727 * complement) integers. The contents of the newly-created vector lanes are 3728 * unspecified. */ 3729 static inline SIMD_CFUNC simd_int4 simd_make_int4_undef(simd_int2 other) { 3730 simd_int4 result; 3731 result.xy = other; 3732 return result; 3733 } 3734 3735 /*! @abstract Zero-extends `other` to form a vector of four 32-bit signed 3736 * (twos-complement) integers. */ 3737 static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int3 other) { 3738 simd_int4 result = 0; 3739 result.xyz = other; 3740 return result; 3741 } 3742 3743 /*! @abstract Extends `other` to form a vector of four 32-bit signed (twos- 3744 * complement) integers. The contents of the newly-created vector lanes are 3745 * unspecified. */ 3746 static inline SIMD_CFUNC simd_int4 simd_make_int4_undef(simd_int3 other) { 3747 simd_int4 result; 3748 result.xyz = other; 3749 return result; 3750 } 3751 3752 /*! @abstract Returns `other` unmodified. This function is a convenience for 3753 * templated and autogenerated code. */ 3754 static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int4 other) { 3755 return other; 3756 } 3757 3758 /*! @abstract Truncates `other` to form a vector of four 32-bit signed 3759 * (twos-complement) integers. */ 3760 static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int8 other) { 3761 return other.xyzw; 3762 } 3763 3764 /*! @abstract Truncates `other` to form a vector of four 32-bit signed 3765 * (twos-complement) integers. */ 3766 static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int16 other) { 3767 return other.xyzw; 3768 } 3769 3770 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit 3771 * signed (twos-complement) integers. */ 3772 static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int4 lo, simd_int4 hi) { 3773 simd_int8 result; 3774 result.lo = lo; 3775 result.hi = hi; 3776 return result; 3777 } 3778 3779 /*! @abstract Zero-extends `other` to form a vector of eight 32-bit signed 3780 * (twos-complement) integers. */ 3781 static inline SIMD_CFUNC simd_int8 simd_make_int8(int other) { 3782 simd_int8 result = 0; 3783 result.x = other; 3784 return result; 3785 } 3786 3787 /*! @abstract Extends `other` to form a vector of eight 32-bit signed (twos- 3788 * complement) integers. The contents of the newly-created vector lanes are 3789 * unspecified. */ 3790 static inline SIMD_CFUNC simd_int8 simd_make_int8_undef(int other) { 3791 simd_int8 result; 3792 result.x = other; 3793 return result; 3794 } 3795 3796 /*! @abstract Zero-extends `other` to form a vector of eight 32-bit signed 3797 * (twos-complement) integers. */ 3798 static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int2 other) { 3799 simd_int8 result = 0; 3800 result.xy = other; 3801 return result; 3802 } 3803 3804 /*! @abstract Extends `other` to form a vector of eight 32-bit signed (twos- 3805 * complement) integers. The contents of the newly-created vector lanes are 3806 * unspecified. */ 3807 static inline SIMD_CFUNC simd_int8 simd_make_int8_undef(simd_int2 other) { 3808 simd_int8 result; 3809 result.xy = other; 3810 return result; 3811 } 3812 3813 /*! @abstract Zero-extends `other` to form a vector of eight 32-bit signed 3814 * (twos-complement) integers. */ 3815 static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int3 other) { 3816 simd_int8 result = 0; 3817 result.xyz = other; 3818 return result; 3819 } 3820 3821 /*! @abstract Extends `other` to form a vector of eight 32-bit signed (twos- 3822 * complement) integers. The contents of the newly-created vector lanes are 3823 * unspecified. */ 3824 static inline SIMD_CFUNC simd_int8 simd_make_int8_undef(simd_int3 other) { 3825 simd_int8 result; 3826 result.xyz = other; 3827 return result; 3828 } 3829 3830 /*! @abstract Zero-extends `other` to form a vector of eight 32-bit signed 3831 * (twos-complement) integers. */ 3832 static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int4 other) { 3833 simd_int8 result = 0; 3834 result.xyzw = other; 3835 return result; 3836 } 3837 3838 /*! @abstract Extends `other` to form a vector of eight 32-bit signed (twos- 3839 * complement) integers. The contents of the newly-created vector lanes are 3840 * unspecified. */ 3841 static inline SIMD_CFUNC simd_int8 simd_make_int8_undef(simd_int4 other) { 3842 simd_int8 result; 3843 result.xyzw = other; 3844 return result; 3845 } 3846 3847 /*! @abstract Returns `other` unmodified. This function is a convenience for 3848 * templated and autogenerated code. */ 3849 static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int8 other) { 3850 return other; 3851 } 3852 3853 /*! @abstract Truncates `other` to form a vector of eight 32-bit signed 3854 * (twos-complement) integers. */ 3855 static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int16 other) { 3856 return simd_make_int8(other.lo); 3857 } 3858 3859 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit 3860 * signed (twos-complement) integers. */ 3861 static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int8 lo, simd_int8 hi) { 3862 simd_int16 result; 3863 result.lo = lo; 3864 result.hi = hi; 3865 return result; 3866 } 3867 3868 /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit signed 3869 * (twos-complement) integers. */ 3870 static inline SIMD_CFUNC simd_int16 simd_make_int16(int other) { 3871 simd_int16 result = 0; 3872 result.x = other; 3873 return result; 3874 } 3875 3876 /*! @abstract Extends `other` to form a vector of sixteen 32-bit signed 3877 * (twos-complement) integers. The contents of the newly-created vector 3878 * lanes are unspecified. */ 3879 static inline SIMD_CFUNC simd_int16 simd_make_int16_undef(int other) { 3880 simd_int16 result; 3881 result.x = other; 3882 return result; 3883 } 3884 3885 /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit signed 3886 * (twos-complement) integers. */ 3887 static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int2 other) { 3888 simd_int16 result = 0; 3889 result.xy = other; 3890 return result; 3891 } 3892 3893 /*! @abstract Extends `other` to form a vector of sixteen 32-bit signed 3894 * (twos-complement) integers. The contents of the newly-created vector 3895 * lanes are unspecified. */ 3896 static inline SIMD_CFUNC simd_int16 simd_make_int16_undef(simd_int2 other) { 3897 simd_int16 result; 3898 result.xy = other; 3899 return result; 3900 } 3901 3902 /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit signed 3903 * (twos-complement) integers. */ 3904 static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int3 other) { 3905 simd_int16 result = 0; 3906 result.xyz = other; 3907 return result; 3908 } 3909 3910 /*! @abstract Extends `other` to form a vector of sixteen 32-bit signed 3911 * (twos-complement) integers. The contents of the newly-created vector 3912 * lanes are unspecified. */ 3913 static inline SIMD_CFUNC simd_int16 simd_make_int16_undef(simd_int3 other) { 3914 simd_int16 result; 3915 result.xyz = other; 3916 return result; 3917 } 3918 3919 /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit signed 3920 * (twos-complement) integers. */ 3921 static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int4 other) { 3922 simd_int16 result = 0; 3923 result.xyzw = other; 3924 return result; 3925 } 3926 3927 /*! @abstract Extends `other` to form a vector of sixteen 32-bit signed 3928 * (twos-complement) integers. The contents of the newly-created vector 3929 * lanes are unspecified. */ 3930 static inline SIMD_CFUNC simd_int16 simd_make_int16_undef(simd_int4 other) { 3931 simd_int16 result; 3932 result.xyzw = other; 3933 return result; 3934 } 3935 3936 /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit signed 3937 * (twos-complement) integers. */ 3938 static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int8 other) { 3939 simd_int16 result = 0; 3940 result.lo = simd_make_int8(other); 3941 return result; 3942 } 3943 3944 /*! @abstract Extends `other` to form a vector of sixteen 32-bit signed 3945 * (twos-complement) integers. The contents of the newly-created vector 3946 * lanes are unspecified. */ 3947 static inline SIMD_CFUNC simd_int16 simd_make_int16_undef(simd_int8 other) { 3948 simd_int16 result; 3949 result.lo = simd_make_int8(other); 3950 return result; 3951 } 3952 3953 /*! @abstract Returns `other` unmodified. This function is a convenience for 3954 * templated and autogenerated code. */ 3955 static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int16 other) { 3956 return other; 3957 } 3958 3959 /*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit 3960 * unsigned integers. */ 3961 static inline SIMD_CFUNC simd_uint2 simd_make_uint2(unsigned int x, unsigned int y) { 3962 simd_uint2 result; 3963 result.x = x; 3964 result.y = y; 3965 return result; 3966 } 3967 3968 /*! @abstract Zero-extends `other` to form a vector of two 32-bit unsigned 3969 * integers. */ 3970 static inline SIMD_CFUNC simd_uint2 simd_make_uint2(unsigned int other) { 3971 simd_uint2 result = 0; 3972 result.x = other; 3973 return result; 3974 } 3975 3976 /*! @abstract Extends `other` to form a vector of two 32-bit unsigned 3977 * integers. The contents of the newly-created vector lanes are 3978 * unspecified. */ 3979 static inline SIMD_CFUNC simd_uint2 simd_make_uint2_undef(unsigned int other) { 3980 simd_uint2 result; 3981 result.x = other; 3982 return result; 3983 } 3984 3985 /*! @abstract Returns `other` unmodified. This function is a convenience for 3986 * templated and autogenerated code. */ 3987 static inline SIMD_CFUNC simd_uint2 simd_make_uint2(simd_uint2 other) { 3988 return other; 3989 } 3990 3991 /*! @abstract Truncates `other` to form a vector of two 32-bit unsigned 3992 * integers. */ 3993 static inline SIMD_CFUNC simd_uint2 simd_make_uint2(simd_uint3 other) { 3994 return other.xy; 3995 } 3996 3997 /*! @abstract Truncates `other` to form a vector of two 32-bit unsigned 3998 * integers. */ 3999 static inline SIMD_CFUNC simd_uint2 simd_make_uint2(simd_uint4 other) { 4000 return other.xy; 4001 } 4002 4003 /*! @abstract Truncates `other` to form a vector of two 32-bit unsigned 4004 * integers. */ 4005 static inline SIMD_CFUNC simd_uint2 simd_make_uint2(simd_uint8 other) { 4006 return other.xy; 4007 } 4008 4009 /*! @abstract Truncates `other` to form a vector of two 32-bit unsigned 4010 * integers. */ 4011 static inline SIMD_CFUNC simd_uint2 simd_make_uint2(simd_uint16 other) { 4012 return other.xy; 4013 } 4014 4015 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit 4016 * unsigned integers. */ 4017 static inline SIMD_CFUNC simd_uint3 simd_make_uint3(unsigned int x, unsigned int y, unsigned int z) { 4018 simd_uint3 result; 4019 result.x = x; 4020 result.y = y; 4021 result.z = z; 4022 return result; 4023 } 4024 4025 /*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit 4026 * unsigned integers. */ 4027 static inline SIMD_CFUNC simd_uint3 simd_make_uint3(unsigned int x, simd_uint2 yz) { 4028 simd_uint3 result; 4029 result.x = x; 4030 result.yz = yz; 4031 return result; 4032 } 4033 4034 /*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit 4035 * unsigned integers. */ 4036 static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint2 xy, unsigned int z) { 4037 simd_uint3 result; 4038 result.xy = xy; 4039 result.z = z; 4040 return result; 4041 } 4042 4043 /*! @abstract Zero-extends `other` to form a vector of three 32-bit unsigned 4044 * integers. */ 4045 static inline SIMD_CFUNC simd_uint3 simd_make_uint3(unsigned int other) { 4046 simd_uint3 result = 0; 4047 result.x = other; 4048 return result; 4049 } 4050 4051 /*! @abstract Extends `other` to form a vector of three 32-bit unsigned 4052 * integers. The contents of the newly-created vector lanes are 4053 * unspecified. */ 4054 static inline SIMD_CFUNC simd_uint3 simd_make_uint3_undef(unsigned int other) { 4055 simd_uint3 result; 4056 result.x = other; 4057 return result; 4058 } 4059 4060 /*! @abstract Zero-extends `other` to form a vector of three 32-bit unsigned 4061 * integers. */ 4062 static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint2 other) { 4063 simd_uint3 result = 0; 4064 result.xy = other; 4065 return result; 4066 } 4067 4068 /*! @abstract Extends `other` to form a vector of three 32-bit unsigned 4069 * integers. The contents of the newly-created vector lanes are 4070 * unspecified. */ 4071 static inline SIMD_CFUNC simd_uint3 simd_make_uint3_undef(simd_uint2 other) { 4072 simd_uint3 result; 4073 result.xy = other; 4074 return result; 4075 } 4076 4077 /*! @abstract Returns `other` unmodified. This function is a convenience for 4078 * templated and autogenerated code. */ 4079 static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint3 other) { 4080 return other; 4081 } 4082 4083 /*! @abstract Truncates `other` to form a vector of three 32-bit unsigned 4084 * integers. */ 4085 static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint4 other) { 4086 return other.xyz; 4087 } 4088 4089 /*! @abstract Truncates `other` to form a vector of three 32-bit unsigned 4090 * integers. */ 4091 static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint8 other) { 4092 return other.xyz; 4093 } 4094 4095 /*! @abstract Truncates `other` to form a vector of three 32-bit unsigned 4096 * integers. */ 4097 static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint16 other) { 4098 return other.xyz; 4099 } 4100 4101 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 4102 * 32-bit unsigned integers. */ 4103 static inline SIMD_CFUNC simd_uint4 simd_make_uint4(unsigned int x, unsigned int y, unsigned int z, unsigned int w) { 4104 simd_uint4 result; 4105 result.x = x; 4106 result.y = y; 4107 result.z = z; 4108 result.w = w; 4109 return result; 4110 } 4111 4112 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit 4113 * unsigned integers. */ 4114 static inline SIMD_CFUNC simd_uint4 simd_make_uint4(unsigned int x, unsigned int y, simd_uint2 zw) { 4115 simd_uint4 result; 4116 result.x = x; 4117 result.y = y; 4118 result.zw = zw; 4119 return result; 4120 } 4121 4122 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit 4123 * unsigned integers. */ 4124 static inline SIMD_CFUNC simd_uint4 simd_make_uint4(unsigned int x, simd_uint2 yz, unsigned int w) { 4125 simd_uint4 result; 4126 result.x = x; 4127 result.yz = yz; 4128 result.w = w; 4129 return result; 4130 } 4131 4132 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit 4133 * unsigned integers. */ 4134 static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint2 xy, unsigned int z, unsigned int w) { 4135 simd_uint4 result; 4136 result.xy = xy; 4137 result.z = z; 4138 result.w = w; 4139 return result; 4140 } 4141 4142 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit 4143 * unsigned integers. */ 4144 static inline SIMD_CFUNC simd_uint4 simd_make_uint4(unsigned int x, simd_uint3 yzw) { 4145 simd_uint4 result; 4146 result.x = x; 4147 result.yzw = yzw; 4148 return result; 4149 } 4150 4151 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit 4152 * unsigned integers. */ 4153 static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint2 xy, simd_uint2 zw) { 4154 simd_uint4 result; 4155 result.xy = xy; 4156 result.zw = zw; 4157 return result; 4158 } 4159 4160 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit 4161 * unsigned integers. */ 4162 static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint3 xyz, unsigned int w) { 4163 simd_uint4 result; 4164 result.xyz = xyz; 4165 result.w = w; 4166 return result; 4167 } 4168 4169 /*! @abstract Zero-extends `other` to form a vector of four 32-bit unsigned 4170 * integers. */ 4171 static inline SIMD_CFUNC simd_uint4 simd_make_uint4(unsigned int other) { 4172 simd_uint4 result = 0; 4173 result.x = other; 4174 return result; 4175 } 4176 4177 /*! @abstract Extends `other` to form a vector of four 32-bit unsigned 4178 * integers. The contents of the newly-created vector lanes are 4179 * unspecified. */ 4180 static inline SIMD_CFUNC simd_uint4 simd_make_uint4_undef(unsigned int other) { 4181 simd_uint4 result; 4182 result.x = other; 4183 return result; 4184 } 4185 4186 /*! @abstract Zero-extends `other` to form a vector of four 32-bit unsigned 4187 * integers. */ 4188 static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint2 other) { 4189 simd_uint4 result = 0; 4190 result.xy = other; 4191 return result; 4192 } 4193 4194 /*! @abstract Extends `other` to form a vector of four 32-bit unsigned 4195 * integers. The contents of the newly-created vector lanes are 4196 * unspecified. */ 4197 static inline SIMD_CFUNC simd_uint4 simd_make_uint4_undef(simd_uint2 other) { 4198 simd_uint4 result; 4199 result.xy = other; 4200 return result; 4201 } 4202 4203 /*! @abstract Zero-extends `other` to form a vector of four 32-bit unsigned 4204 * integers. */ 4205 static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint3 other) { 4206 simd_uint4 result = 0; 4207 result.xyz = other; 4208 return result; 4209 } 4210 4211 /*! @abstract Extends `other` to form a vector of four 32-bit unsigned 4212 * integers. The contents of the newly-created vector lanes are 4213 * unspecified. */ 4214 static inline SIMD_CFUNC simd_uint4 simd_make_uint4_undef(simd_uint3 other) { 4215 simd_uint4 result; 4216 result.xyz = other; 4217 return result; 4218 } 4219 4220 /*! @abstract Returns `other` unmodified. This function is a convenience for 4221 * templated and autogenerated code. */ 4222 static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint4 other) { 4223 return other; 4224 } 4225 4226 /*! @abstract Truncates `other` to form a vector of four 32-bit unsigned 4227 * integers. */ 4228 static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint8 other) { 4229 return other.xyzw; 4230 } 4231 4232 /*! @abstract Truncates `other` to form a vector of four 32-bit unsigned 4233 * integers. */ 4234 static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint16 other) { 4235 return other.xyzw; 4236 } 4237 4238 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit 4239 * unsigned integers. */ 4240 static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint4 lo, simd_uint4 hi) { 4241 simd_uint8 result; 4242 result.lo = lo; 4243 result.hi = hi; 4244 return result; 4245 } 4246 4247 /*! @abstract Zero-extends `other` to form a vector of eight 32-bit unsigned 4248 * integers. */ 4249 static inline SIMD_CFUNC simd_uint8 simd_make_uint8(unsigned int other) { 4250 simd_uint8 result = 0; 4251 result.x = other; 4252 return result; 4253 } 4254 4255 /*! @abstract Extends `other` to form a vector of eight 32-bit unsigned 4256 * integers. The contents of the newly-created vector lanes are 4257 * unspecified. */ 4258 static inline SIMD_CFUNC simd_uint8 simd_make_uint8_undef(unsigned int other) { 4259 simd_uint8 result; 4260 result.x = other; 4261 return result; 4262 } 4263 4264 /*! @abstract Zero-extends `other` to form a vector of eight 32-bit unsigned 4265 * integers. */ 4266 static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint2 other) { 4267 simd_uint8 result = 0; 4268 result.xy = other; 4269 return result; 4270 } 4271 4272 /*! @abstract Extends `other` to form a vector of eight 32-bit unsigned 4273 * integers. The contents of the newly-created vector lanes are 4274 * unspecified. */ 4275 static inline SIMD_CFUNC simd_uint8 simd_make_uint8_undef(simd_uint2 other) { 4276 simd_uint8 result; 4277 result.xy = other; 4278 return result; 4279 } 4280 4281 /*! @abstract Zero-extends `other` to form a vector of eight 32-bit unsigned 4282 * integers. */ 4283 static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint3 other) { 4284 simd_uint8 result = 0; 4285 result.xyz = other; 4286 return result; 4287 } 4288 4289 /*! @abstract Extends `other` to form a vector of eight 32-bit unsigned 4290 * integers. The contents of the newly-created vector lanes are 4291 * unspecified. */ 4292 static inline SIMD_CFUNC simd_uint8 simd_make_uint8_undef(simd_uint3 other) { 4293 simd_uint8 result; 4294 result.xyz = other; 4295 return result; 4296 } 4297 4298 /*! @abstract Zero-extends `other` to form a vector of eight 32-bit unsigned 4299 * integers. */ 4300 static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint4 other) { 4301 simd_uint8 result = 0; 4302 result.xyzw = other; 4303 return result; 4304 } 4305 4306 /*! @abstract Extends `other` to form a vector of eight 32-bit unsigned 4307 * integers. The contents of the newly-created vector lanes are 4308 * unspecified. */ 4309 static inline SIMD_CFUNC simd_uint8 simd_make_uint8_undef(simd_uint4 other) { 4310 simd_uint8 result; 4311 result.xyzw = other; 4312 return result; 4313 } 4314 4315 /*! @abstract Returns `other` unmodified. This function is a convenience for 4316 * templated and autogenerated code. */ 4317 static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint8 other) { 4318 return other; 4319 } 4320 4321 /*! @abstract Truncates `other` to form a vector of eight 32-bit unsigned 4322 * integers. */ 4323 static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint16 other) { 4324 return simd_make_uint8(other.lo); 4325 } 4326 4327 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit 4328 * unsigned integers. */ 4329 static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint8 lo, simd_uint8 hi) { 4330 simd_uint16 result; 4331 result.lo = lo; 4332 result.hi = hi; 4333 return result; 4334 } 4335 4336 /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit 4337 * unsigned integers. */ 4338 static inline SIMD_CFUNC simd_uint16 simd_make_uint16(unsigned int other) { 4339 simd_uint16 result = 0; 4340 result.x = other; 4341 return result; 4342 } 4343 4344 /*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned 4345 * integers. The contents of the newly-created vector lanes are 4346 * unspecified. */ 4347 static inline SIMD_CFUNC simd_uint16 simd_make_uint16_undef(unsigned int other) { 4348 simd_uint16 result; 4349 result.x = other; 4350 return result; 4351 } 4352 4353 /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit 4354 * unsigned integers. */ 4355 static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint2 other) { 4356 simd_uint16 result = 0; 4357 result.xy = other; 4358 return result; 4359 } 4360 4361 /*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned 4362 * integers. The contents of the newly-created vector lanes are 4363 * unspecified. */ 4364 static inline SIMD_CFUNC simd_uint16 simd_make_uint16_undef(simd_uint2 other) { 4365 simd_uint16 result; 4366 result.xy = other; 4367 return result; 4368 } 4369 4370 /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit 4371 * unsigned integers. */ 4372 static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint3 other) { 4373 simd_uint16 result = 0; 4374 result.xyz = other; 4375 return result; 4376 } 4377 4378 /*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned 4379 * integers. The contents of the newly-created vector lanes are 4380 * unspecified. */ 4381 static inline SIMD_CFUNC simd_uint16 simd_make_uint16_undef(simd_uint3 other) { 4382 simd_uint16 result; 4383 result.xyz = other; 4384 return result; 4385 } 4386 4387 /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit 4388 * unsigned integers. */ 4389 static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint4 other) { 4390 simd_uint16 result = 0; 4391 result.xyzw = other; 4392 return result; 4393 } 4394 4395 /*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned 4396 * integers. The contents of the newly-created vector lanes are 4397 * unspecified. */ 4398 static inline SIMD_CFUNC simd_uint16 simd_make_uint16_undef(simd_uint4 other) { 4399 simd_uint16 result; 4400 result.xyzw = other; 4401 return result; 4402 } 4403 4404 /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit 4405 * unsigned integers. */ 4406 static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint8 other) { 4407 simd_uint16 result = 0; 4408 result.lo = simd_make_uint8(other); 4409 return result; 4410 } 4411 4412 /*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned 4413 * integers. The contents of the newly-created vector lanes are 4414 * unspecified. */ 4415 static inline SIMD_CFUNC simd_uint16 simd_make_uint16_undef(simd_uint8 other) { 4416 simd_uint16 result; 4417 result.lo = simd_make_uint8(other); 4418 return result; 4419 } 4420 4421 /*! @abstract Returns `other` unmodified. This function is a convenience for 4422 * templated and autogenerated code. */ 4423 static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint16 other) { 4424 return other; 4425 } 4426 4427 /*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit 4428 * floating-point numbers. */ 4429 static inline SIMD_CFUNC simd_float2 simd_make_float2(float x, float y) { 4430 simd_float2 result; 4431 result.x = x; 4432 result.y = y; 4433 return result; 4434 } 4435 4436 /*! @abstract Zero-extends `other` to form a vector of two 32-bit floating- 4437 * point numbers. */ 4438 static inline SIMD_CFUNC simd_float2 simd_make_float2(float other) { 4439 simd_float2 result = 0; 4440 result.x = other; 4441 return result; 4442 } 4443 4444 /*! @abstract Extends `other` to form a vector of two 32-bit floating-point 4445 * numbers. The contents of the newly-created vector lanes are unspecified. */ 4446 static inline SIMD_CFUNC simd_float2 simd_make_float2_undef(float other) { 4447 simd_float2 result; 4448 result.x = other; 4449 return result; 4450 } 4451 4452 /*! @abstract Returns `other` unmodified. This function is a convenience for 4453 * templated and autogenerated code. */ 4454 static inline SIMD_CFUNC simd_float2 simd_make_float2(simd_float2 other) { 4455 return other; 4456 } 4457 4458 /*! @abstract Truncates `other` to form a vector of two 32-bit floating- 4459 * point numbers. */ 4460 static inline SIMD_CFUNC simd_float2 simd_make_float2(simd_float3 other) { 4461 return other.xy; 4462 } 4463 4464 /*! @abstract Truncates `other` to form a vector of two 32-bit floating- 4465 * point numbers. */ 4466 static inline SIMD_CFUNC simd_float2 simd_make_float2(simd_float4 other) { 4467 return other.xy; 4468 } 4469 4470 /*! @abstract Truncates `other` to form a vector of two 32-bit floating- 4471 * point numbers. */ 4472 static inline SIMD_CFUNC simd_float2 simd_make_float2(simd_float8 other) { 4473 return other.xy; 4474 } 4475 4476 /*! @abstract Truncates `other` to form a vector of two 32-bit floating- 4477 * point numbers. */ 4478 static inline SIMD_CFUNC simd_float2 simd_make_float2(simd_float16 other) { 4479 return other.xy; 4480 } 4481 4482 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit 4483 * floating-point numbers. */ 4484 static inline SIMD_CFUNC simd_float3 simd_make_float3(float x, float y, float z) { 4485 simd_float3 result; 4486 result.x = x; 4487 result.y = y; 4488 result.z = z; 4489 return result; 4490 } 4491 4492 /*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit 4493 * floating-point numbers. */ 4494 static inline SIMD_CFUNC simd_float3 simd_make_float3(float x, simd_float2 yz) { 4495 simd_float3 result; 4496 result.x = x; 4497 result.yz = yz; 4498 return result; 4499 } 4500 4501 /*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit 4502 * floating-point numbers. */ 4503 static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float2 xy, float z) { 4504 simd_float3 result; 4505 result.xy = xy; 4506 result.z = z; 4507 return result; 4508 } 4509 4510 /*! @abstract Zero-extends `other` to form a vector of three 32-bit 4511 * floating-point numbers. */ 4512 static inline SIMD_CFUNC simd_float3 simd_make_float3(float other) { 4513 simd_float3 result = 0; 4514 result.x = other; 4515 return result; 4516 } 4517 4518 /*! @abstract Extends `other` to form a vector of three 32-bit floating- 4519 * point numbers. The contents of the newly-created vector lanes are 4520 * unspecified. */ 4521 static inline SIMD_CFUNC simd_float3 simd_make_float3_undef(float other) { 4522 simd_float3 result; 4523 result.x = other; 4524 return result; 4525 } 4526 4527 /*! @abstract Zero-extends `other` to form a vector of three 32-bit 4528 * floating-point numbers. */ 4529 static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float2 other) { 4530 simd_float3 result = 0; 4531 result.xy = other; 4532 return result; 4533 } 4534 4535 /*! @abstract Extends `other` to form a vector of three 32-bit floating- 4536 * point numbers. The contents of the newly-created vector lanes are 4537 * unspecified. */ 4538 static inline SIMD_CFUNC simd_float3 simd_make_float3_undef(simd_float2 other) { 4539 simd_float3 result; 4540 result.xy = other; 4541 return result; 4542 } 4543 4544 /*! @abstract Returns `other` unmodified. This function is a convenience for 4545 * templated and autogenerated code. */ 4546 static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float3 other) { 4547 return other; 4548 } 4549 4550 /*! @abstract Truncates `other` to form a vector of three 32-bit floating- 4551 * point numbers. */ 4552 static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float4 other) { 4553 return other.xyz; 4554 } 4555 4556 /*! @abstract Truncates `other` to form a vector of three 32-bit floating- 4557 * point numbers. */ 4558 static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float8 other) { 4559 return other.xyz; 4560 } 4561 4562 /*! @abstract Truncates `other` to form a vector of three 32-bit floating- 4563 * point numbers. */ 4564 static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float16 other) { 4565 return other.xyz; 4566 } 4567 4568 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 4569 * 32-bit floating-point numbers. */ 4570 static inline SIMD_CFUNC simd_float4 simd_make_float4(float x, float y, float z, float w) { 4571 simd_float4 result; 4572 result.x = x; 4573 result.y = y; 4574 result.z = z; 4575 result.w = w; 4576 return result; 4577 } 4578 4579 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit 4580 * floating-point numbers. */ 4581 static inline SIMD_CFUNC simd_float4 simd_make_float4(float x, float y, simd_float2 zw) { 4582 simd_float4 result; 4583 result.x = x; 4584 result.y = y; 4585 result.zw = zw; 4586 return result; 4587 } 4588 4589 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit 4590 * floating-point numbers. */ 4591 static inline SIMD_CFUNC simd_float4 simd_make_float4(float x, simd_float2 yz, float w) { 4592 simd_float4 result; 4593 result.x = x; 4594 result.yz = yz; 4595 result.w = w; 4596 return result; 4597 } 4598 4599 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit 4600 * floating-point numbers. */ 4601 static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float2 xy, float z, float w) { 4602 simd_float4 result; 4603 result.xy = xy; 4604 result.z = z; 4605 result.w = w; 4606 return result; 4607 } 4608 4609 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit 4610 * floating-point numbers. */ 4611 static inline SIMD_CFUNC simd_float4 simd_make_float4(float x, simd_float3 yzw) { 4612 simd_float4 result; 4613 result.x = x; 4614 result.yzw = yzw; 4615 return result; 4616 } 4617 4618 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit 4619 * floating-point numbers. */ 4620 static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float2 xy, simd_float2 zw) { 4621 simd_float4 result; 4622 result.xy = xy; 4623 result.zw = zw; 4624 return result; 4625 } 4626 4627 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit 4628 * floating-point numbers. */ 4629 static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float3 xyz, float w) { 4630 simd_float4 result; 4631 result.xyz = xyz; 4632 result.w = w; 4633 return result; 4634 } 4635 4636 /*! @abstract Zero-extends `other` to form a vector of four 32-bit floating- 4637 * point numbers. */ 4638 static inline SIMD_CFUNC simd_float4 simd_make_float4(float other) { 4639 simd_float4 result = 0; 4640 result.x = other; 4641 return result; 4642 } 4643 4644 /*! @abstract Extends `other` to form a vector of four 32-bit floating-point 4645 * numbers. The contents of the newly-created vector lanes are unspecified. */ 4646 static inline SIMD_CFUNC simd_float4 simd_make_float4_undef(float other) { 4647 simd_float4 result; 4648 result.x = other; 4649 return result; 4650 } 4651 4652 /*! @abstract Zero-extends `other` to form a vector of four 32-bit floating- 4653 * point numbers. */ 4654 static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float2 other) { 4655 simd_float4 result = 0; 4656 result.xy = other; 4657 return result; 4658 } 4659 4660 /*! @abstract Extends `other` to form a vector of four 32-bit floating-point 4661 * numbers. The contents of the newly-created vector lanes are unspecified. */ 4662 static inline SIMD_CFUNC simd_float4 simd_make_float4_undef(simd_float2 other) { 4663 simd_float4 result; 4664 result.xy = other; 4665 return result; 4666 } 4667 4668 /*! @abstract Zero-extends `other` to form a vector of four 32-bit floating- 4669 * point numbers. */ 4670 static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float3 other) { 4671 simd_float4 result = 0; 4672 result.xyz = other; 4673 return result; 4674 } 4675 4676 /*! @abstract Extends `other` to form a vector of four 32-bit floating-point 4677 * numbers. The contents of the newly-created vector lanes are unspecified. */ 4678 static inline SIMD_CFUNC simd_float4 simd_make_float4_undef(simd_float3 other) { 4679 simd_float4 result; 4680 result.xyz = other; 4681 return result; 4682 } 4683 4684 /*! @abstract Returns `other` unmodified. This function is a convenience for 4685 * templated and autogenerated code. */ 4686 static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float4 other) { 4687 return other; 4688 } 4689 4690 /*! @abstract Truncates `other` to form a vector of four 32-bit floating- 4691 * point numbers. */ 4692 static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float8 other) { 4693 return other.xyzw; 4694 } 4695 4696 /*! @abstract Truncates `other` to form a vector of four 32-bit floating- 4697 * point numbers. */ 4698 static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float16 other) { 4699 return other.xyzw; 4700 } 4701 4702 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit 4703 * floating-point numbers. */ 4704 static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float4 lo, simd_float4 hi) { 4705 simd_float8 result; 4706 result.lo = lo; 4707 result.hi = hi; 4708 return result; 4709 } 4710 4711 /*! @abstract Zero-extends `other` to form a vector of eight 32-bit 4712 * floating-point numbers. */ 4713 static inline SIMD_CFUNC simd_float8 simd_make_float8(float other) { 4714 simd_float8 result = 0; 4715 result.x = other; 4716 return result; 4717 } 4718 4719 /*! @abstract Extends `other` to form a vector of eight 32-bit floating- 4720 * point numbers. The contents of the newly-created vector lanes are 4721 * unspecified. */ 4722 static inline SIMD_CFUNC simd_float8 simd_make_float8_undef(float other) { 4723 simd_float8 result; 4724 result.x = other; 4725 return result; 4726 } 4727 4728 /*! @abstract Zero-extends `other` to form a vector of eight 32-bit 4729 * floating-point numbers. */ 4730 static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float2 other) { 4731 simd_float8 result = 0; 4732 result.xy = other; 4733 return result; 4734 } 4735 4736 /*! @abstract Extends `other` to form a vector of eight 32-bit floating- 4737 * point numbers. The contents of the newly-created vector lanes are 4738 * unspecified. */ 4739 static inline SIMD_CFUNC simd_float8 simd_make_float8_undef(simd_float2 other) { 4740 simd_float8 result; 4741 result.xy = other; 4742 return result; 4743 } 4744 4745 /*! @abstract Zero-extends `other` to form a vector of eight 32-bit 4746 * floating-point numbers. */ 4747 static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float3 other) { 4748 simd_float8 result = 0; 4749 result.xyz = other; 4750 return result; 4751 } 4752 4753 /*! @abstract Extends `other` to form a vector of eight 32-bit floating- 4754 * point numbers. The contents of the newly-created vector lanes are 4755 * unspecified. */ 4756 static inline SIMD_CFUNC simd_float8 simd_make_float8_undef(simd_float3 other) { 4757 simd_float8 result; 4758 result.xyz = other; 4759 return result; 4760 } 4761 4762 /*! @abstract Zero-extends `other` to form a vector of eight 32-bit 4763 * floating-point numbers. */ 4764 static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float4 other) { 4765 simd_float8 result = 0; 4766 result.xyzw = other; 4767 return result; 4768 } 4769 4770 /*! @abstract Extends `other` to form a vector of eight 32-bit floating- 4771 * point numbers. The contents of the newly-created vector lanes are 4772 * unspecified. */ 4773 static inline SIMD_CFUNC simd_float8 simd_make_float8_undef(simd_float4 other) { 4774 simd_float8 result; 4775 result.xyzw = other; 4776 return result; 4777 } 4778 4779 /*! @abstract Returns `other` unmodified. This function is a convenience for 4780 * templated and autogenerated code. */ 4781 static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float8 other) { 4782 return other; 4783 } 4784 4785 /*! @abstract Truncates `other` to form a vector of eight 32-bit floating- 4786 * point numbers. */ 4787 static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float16 other) { 4788 return simd_make_float8(other.lo); 4789 } 4790 4791 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit 4792 * floating-point numbers. */ 4793 static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float8 lo, simd_float8 hi) { 4794 simd_float16 result; 4795 result.lo = lo; 4796 result.hi = hi; 4797 return result; 4798 } 4799 4800 /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit 4801 * floating-point numbers. */ 4802 static inline SIMD_CFUNC simd_float16 simd_make_float16(float other) { 4803 simd_float16 result = 0; 4804 result.x = other; 4805 return result; 4806 } 4807 4808 /*! @abstract Extends `other` to form a vector of sixteen 32-bit floating- 4809 * point numbers. The contents of the newly-created vector lanes are 4810 * unspecified. */ 4811 static inline SIMD_CFUNC simd_float16 simd_make_float16_undef(float other) { 4812 simd_float16 result; 4813 result.x = other; 4814 return result; 4815 } 4816 4817 /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit 4818 * floating-point numbers. */ 4819 static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float2 other) { 4820 simd_float16 result = 0; 4821 result.xy = other; 4822 return result; 4823 } 4824 4825 /*! @abstract Extends `other` to form a vector of sixteen 32-bit floating- 4826 * point numbers. The contents of the newly-created vector lanes are 4827 * unspecified. */ 4828 static inline SIMD_CFUNC simd_float16 simd_make_float16_undef(simd_float2 other) { 4829 simd_float16 result; 4830 result.xy = other; 4831 return result; 4832 } 4833 4834 /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit 4835 * floating-point numbers. */ 4836 static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float3 other) { 4837 simd_float16 result = 0; 4838 result.xyz = other; 4839 return result; 4840 } 4841 4842 /*! @abstract Extends `other` to form a vector of sixteen 32-bit floating- 4843 * point numbers. The contents of the newly-created vector lanes are 4844 * unspecified. */ 4845 static inline SIMD_CFUNC simd_float16 simd_make_float16_undef(simd_float3 other) { 4846 simd_float16 result; 4847 result.xyz = other; 4848 return result; 4849 } 4850 4851 /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit 4852 * floating-point numbers. */ 4853 static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float4 other) { 4854 simd_float16 result = 0; 4855 result.xyzw = other; 4856 return result; 4857 } 4858 4859 /*! @abstract Extends `other` to form a vector of sixteen 32-bit floating- 4860 * point numbers. The contents of the newly-created vector lanes are 4861 * unspecified. */ 4862 static inline SIMD_CFUNC simd_float16 simd_make_float16_undef(simd_float4 other) { 4863 simd_float16 result; 4864 result.xyzw = other; 4865 return result; 4866 } 4867 4868 /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit 4869 * floating-point numbers. */ 4870 static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float8 other) { 4871 simd_float16 result = 0; 4872 result.lo = simd_make_float8(other); 4873 return result; 4874 } 4875 4876 /*! @abstract Extends `other` to form a vector of sixteen 32-bit floating- 4877 * point numbers. The contents of the newly-created vector lanes are 4878 * unspecified. */ 4879 static inline SIMD_CFUNC simd_float16 simd_make_float16_undef(simd_float8 other) { 4880 simd_float16 result; 4881 result.lo = simd_make_float8(other); 4882 return result; 4883 } 4884 4885 /*! @abstract Returns `other` unmodified. This function is a convenience for 4886 * templated and autogenerated code. */ 4887 static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float16 other) { 4888 return other; 4889 } 4890 4891 /*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit signed 4892 * (twos-complement) integers. */ 4893 static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long1 x, simd_long1 y) { 4894 simd_long2 result; 4895 result.x = x; 4896 result.y = y; 4897 return result; 4898 } 4899 4900 /*! @abstract Zero-extends `other` to form a vector of two 64-bit signed 4901 * (twos-complement) integers. */ 4902 static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long1 other) { 4903 simd_long2 result = 0; 4904 result.x = other; 4905 return result; 4906 } 4907 4908 /*! @abstract Extends `other` to form a vector of two 64-bit signed (twos- 4909 * complement) integers. The contents of the newly-created vector lanes are 4910 * unspecified. */ 4911 static inline SIMD_CFUNC simd_long2 simd_make_long2_undef(simd_long1 other) { 4912 simd_long2 result; 4913 result.x = other; 4914 return result; 4915 } 4916 4917 /*! @abstract Returns `other` unmodified. This function is a convenience for 4918 * templated and autogenerated code. */ 4919 static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long2 other) { 4920 return other; 4921 } 4922 4923 /*! @abstract Truncates `other` to form a vector of two 64-bit signed (twos- 4924 * complement) integers. */ 4925 static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long3 other) { 4926 return other.xy; 4927 } 4928 4929 /*! @abstract Truncates `other` to form a vector of two 64-bit signed (twos- 4930 * complement) integers. */ 4931 static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long4 other) { 4932 return other.xy; 4933 } 4934 4935 /*! @abstract Truncates `other` to form a vector of two 64-bit signed (twos- 4936 * complement) integers. */ 4937 static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long8 other) { 4938 return other.xy; 4939 } 4940 4941 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit 4942 * signed (twos-complement) integers. */ 4943 static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long1 x, simd_long1 y, simd_long1 z) { 4944 simd_long3 result; 4945 result.x = x; 4946 result.y = y; 4947 result.z = z; 4948 return result; 4949 } 4950 4951 /*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit 4952 * signed (twos-complement) integers. */ 4953 static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long1 x, simd_long2 yz) { 4954 simd_long3 result; 4955 result.x = x; 4956 result.yz = yz; 4957 return result; 4958 } 4959 4960 /*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit 4961 * signed (twos-complement) integers. */ 4962 static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long2 xy, simd_long1 z) { 4963 simd_long3 result; 4964 result.xy = xy; 4965 result.z = z; 4966 return result; 4967 } 4968 4969 /*! @abstract Zero-extends `other` to form a vector of three 64-bit signed 4970 * (twos-complement) integers. */ 4971 static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long1 other) { 4972 simd_long3 result = 0; 4973 result.x = other; 4974 return result; 4975 } 4976 4977 /*! @abstract Extends `other` to form a vector of three 64-bit signed (twos- 4978 * complement) integers. The contents of the newly-created vector lanes are 4979 * unspecified. */ 4980 static inline SIMD_CFUNC simd_long3 simd_make_long3_undef(simd_long1 other) { 4981 simd_long3 result; 4982 result.x = other; 4983 return result; 4984 } 4985 4986 /*! @abstract Zero-extends `other` to form a vector of three 64-bit signed 4987 * (twos-complement) integers. */ 4988 static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long2 other) { 4989 simd_long3 result = 0; 4990 result.xy = other; 4991 return result; 4992 } 4993 4994 /*! @abstract Extends `other` to form a vector of three 64-bit signed (twos- 4995 * complement) integers. The contents of the newly-created vector lanes are 4996 * unspecified. */ 4997 static inline SIMD_CFUNC simd_long3 simd_make_long3_undef(simd_long2 other) { 4998 simd_long3 result; 4999 result.xy = other; 5000 return result; 5001 } 5002 5003 /*! @abstract Returns `other` unmodified. This function is a convenience for 5004 * templated and autogenerated code. */ 5005 static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long3 other) { 5006 return other; 5007 } 5008 5009 /*! @abstract Truncates `other` to form a vector of three 64-bit signed 5010 * (twos-complement) integers. */ 5011 static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long4 other) { 5012 return other.xyz; 5013 } 5014 5015 /*! @abstract Truncates `other` to form a vector of three 64-bit signed 5016 * (twos-complement) integers. */ 5017 static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long8 other) { 5018 return other.xyz; 5019 } 5020 5021 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 5022 * 64-bit signed (twos-complement) integers. */ 5023 static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long1 x, simd_long1 y, simd_long1 z, simd_long1 w) { 5024 simd_long4 result; 5025 result.x = x; 5026 result.y = y; 5027 result.z = z; 5028 result.w = w; 5029 return result; 5030 } 5031 5032 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit 5033 * signed (twos-complement) integers. */ 5034 static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long1 x, simd_long1 y, simd_long2 zw) { 5035 simd_long4 result; 5036 result.x = x; 5037 result.y = y; 5038 result.zw = zw; 5039 return result; 5040 } 5041 5042 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit 5043 * signed (twos-complement) integers. */ 5044 static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long1 x, simd_long2 yz, simd_long1 w) { 5045 simd_long4 result; 5046 result.x = x; 5047 result.yz = yz; 5048 result.w = w; 5049 return result; 5050 } 5051 5052 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit 5053 * signed (twos-complement) integers. */ 5054 static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long2 xy, simd_long1 z, simd_long1 w) { 5055 simd_long4 result; 5056 result.xy = xy; 5057 result.z = z; 5058 result.w = w; 5059 return result; 5060 } 5061 5062 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit 5063 * signed (twos-complement) integers. */ 5064 static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long1 x, simd_long3 yzw) { 5065 simd_long4 result; 5066 result.x = x; 5067 result.yzw = yzw; 5068 return result; 5069 } 5070 5071 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit 5072 * signed (twos-complement) integers. */ 5073 static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long2 xy, simd_long2 zw) { 5074 simd_long4 result; 5075 result.xy = xy; 5076 result.zw = zw; 5077 return result; 5078 } 5079 5080 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit 5081 * signed (twos-complement) integers. */ 5082 static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long3 xyz, simd_long1 w) { 5083 simd_long4 result; 5084 result.xyz = xyz; 5085 result.w = w; 5086 return result; 5087 } 5088 5089 /*! @abstract Zero-extends `other` to form a vector of four 64-bit signed 5090 * (twos-complement) integers. */ 5091 static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long1 other) { 5092 simd_long4 result = 0; 5093 result.x = other; 5094 return result; 5095 } 5096 5097 /*! @abstract Extends `other` to form a vector of four 64-bit signed (twos- 5098 * complement) integers. The contents of the newly-created vector lanes are 5099 * unspecified. */ 5100 static inline SIMD_CFUNC simd_long4 simd_make_long4_undef(simd_long1 other) { 5101 simd_long4 result; 5102 result.x = other; 5103 return result; 5104 } 5105 5106 /*! @abstract Zero-extends `other` to form a vector of four 64-bit signed 5107 * (twos-complement) integers. */ 5108 static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long2 other) { 5109 simd_long4 result = 0; 5110 result.xy = other; 5111 return result; 5112 } 5113 5114 /*! @abstract Extends `other` to form a vector of four 64-bit signed (twos- 5115 * complement) integers. The contents of the newly-created vector lanes are 5116 * unspecified. */ 5117 static inline SIMD_CFUNC simd_long4 simd_make_long4_undef(simd_long2 other) { 5118 simd_long4 result; 5119 result.xy = other; 5120 return result; 5121 } 5122 5123 /*! @abstract Zero-extends `other` to form a vector of four 64-bit signed 5124 * (twos-complement) integers. */ 5125 static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long3 other) { 5126 simd_long4 result = 0; 5127 result.xyz = other; 5128 return result; 5129 } 5130 5131 /*! @abstract Extends `other` to form a vector of four 64-bit signed (twos- 5132 * complement) integers. The contents of the newly-created vector lanes are 5133 * unspecified. */ 5134 static inline SIMD_CFUNC simd_long4 simd_make_long4_undef(simd_long3 other) { 5135 simd_long4 result; 5136 result.xyz = other; 5137 return result; 5138 } 5139 5140 /*! @abstract Returns `other` unmodified. This function is a convenience for 5141 * templated and autogenerated code. */ 5142 static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long4 other) { 5143 return other; 5144 } 5145 5146 /*! @abstract Truncates `other` to form a vector of four 64-bit signed 5147 * (twos-complement) integers. */ 5148 static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long8 other) { 5149 return other.xyzw; 5150 } 5151 5152 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit 5153 * signed (twos-complement) integers. */ 5154 static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long4 lo, simd_long4 hi) { 5155 simd_long8 result; 5156 result.lo = lo; 5157 result.hi = hi; 5158 return result; 5159 } 5160 5161 /*! @abstract Zero-extends `other` to form a vector of eight 64-bit signed 5162 * (twos-complement) integers. */ 5163 static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long1 other) { 5164 simd_long8 result = 0; 5165 result.x = other; 5166 return result; 5167 } 5168 5169 /*! @abstract Extends `other` to form a vector of eight 64-bit signed (twos- 5170 * complement) integers. The contents of the newly-created vector lanes are 5171 * unspecified. */ 5172 static inline SIMD_CFUNC simd_long8 simd_make_long8_undef(simd_long1 other) { 5173 simd_long8 result; 5174 result.x = other; 5175 return result; 5176 } 5177 5178 /*! @abstract Zero-extends `other` to form a vector of eight 64-bit signed 5179 * (twos-complement) integers. */ 5180 static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long2 other) { 5181 simd_long8 result = 0; 5182 result.xy = other; 5183 return result; 5184 } 5185 5186 /*! @abstract Extends `other` to form a vector of eight 64-bit signed (twos- 5187 * complement) integers. The contents of the newly-created vector lanes are 5188 * unspecified. */ 5189 static inline SIMD_CFUNC simd_long8 simd_make_long8_undef(simd_long2 other) { 5190 simd_long8 result; 5191 result.xy = other; 5192 return result; 5193 } 5194 5195 /*! @abstract Zero-extends `other` to form a vector of eight 64-bit signed 5196 * (twos-complement) integers. */ 5197 static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long3 other) { 5198 simd_long8 result = 0; 5199 result.xyz = other; 5200 return result; 5201 } 5202 5203 /*! @abstract Extends `other` to form a vector of eight 64-bit signed (twos- 5204 * complement) integers. The contents of the newly-created vector lanes are 5205 * unspecified. */ 5206 static inline SIMD_CFUNC simd_long8 simd_make_long8_undef(simd_long3 other) { 5207 simd_long8 result; 5208 result.xyz = other; 5209 return result; 5210 } 5211 5212 /*! @abstract Zero-extends `other` to form a vector of eight 64-bit signed 5213 * (twos-complement) integers. */ 5214 static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long4 other) { 5215 simd_long8 result = 0; 5216 result.xyzw = other; 5217 return result; 5218 } 5219 5220 /*! @abstract Extends `other` to form a vector of eight 64-bit signed (twos- 5221 * complement) integers. The contents of the newly-created vector lanes are 5222 * unspecified. */ 5223 static inline SIMD_CFUNC simd_long8 simd_make_long8_undef(simd_long4 other) { 5224 simd_long8 result; 5225 result.xyzw = other; 5226 return result; 5227 } 5228 5229 /*! @abstract Returns `other` unmodified. This function is a convenience for 5230 * templated and autogenerated code. */ 5231 static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long8 other) { 5232 return other; 5233 } 5234 5235 /*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit 5236 * unsigned integers. */ 5237 static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong1 x, simd_ulong1 y) { 5238 simd_ulong2 result; 5239 result.x = x; 5240 result.y = y; 5241 return result; 5242 } 5243 5244 /*! @abstract Zero-extends `other` to form a vector of two 64-bit unsigned 5245 * integers. */ 5246 static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong1 other) { 5247 simd_ulong2 result = 0; 5248 result.x = other; 5249 return result; 5250 } 5251 5252 /*! @abstract Extends `other` to form a vector of two 64-bit unsigned 5253 * integers. The contents of the newly-created vector lanes are 5254 * unspecified. */ 5255 static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2_undef(simd_ulong1 other) { 5256 simd_ulong2 result; 5257 result.x = other; 5258 return result; 5259 } 5260 5261 /*! @abstract Returns `other` unmodified. This function is a convenience for 5262 * templated and autogenerated code. */ 5263 static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong2 other) { 5264 return other; 5265 } 5266 5267 /*! @abstract Truncates `other` to form a vector of two 64-bit unsigned 5268 * integers. */ 5269 static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong3 other) { 5270 return other.xy; 5271 } 5272 5273 /*! @abstract Truncates `other` to form a vector of two 64-bit unsigned 5274 * integers. */ 5275 static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong4 other) { 5276 return other.xy; 5277 } 5278 5279 /*! @abstract Truncates `other` to form a vector of two 64-bit unsigned 5280 * integers. */ 5281 static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong8 other) { 5282 return other.xy; 5283 } 5284 5285 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit 5286 * unsigned integers. */ 5287 static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong1 x, simd_ulong1 y, simd_ulong1 z) { 5288 simd_ulong3 result; 5289 result.x = x; 5290 result.y = y; 5291 result.z = z; 5292 return result; 5293 } 5294 5295 /*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit 5296 * unsigned integers. */ 5297 static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong1 x, simd_ulong2 yz) { 5298 simd_ulong3 result; 5299 result.x = x; 5300 result.yz = yz; 5301 return result; 5302 } 5303 5304 /*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit 5305 * unsigned integers. */ 5306 static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong2 xy, simd_ulong1 z) { 5307 simd_ulong3 result; 5308 result.xy = xy; 5309 result.z = z; 5310 return result; 5311 } 5312 5313 /*! @abstract Zero-extends `other` to form a vector of three 64-bit unsigned 5314 * integers. */ 5315 static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong1 other) { 5316 simd_ulong3 result = 0; 5317 result.x = other; 5318 return result; 5319 } 5320 5321 /*! @abstract Extends `other` to form a vector of three 64-bit unsigned 5322 * integers. The contents of the newly-created vector lanes are 5323 * unspecified. */ 5324 static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3_undef(simd_ulong1 other) { 5325 simd_ulong3 result; 5326 result.x = other; 5327 return result; 5328 } 5329 5330 /*! @abstract Zero-extends `other` to form a vector of three 64-bit unsigned 5331 * integers. */ 5332 static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong2 other) { 5333 simd_ulong3 result = 0; 5334 result.xy = other; 5335 return result; 5336 } 5337 5338 /*! @abstract Extends `other` to form a vector of three 64-bit unsigned 5339 * integers. The contents of the newly-created vector lanes are 5340 * unspecified. */ 5341 static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3_undef(simd_ulong2 other) { 5342 simd_ulong3 result; 5343 result.xy = other; 5344 return result; 5345 } 5346 5347 /*! @abstract Returns `other` unmodified. This function is a convenience for 5348 * templated and autogenerated code. */ 5349 static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong3 other) { 5350 return other; 5351 } 5352 5353 /*! @abstract Truncates `other` to form a vector of three 64-bit unsigned 5354 * integers. */ 5355 static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong4 other) { 5356 return other.xyz; 5357 } 5358 5359 /*! @abstract Truncates `other` to form a vector of three 64-bit unsigned 5360 * integers. */ 5361 static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong8 other) { 5362 return other.xyz; 5363 } 5364 5365 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 5366 * 64-bit unsigned integers. */ 5367 static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong1 x, simd_ulong1 y, simd_ulong1 z, simd_ulong1 w) { 5368 simd_ulong4 result; 5369 result.x = x; 5370 result.y = y; 5371 result.z = z; 5372 result.w = w; 5373 return result; 5374 } 5375 5376 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit 5377 * unsigned integers. */ 5378 static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong1 x, simd_ulong1 y, simd_ulong2 zw) { 5379 simd_ulong4 result; 5380 result.x = x; 5381 result.y = y; 5382 result.zw = zw; 5383 return result; 5384 } 5385 5386 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit 5387 * unsigned integers. */ 5388 static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong1 x, simd_ulong2 yz, simd_ulong1 w) { 5389 simd_ulong4 result; 5390 result.x = x; 5391 result.yz = yz; 5392 result.w = w; 5393 return result; 5394 } 5395 5396 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit 5397 * unsigned integers. */ 5398 static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong2 xy, simd_ulong1 z, simd_ulong1 w) { 5399 simd_ulong4 result; 5400 result.xy = xy; 5401 result.z = z; 5402 result.w = w; 5403 return result; 5404 } 5405 5406 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit 5407 * unsigned integers. */ 5408 static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong1 x, simd_ulong3 yzw) { 5409 simd_ulong4 result; 5410 result.x = x; 5411 result.yzw = yzw; 5412 return result; 5413 } 5414 5415 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit 5416 * unsigned integers. */ 5417 static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong2 xy, simd_ulong2 zw) { 5418 simd_ulong4 result; 5419 result.xy = xy; 5420 result.zw = zw; 5421 return result; 5422 } 5423 5424 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit 5425 * unsigned integers. */ 5426 static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong3 xyz, simd_ulong1 w) { 5427 simd_ulong4 result; 5428 result.xyz = xyz; 5429 result.w = w; 5430 return result; 5431 } 5432 5433 /*! @abstract Zero-extends `other` to form a vector of four 64-bit unsigned 5434 * integers. */ 5435 static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong1 other) { 5436 simd_ulong4 result = 0; 5437 result.x = other; 5438 return result; 5439 } 5440 5441 /*! @abstract Extends `other` to form a vector of four 64-bit unsigned 5442 * integers. The contents of the newly-created vector lanes are 5443 * unspecified. */ 5444 static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4_undef(simd_ulong1 other) { 5445 simd_ulong4 result; 5446 result.x = other; 5447 return result; 5448 } 5449 5450 /*! @abstract Zero-extends `other` to form a vector of four 64-bit unsigned 5451 * integers. */ 5452 static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong2 other) { 5453 simd_ulong4 result = 0; 5454 result.xy = other; 5455 return result; 5456 } 5457 5458 /*! @abstract Extends `other` to form a vector of four 64-bit unsigned 5459 * integers. The contents of the newly-created vector lanes are 5460 * unspecified. */ 5461 static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4_undef(simd_ulong2 other) { 5462 simd_ulong4 result; 5463 result.xy = other; 5464 return result; 5465 } 5466 5467 /*! @abstract Zero-extends `other` to form a vector of four 64-bit unsigned 5468 * integers. */ 5469 static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong3 other) { 5470 simd_ulong4 result = 0; 5471 result.xyz = other; 5472 return result; 5473 } 5474 5475 /*! @abstract Extends `other` to form a vector of four 64-bit unsigned 5476 * integers. The contents of the newly-created vector lanes are 5477 * unspecified. */ 5478 static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4_undef(simd_ulong3 other) { 5479 simd_ulong4 result; 5480 result.xyz = other; 5481 return result; 5482 } 5483 5484 /*! @abstract Returns `other` unmodified. This function is a convenience for 5485 * templated and autogenerated code. */ 5486 static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong4 other) { 5487 return other; 5488 } 5489 5490 /*! @abstract Truncates `other` to form a vector of four 64-bit unsigned 5491 * integers. */ 5492 static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong8 other) { 5493 return other.xyzw; 5494 } 5495 5496 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit 5497 * unsigned integers. */ 5498 static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong4 lo, simd_ulong4 hi) { 5499 simd_ulong8 result; 5500 result.lo = lo; 5501 result.hi = hi; 5502 return result; 5503 } 5504 5505 /*! @abstract Zero-extends `other` to form a vector of eight 64-bit unsigned 5506 * integers. */ 5507 static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong1 other) { 5508 simd_ulong8 result = 0; 5509 result.x = other; 5510 return result; 5511 } 5512 5513 /*! @abstract Extends `other` to form a vector of eight 64-bit unsigned 5514 * integers. The contents of the newly-created vector lanes are 5515 * unspecified. */ 5516 static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8_undef(simd_ulong1 other) { 5517 simd_ulong8 result; 5518 result.x = other; 5519 return result; 5520 } 5521 5522 /*! @abstract Zero-extends `other` to form a vector of eight 64-bit unsigned 5523 * integers. */ 5524 static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong2 other) { 5525 simd_ulong8 result = 0; 5526 result.xy = other; 5527 return result; 5528 } 5529 5530 /*! @abstract Extends `other` to form a vector of eight 64-bit unsigned 5531 * integers. The contents of the newly-created vector lanes are 5532 * unspecified. */ 5533 static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8_undef(simd_ulong2 other) { 5534 simd_ulong8 result; 5535 result.xy = other; 5536 return result; 5537 } 5538 5539 /*! @abstract Zero-extends `other` to form a vector of eight 64-bit unsigned 5540 * integers. */ 5541 static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong3 other) { 5542 simd_ulong8 result = 0; 5543 result.xyz = other; 5544 return result; 5545 } 5546 5547 /*! @abstract Extends `other` to form a vector of eight 64-bit unsigned 5548 * integers. The contents of the newly-created vector lanes are 5549 * unspecified. */ 5550 static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8_undef(simd_ulong3 other) { 5551 simd_ulong8 result; 5552 result.xyz = other; 5553 return result; 5554 } 5555 5556 /*! @abstract Zero-extends `other` to form a vector of eight 64-bit unsigned 5557 * integers. */ 5558 static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong4 other) { 5559 simd_ulong8 result = 0; 5560 result.xyzw = other; 5561 return result; 5562 } 5563 5564 /*! @abstract Extends `other` to form a vector of eight 64-bit unsigned 5565 * integers. The contents of the newly-created vector lanes are 5566 * unspecified. */ 5567 static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8_undef(simd_ulong4 other) { 5568 simd_ulong8 result; 5569 result.xyzw = other; 5570 return result; 5571 } 5572 5573 /*! @abstract Returns `other` unmodified. This function is a convenience for 5574 * templated and autogenerated code. */ 5575 static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong8 other) { 5576 return other; 5577 } 5578 5579 /*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit 5580 * floating-point numbers. */ 5581 static inline SIMD_CFUNC simd_double2 simd_make_double2(double x, double y) { 5582 simd_double2 result; 5583 result.x = x; 5584 result.y = y; 5585 return result; 5586 } 5587 5588 /*! @abstract Zero-extends `other` to form a vector of two 64-bit floating- 5589 * point numbers. */ 5590 static inline SIMD_CFUNC simd_double2 simd_make_double2(double other) { 5591 simd_double2 result = 0; 5592 result.x = other; 5593 return result; 5594 } 5595 5596 /*! @abstract Extends `other` to form a vector of two 64-bit floating-point 5597 * numbers. The contents of the newly-created vector lanes are unspecified. */ 5598 static inline SIMD_CFUNC simd_double2 simd_make_double2_undef(double other) { 5599 simd_double2 result; 5600 result.x = other; 5601 return result; 5602 } 5603 5604 /*! @abstract Returns `other` unmodified. This function is a convenience for 5605 * templated and autogenerated code. */ 5606 static inline SIMD_CFUNC simd_double2 simd_make_double2(simd_double2 other) { 5607 return other; 5608 } 5609 5610 /*! @abstract Truncates `other` to form a vector of two 64-bit floating- 5611 * point numbers. */ 5612 static inline SIMD_CFUNC simd_double2 simd_make_double2(simd_double3 other) { 5613 return other.xy; 5614 } 5615 5616 /*! @abstract Truncates `other` to form a vector of two 64-bit floating- 5617 * point numbers. */ 5618 static inline SIMD_CFUNC simd_double2 simd_make_double2(simd_double4 other) { 5619 return other.xy; 5620 } 5621 5622 /*! @abstract Truncates `other` to form a vector of two 64-bit floating- 5623 * point numbers. */ 5624 static inline SIMD_CFUNC simd_double2 simd_make_double2(simd_double8 other) { 5625 return other.xy; 5626 } 5627 5628 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit 5629 * floating-point numbers. */ 5630 static inline SIMD_CFUNC simd_double3 simd_make_double3(double x, double y, double z) { 5631 simd_double3 result; 5632 result.x = x; 5633 result.y = y; 5634 result.z = z; 5635 return result; 5636 } 5637 5638 /*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit 5639 * floating-point numbers. */ 5640 static inline SIMD_CFUNC simd_double3 simd_make_double3(double x, simd_double2 yz) { 5641 simd_double3 result; 5642 result.x = x; 5643 result.yz = yz; 5644 return result; 5645 } 5646 5647 /*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit 5648 * floating-point numbers. */ 5649 static inline SIMD_CFUNC simd_double3 simd_make_double3(simd_double2 xy, double z) { 5650 simd_double3 result; 5651 result.xy = xy; 5652 result.z = z; 5653 return result; 5654 } 5655 5656 /*! @abstract Zero-extends `other` to form a vector of three 64-bit 5657 * floating-point numbers. */ 5658 static inline SIMD_CFUNC simd_double3 simd_make_double3(double other) { 5659 simd_double3 result = 0; 5660 result.x = other; 5661 return result; 5662 } 5663 5664 /*! @abstract Extends `other` to form a vector of three 64-bit floating- 5665 * point numbers. The contents of the newly-created vector lanes are 5666 * unspecified. */ 5667 static inline SIMD_CFUNC simd_double3 simd_make_double3_undef(double other) { 5668 simd_double3 result; 5669 result.x = other; 5670 return result; 5671 } 5672 5673 /*! @abstract Zero-extends `other` to form a vector of three 64-bit 5674 * floating-point numbers. */ 5675 static inline SIMD_CFUNC simd_double3 simd_make_double3(simd_double2 other) { 5676 simd_double3 result = 0; 5677 result.xy = other; 5678 return result; 5679 } 5680 5681 /*! @abstract Extends `other` to form a vector of three 64-bit floating- 5682 * point numbers. The contents of the newly-created vector lanes are 5683 * unspecified. */ 5684 static inline SIMD_CFUNC simd_double3 simd_make_double3_undef(simd_double2 other) { 5685 simd_double3 result; 5686 result.xy = other; 5687 return result; 5688 } 5689 5690 /*! @abstract Returns `other` unmodified. This function is a convenience for 5691 * templated and autogenerated code. */ 5692 static inline SIMD_CFUNC simd_double3 simd_make_double3(simd_double3 other) { 5693 return other; 5694 } 5695 5696 /*! @abstract Truncates `other` to form a vector of three 64-bit floating- 5697 * point numbers. */ 5698 static inline SIMD_CFUNC simd_double3 simd_make_double3(simd_double4 other) { 5699 return other.xyz; 5700 } 5701 5702 /*! @abstract Truncates `other` to form a vector of three 64-bit floating- 5703 * point numbers. */ 5704 static inline SIMD_CFUNC simd_double3 simd_make_double3(simd_double8 other) { 5705 return other.xyz; 5706 } 5707 5708 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 5709 * 64-bit floating-point numbers. */ 5710 static inline SIMD_CFUNC simd_double4 simd_make_double4(double x, double y, double z, double w) { 5711 simd_double4 result; 5712 result.x = x; 5713 result.y = y; 5714 result.z = z; 5715 result.w = w; 5716 return result; 5717 } 5718 5719 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit 5720 * floating-point numbers. */ 5721 static inline SIMD_CFUNC simd_double4 simd_make_double4(double x, double y, simd_double2 zw) { 5722 simd_double4 result; 5723 result.x = x; 5724 result.y = y; 5725 result.zw = zw; 5726 return result; 5727 } 5728 5729 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit 5730 * floating-point numbers. */ 5731 static inline SIMD_CFUNC simd_double4 simd_make_double4(double x, simd_double2 yz, double w) { 5732 simd_double4 result; 5733 result.x = x; 5734 result.yz = yz; 5735 result.w = w; 5736 return result; 5737 } 5738 5739 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit 5740 * floating-point numbers. */ 5741 static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double2 xy, double z, double w) { 5742 simd_double4 result; 5743 result.xy = xy; 5744 result.z = z; 5745 result.w = w; 5746 return result; 5747 } 5748 5749 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit 5750 * floating-point numbers. */ 5751 static inline SIMD_CFUNC simd_double4 simd_make_double4(double x, simd_double3 yzw) { 5752 simd_double4 result; 5753 result.x = x; 5754 result.yzw = yzw; 5755 return result; 5756 } 5757 5758 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit 5759 * floating-point numbers. */ 5760 static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double2 xy, simd_double2 zw) { 5761 simd_double4 result; 5762 result.xy = xy; 5763 result.zw = zw; 5764 return result; 5765 } 5766 5767 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit 5768 * floating-point numbers. */ 5769 static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double3 xyz, double w) { 5770 simd_double4 result; 5771 result.xyz = xyz; 5772 result.w = w; 5773 return result; 5774 } 5775 5776 /*! @abstract Zero-extends `other` to form a vector of four 64-bit floating- 5777 * point numbers. */ 5778 static inline SIMD_CFUNC simd_double4 simd_make_double4(double other) { 5779 simd_double4 result = 0; 5780 result.x = other; 5781 return result; 5782 } 5783 5784 /*! @abstract Extends `other` to form a vector of four 64-bit floating-point 5785 * numbers. The contents of the newly-created vector lanes are unspecified. */ 5786 static inline SIMD_CFUNC simd_double4 simd_make_double4_undef(double other) { 5787 simd_double4 result; 5788 result.x = other; 5789 return result; 5790 } 5791 5792 /*! @abstract Zero-extends `other` to form a vector of four 64-bit floating- 5793 * point numbers. */ 5794 static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double2 other) { 5795 simd_double4 result = 0; 5796 result.xy = other; 5797 return result; 5798 } 5799 5800 /*! @abstract Extends `other` to form a vector of four 64-bit floating-point 5801 * numbers. The contents of the newly-created vector lanes are unspecified. */ 5802 static inline SIMD_CFUNC simd_double4 simd_make_double4_undef(simd_double2 other) { 5803 simd_double4 result; 5804 result.xy = other; 5805 return result; 5806 } 5807 5808 /*! @abstract Zero-extends `other` to form a vector of four 64-bit floating- 5809 * point numbers. */ 5810 static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double3 other) { 5811 simd_double4 result = 0; 5812 result.xyz = other; 5813 return result; 5814 } 5815 5816 /*! @abstract Extends `other` to form a vector of four 64-bit floating-point 5817 * numbers. The contents of the newly-created vector lanes are unspecified. */ 5818 static inline SIMD_CFUNC simd_double4 simd_make_double4_undef(simd_double3 other) { 5819 simd_double4 result; 5820 result.xyz = other; 5821 return result; 5822 } 5823 5824 /*! @abstract Returns `other` unmodified. This function is a convenience for 5825 * templated and autogenerated code. */ 5826 static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double4 other) { 5827 return other; 5828 } 5829 5830 /*! @abstract Truncates `other` to form a vector of four 64-bit floating- 5831 * point numbers. */ 5832 static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double8 other) { 5833 return other.xyzw; 5834 } 5835 5836 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit 5837 * floating-point numbers. */ 5838 static inline SIMD_CFUNC simd_double8 simd_make_double8(simd_double4 lo, simd_double4 hi) { 5839 simd_double8 result; 5840 result.lo = lo; 5841 result.hi = hi; 5842 return result; 5843 } 5844 5845 /*! @abstract Zero-extends `other` to form a vector of eight 64-bit 5846 * floating-point numbers. */ 5847 static inline SIMD_CFUNC simd_double8 simd_make_double8(double other) { 5848 simd_double8 result = 0; 5849 result.x = other; 5850 return result; 5851 } 5852 5853 /*! @abstract Extends `other` to form a vector of eight 64-bit floating- 5854 * point numbers. The contents of the newly-created vector lanes are 5855 * unspecified. */ 5856 static inline SIMD_CFUNC simd_double8 simd_make_double8_undef(double other) { 5857 simd_double8 result; 5858 result.x = other; 5859 return result; 5860 } 5861 5862 /*! @abstract Zero-extends `other` to form a vector of eight 64-bit 5863 * floating-point numbers. */ 5864 static inline SIMD_CFUNC simd_double8 simd_make_double8(simd_double2 other) { 5865 simd_double8 result = 0; 5866 result.xy = other; 5867 return result; 5868 } 5869 5870 /*! @abstract Extends `other` to form a vector of eight 64-bit floating- 5871 * point numbers. The contents of the newly-created vector lanes are 5872 * unspecified. */ 5873 static inline SIMD_CFUNC simd_double8 simd_make_double8_undef(simd_double2 other) { 5874 simd_double8 result; 5875 result.xy = other; 5876 return result; 5877 } 5878 5879 /*! @abstract Zero-extends `other` to form a vector of eight 64-bit 5880 * floating-point numbers. */ 5881 static inline SIMD_CFUNC simd_double8 simd_make_double8(simd_double3 other) { 5882 simd_double8 result = 0; 5883 result.xyz = other; 5884 return result; 5885 } 5886 5887 /*! @abstract Extends `other` to form a vector of eight 64-bit floating- 5888 * point numbers. The contents of the newly-created vector lanes are 5889 * unspecified. */ 5890 static inline SIMD_CFUNC simd_double8 simd_make_double8_undef(simd_double3 other) { 5891 simd_double8 result; 5892 result.xyz = other; 5893 return result; 5894 } 5895 5896 /*! @abstract Zero-extends `other` to form a vector of eight 64-bit 5897 * floating-point numbers. */ 5898 static inline SIMD_CFUNC simd_double8 simd_make_double8(simd_double4 other) { 5899 simd_double8 result = 0; 5900 result.xyzw = other; 5901 return result; 5902 } 5903 5904 /*! @abstract Extends `other` to form a vector of eight 64-bit floating- 5905 * point numbers. The contents of the newly-created vector lanes are 5906 * unspecified. */ 5907 static inline SIMD_CFUNC simd_double8 simd_make_double8_undef(simd_double4 other) { 5908 simd_double8 result; 5909 result.xyzw = other; 5910 return result; 5911 } 5912 5913 /*! @abstract Returns `other` unmodified. This function is a convenience for 5914 * templated and autogenerated code. */ 5915 static inline SIMD_CFUNC simd_double8 simd_make_double8(simd_double8 other) { 5916 return other; 5917 } 5918 5919 #ifdef __cplusplus 5920 } /* extern "C" */ 5921 5922 #include <tuple> 5923 #include <simd/packed.h> 5924 5925 namespace simd { 5926 /*! @abstract Concatenates `x` and `y` to form a vector of two 8-bit signed 5927 * (twos-complement) integers. */ 5928 static inline SIMD_CPPFUNC char2 make_char2(char x, char y) { 5929 return ::simd_make_char2(x, y); 5930 } 5931 5932 /*! @abstract Truncates or zero-extends `other` to form a vector of two 5933 * 8-bit signed (twos-complement) integers. */ 5934 template <typename typeN> static SIMD_CPPFUNC char2 make_char2(typeN other) { 5935 return ::simd_make_char2(other); 5936 } 5937 5938 /*! @abstract Extends `other` to form a vector of two 8-bit signed (twos- 5939 * complement) integers. The contents of the newly-created vector lanes are 5940 * unspecified. */ 5941 template <typename typeN> static SIMD_CPPFUNC char2 make_char2_undef(typeN other) { 5942 return ::simd_make_char2_undef(other); 5943 } 5944 5945 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 8-bit 5946 * signed (twos-complement) integers. */ 5947 static inline SIMD_CPPFUNC char3 make_char3(char x, char y, char z) { 5948 return ::simd_make_char3(x, y, z); 5949 } 5950 5951 /*! @abstract Concatenates `x` and `yz` to form a vector of three 8-bit 5952 * signed (twos-complement) integers. */ 5953 static inline SIMD_CPPFUNC char3 make_char3(char x, char2 yz) { 5954 return ::simd_make_char3(x, yz); 5955 } 5956 5957 /*! @abstract Concatenates `xy` and `z` to form a vector of three 8-bit 5958 * signed (twos-complement) integers. */ 5959 static inline SIMD_CPPFUNC char3 make_char3(char2 xy, char z) { 5960 return ::simd_make_char3(xy, z); 5961 } 5962 5963 /*! @abstract Truncates or zero-extends `other` to form a vector of three 5964 * 8-bit signed (twos-complement) integers. */ 5965 template <typename typeN> static SIMD_CPPFUNC char3 make_char3(typeN other) { 5966 return ::simd_make_char3(other); 5967 } 5968 5969 /*! @abstract Extends `other` to form a vector of three 8-bit signed (twos- 5970 * complement) integers. The contents of the newly-created vector lanes are 5971 * unspecified. */ 5972 template <typename typeN> static SIMD_CPPFUNC char3 make_char3_undef(typeN other) { 5973 return ::simd_make_char3_undef(other); 5974 } 5975 5976 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 5977 * 8-bit signed (twos-complement) integers. */ 5978 static inline SIMD_CPPFUNC char4 make_char4(char x, char y, char z, char w) { 5979 return ::simd_make_char4(x, y, z, w); 5980 } 5981 5982 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 8-bit 5983 * signed (twos-complement) integers. */ 5984 static inline SIMD_CPPFUNC char4 make_char4(char x, char y, char2 zw) { 5985 return ::simd_make_char4(x, y, zw); 5986 } 5987 5988 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 8-bit 5989 * signed (twos-complement) integers. */ 5990 static inline SIMD_CPPFUNC char4 make_char4(char x, char2 yz, char w) { 5991 return ::simd_make_char4(x, yz, w); 5992 } 5993 5994 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 8-bit 5995 * signed (twos-complement) integers. */ 5996 static inline SIMD_CPPFUNC char4 make_char4(char2 xy, char z, char w) { 5997 return ::simd_make_char4(xy, z, w); 5998 } 5999 6000 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 8-bit 6001 * signed (twos-complement) integers. */ 6002 static inline SIMD_CPPFUNC char4 make_char4(char x, char3 yzw) { 6003 return ::simd_make_char4(x, yzw); 6004 } 6005 6006 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 8-bit 6007 * signed (twos-complement) integers. */ 6008 static inline SIMD_CPPFUNC char4 make_char4(char2 xy, char2 zw) { 6009 return ::simd_make_char4(xy, zw); 6010 } 6011 6012 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 8-bit 6013 * signed (twos-complement) integers. */ 6014 static inline SIMD_CPPFUNC char4 make_char4(char3 xyz, char w) { 6015 return ::simd_make_char4(xyz, w); 6016 } 6017 6018 /*! @abstract Truncates or zero-extends `other` to form a vector of four 6019 * 8-bit signed (twos-complement) integers. */ 6020 template <typename typeN> static SIMD_CPPFUNC char4 make_char4(typeN other) { 6021 return ::simd_make_char4(other); 6022 } 6023 6024 /*! @abstract Extends `other` to form a vector of four 8-bit signed (twos- 6025 * complement) integers. The contents of the newly-created vector lanes are 6026 * unspecified. */ 6027 template <typename typeN> static SIMD_CPPFUNC char4 make_char4_undef(typeN other) { 6028 return ::simd_make_char4_undef(other); 6029 } 6030 6031 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 8-bit 6032 * signed (twos-complement) integers. */ 6033 static inline SIMD_CPPFUNC char8 make_char8(char4 lo, char4 hi) { 6034 return ::simd_make_char8(lo, hi); 6035 } 6036 6037 /*! @abstract Truncates or zero-extends `other` to form a vector of eight 6038 * 8-bit signed (twos-complement) integers. */ 6039 template <typename typeN> static SIMD_CPPFUNC char8 make_char8(typeN other) { 6040 return ::simd_make_char8(other); 6041 } 6042 6043 /*! @abstract Extends `other` to form a vector of eight 8-bit signed (twos- 6044 * complement) integers. The contents of the newly-created vector lanes are 6045 * unspecified. */ 6046 template <typename typeN> static SIMD_CPPFUNC char8 make_char8_undef(typeN other) { 6047 return ::simd_make_char8_undef(other); 6048 } 6049 6050 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 8-bit 6051 * signed (twos-complement) integers. */ 6052 static inline SIMD_CPPFUNC char16 make_char16(char8 lo, char8 hi) { 6053 return ::simd_make_char16(lo, hi); 6054 } 6055 6056 /*! @abstract Truncates or zero-extends `other` to form a vector of sixteen 6057 * 8-bit signed (twos-complement) integers. */ 6058 template <typename typeN> static SIMD_CPPFUNC char16 make_char16(typeN other) { 6059 return ::simd_make_char16(other); 6060 } 6061 6062 /*! @abstract Extends `other` to form a vector of sixteen 8-bit signed 6063 * (twos-complement) integers. The contents of the newly-created vector 6064 * lanes are unspecified. */ 6065 template <typename typeN> static SIMD_CPPFUNC char16 make_char16_undef(typeN other) { 6066 return ::simd_make_char16_undef(other); 6067 } 6068 6069 /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two 6070 * 8-bit signed (twos-complement) integers. */ 6071 static inline SIMD_CPPFUNC char32 make_char32(char16 lo, char16 hi) { 6072 return ::simd_make_char32(lo, hi); 6073 } 6074 6075 /*! @abstract Truncates or zero-extends `other` to form a vector of thirty- 6076 * two 8-bit signed (twos-complement) integers. */ 6077 template <typename typeN> static SIMD_CPPFUNC char32 make_char32(typeN other) { 6078 return ::simd_make_char32(other); 6079 } 6080 6081 /*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed 6082 * (twos-complement) integers. The contents of the newly-created vector 6083 * lanes are unspecified. */ 6084 template <typename typeN> static SIMD_CPPFUNC char32 make_char32_undef(typeN other) { 6085 return ::simd_make_char32_undef(other); 6086 } 6087 6088 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixty-four 6089 * 8-bit signed (twos-complement) integers. */ 6090 static inline SIMD_CPPFUNC char64 make_char64(char32 lo, char32 hi) { 6091 return ::simd_make_char64(lo, hi); 6092 } 6093 6094 /*! @abstract Truncates or zero-extends `other` to form a vector of sixty- 6095 * four 8-bit signed (twos-complement) integers. */ 6096 template <typename typeN> static SIMD_CPPFUNC char64 make_char64(typeN other) { 6097 return ::simd_make_char64(other); 6098 } 6099 6100 /*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed 6101 * (twos-complement) integers. The contents of the newly-created vector 6102 * lanes are unspecified. */ 6103 template <typename typeN> static SIMD_CPPFUNC char64 make_char64_undef(typeN other) { 6104 return ::simd_make_char64_undef(other); 6105 } 6106 6107 /*! @abstract Concatenates `x` and `y` to form a vector of two 8-bit 6108 * unsigned integers. */ 6109 static inline SIMD_CPPFUNC uchar2 make_uchar2(unsigned char x, unsigned char y) { 6110 return ::simd_make_uchar2(x, y); 6111 } 6112 6113 /*! @abstract Truncates or zero-extends `other` to form a vector of two 6114 * 8-bit unsigned integers. */ 6115 template <typename typeN> static SIMD_CPPFUNC uchar2 make_uchar2(typeN other) { 6116 return ::simd_make_uchar2(other); 6117 } 6118 6119 /*! @abstract Extends `other` to form a vector of two 8-bit unsigned 6120 * integers. The contents of the newly-created vector lanes are 6121 * unspecified. */ 6122 template <typename typeN> static SIMD_CPPFUNC uchar2 make_uchar2_undef(typeN other) { 6123 return ::simd_make_uchar2_undef(other); 6124 } 6125 6126 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 8-bit 6127 * unsigned integers. */ 6128 static inline SIMD_CPPFUNC uchar3 make_uchar3(unsigned char x, unsigned char y, unsigned char z) { 6129 return ::simd_make_uchar3(x, y, z); 6130 } 6131 6132 /*! @abstract Concatenates `x` and `yz` to form a vector of three 8-bit 6133 * unsigned integers. */ 6134 static inline SIMD_CPPFUNC uchar3 make_uchar3(unsigned char x, uchar2 yz) { 6135 return ::simd_make_uchar3(x, yz); 6136 } 6137 6138 /*! @abstract Concatenates `xy` and `z` to form a vector of three 8-bit 6139 * unsigned integers. */ 6140 static inline SIMD_CPPFUNC uchar3 make_uchar3(uchar2 xy, unsigned char z) { 6141 return ::simd_make_uchar3(xy, z); 6142 } 6143 6144 /*! @abstract Truncates or zero-extends `other` to form a vector of three 6145 * 8-bit unsigned integers. */ 6146 template <typename typeN> static SIMD_CPPFUNC uchar3 make_uchar3(typeN other) { 6147 return ::simd_make_uchar3(other); 6148 } 6149 6150 /*! @abstract Extends `other` to form a vector of three 8-bit unsigned 6151 * integers. The contents of the newly-created vector lanes are 6152 * unspecified. */ 6153 template <typename typeN> static SIMD_CPPFUNC uchar3 make_uchar3_undef(typeN other) { 6154 return ::simd_make_uchar3_undef(other); 6155 } 6156 6157 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 6158 * 8-bit unsigned integers. */ 6159 static inline SIMD_CPPFUNC uchar4 make_uchar4(unsigned char x, unsigned char y, unsigned char z, unsigned char w) { 6160 return ::simd_make_uchar4(x, y, z, w); 6161 } 6162 6163 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 8-bit 6164 * unsigned integers. */ 6165 static inline SIMD_CPPFUNC uchar4 make_uchar4(unsigned char x, unsigned char y, uchar2 zw) { 6166 return ::simd_make_uchar4(x, y, zw); 6167 } 6168 6169 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 8-bit 6170 * unsigned integers. */ 6171 static inline SIMD_CPPFUNC uchar4 make_uchar4(unsigned char x, uchar2 yz, unsigned char w) { 6172 return ::simd_make_uchar4(x, yz, w); 6173 } 6174 6175 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 8-bit 6176 * unsigned integers. */ 6177 static inline SIMD_CPPFUNC uchar4 make_uchar4(uchar2 xy, unsigned char z, unsigned char w) { 6178 return ::simd_make_uchar4(xy, z, w); 6179 } 6180 6181 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 8-bit 6182 * unsigned integers. */ 6183 static inline SIMD_CPPFUNC uchar4 make_uchar4(unsigned char x, uchar3 yzw) { 6184 return ::simd_make_uchar4(x, yzw); 6185 } 6186 6187 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 8-bit 6188 * unsigned integers. */ 6189 static inline SIMD_CPPFUNC uchar4 make_uchar4(uchar2 xy, uchar2 zw) { 6190 return ::simd_make_uchar4(xy, zw); 6191 } 6192 6193 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 8-bit 6194 * unsigned integers. */ 6195 static inline SIMD_CPPFUNC uchar4 make_uchar4(uchar3 xyz, unsigned char w) { 6196 return ::simd_make_uchar4(xyz, w); 6197 } 6198 6199 /*! @abstract Truncates or zero-extends `other` to form a vector of four 6200 * 8-bit unsigned integers. */ 6201 template <typename typeN> static SIMD_CPPFUNC uchar4 make_uchar4(typeN other) { 6202 return ::simd_make_uchar4(other); 6203 } 6204 6205 /*! @abstract Extends `other` to form a vector of four 8-bit unsigned 6206 * integers. The contents of the newly-created vector lanes are 6207 * unspecified. */ 6208 template <typename typeN> static SIMD_CPPFUNC uchar4 make_uchar4_undef(typeN other) { 6209 return ::simd_make_uchar4_undef(other); 6210 } 6211 6212 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 8-bit 6213 * unsigned integers. */ 6214 static inline SIMD_CPPFUNC uchar8 make_uchar8(uchar4 lo, uchar4 hi) { 6215 return ::simd_make_uchar8(lo, hi); 6216 } 6217 6218 /*! @abstract Truncates or zero-extends `other` to form a vector of eight 6219 * 8-bit unsigned integers. */ 6220 template <typename typeN> static SIMD_CPPFUNC uchar8 make_uchar8(typeN other) { 6221 return ::simd_make_uchar8(other); 6222 } 6223 6224 /*! @abstract Extends `other` to form a vector of eight 8-bit unsigned 6225 * integers. The contents of the newly-created vector lanes are 6226 * unspecified. */ 6227 template <typename typeN> static SIMD_CPPFUNC uchar8 make_uchar8_undef(typeN other) { 6228 return ::simd_make_uchar8_undef(other); 6229 } 6230 6231 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 8-bit 6232 * unsigned integers. */ 6233 static inline SIMD_CPPFUNC uchar16 make_uchar16(uchar8 lo, uchar8 hi) { 6234 return ::simd_make_uchar16(lo, hi); 6235 } 6236 6237 /*! @abstract Truncates or zero-extends `other` to form a vector of sixteen 6238 * 8-bit unsigned integers. */ 6239 template <typename typeN> static SIMD_CPPFUNC uchar16 make_uchar16(typeN other) { 6240 return ::simd_make_uchar16(other); 6241 } 6242 6243 /*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned 6244 * integers. The contents of the newly-created vector lanes are 6245 * unspecified. */ 6246 template <typename typeN> static SIMD_CPPFUNC uchar16 make_uchar16_undef(typeN other) { 6247 return ::simd_make_uchar16_undef(other); 6248 } 6249 6250 /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two 6251 * 8-bit unsigned integers. */ 6252 static inline SIMD_CPPFUNC uchar32 make_uchar32(uchar16 lo, uchar16 hi) { 6253 return ::simd_make_uchar32(lo, hi); 6254 } 6255 6256 /*! @abstract Truncates or zero-extends `other` to form a vector of thirty- 6257 * two 8-bit unsigned integers. */ 6258 template <typename typeN> static SIMD_CPPFUNC uchar32 make_uchar32(typeN other) { 6259 return ::simd_make_uchar32(other); 6260 } 6261 6262 /*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned 6263 * integers. The contents of the newly-created vector lanes are 6264 * unspecified. */ 6265 template <typename typeN> static SIMD_CPPFUNC uchar32 make_uchar32_undef(typeN other) { 6266 return ::simd_make_uchar32_undef(other); 6267 } 6268 6269 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixty-four 6270 * 8-bit unsigned integers. */ 6271 static inline SIMD_CPPFUNC uchar64 make_uchar64(uchar32 lo, uchar32 hi) { 6272 return ::simd_make_uchar64(lo, hi); 6273 } 6274 6275 /*! @abstract Truncates or zero-extends `other` to form a vector of sixty- 6276 * four 8-bit unsigned integers. */ 6277 template <typename typeN> static SIMD_CPPFUNC uchar64 make_uchar64(typeN other) { 6278 return ::simd_make_uchar64(other); 6279 } 6280 6281 /*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned 6282 * integers. The contents of the newly-created vector lanes are 6283 * unspecified. */ 6284 template <typename typeN> static SIMD_CPPFUNC uchar64 make_uchar64_undef(typeN other) { 6285 return ::simd_make_uchar64_undef(other); 6286 } 6287 6288 /*! @abstract Concatenates `x` and `y` to form a vector of two 16-bit signed 6289 * (twos-complement) integers. */ 6290 static inline SIMD_CPPFUNC short2 make_short2(short x, short y) { 6291 return ::simd_make_short2(x, y); 6292 } 6293 6294 /*! @abstract Truncates or zero-extends `other` to form a vector of two 6295 * 16-bit signed (twos-complement) integers. */ 6296 template <typename typeN> static SIMD_CPPFUNC short2 make_short2(typeN other) { 6297 return ::simd_make_short2(other); 6298 } 6299 6300 /*! @abstract Extends `other` to form a vector of two 16-bit signed (twos- 6301 * complement) integers. The contents of the newly-created vector lanes are 6302 * unspecified. */ 6303 template <typename typeN> static SIMD_CPPFUNC short2 make_short2_undef(typeN other) { 6304 return ::simd_make_short2_undef(other); 6305 } 6306 6307 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 16-bit 6308 * signed (twos-complement) integers. */ 6309 static inline SIMD_CPPFUNC short3 make_short3(short x, short y, short z) { 6310 return ::simd_make_short3(x, y, z); 6311 } 6312 6313 /*! @abstract Concatenates `x` and `yz` to form a vector of three 16-bit 6314 * signed (twos-complement) integers. */ 6315 static inline SIMD_CPPFUNC short3 make_short3(short x, short2 yz) { 6316 return ::simd_make_short3(x, yz); 6317 } 6318 6319 /*! @abstract Concatenates `xy` and `z` to form a vector of three 16-bit 6320 * signed (twos-complement) integers. */ 6321 static inline SIMD_CPPFUNC short3 make_short3(short2 xy, short z) { 6322 return ::simd_make_short3(xy, z); 6323 } 6324 6325 /*! @abstract Truncates or zero-extends `other` to form a vector of three 6326 * 16-bit signed (twos-complement) integers. */ 6327 template <typename typeN> static SIMD_CPPFUNC short3 make_short3(typeN other) { 6328 return ::simd_make_short3(other); 6329 } 6330 6331 /*! @abstract Extends `other` to form a vector of three 16-bit signed (twos- 6332 * complement) integers. The contents of the newly-created vector lanes are 6333 * unspecified. */ 6334 template <typename typeN> static SIMD_CPPFUNC short3 make_short3_undef(typeN other) { 6335 return ::simd_make_short3_undef(other); 6336 } 6337 6338 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 6339 * 16-bit signed (twos-complement) integers. */ 6340 static inline SIMD_CPPFUNC short4 make_short4(short x, short y, short z, short w) { 6341 return ::simd_make_short4(x, y, z, w); 6342 } 6343 6344 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 16-bit 6345 * signed (twos-complement) integers. */ 6346 static inline SIMD_CPPFUNC short4 make_short4(short x, short y, short2 zw) { 6347 return ::simd_make_short4(x, y, zw); 6348 } 6349 6350 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 16-bit 6351 * signed (twos-complement) integers. */ 6352 static inline SIMD_CPPFUNC short4 make_short4(short x, short2 yz, short w) { 6353 return ::simd_make_short4(x, yz, w); 6354 } 6355 6356 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 16-bit 6357 * signed (twos-complement) integers. */ 6358 static inline SIMD_CPPFUNC short4 make_short4(short2 xy, short z, short w) { 6359 return ::simd_make_short4(xy, z, w); 6360 } 6361 6362 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 16-bit 6363 * signed (twos-complement) integers. */ 6364 static inline SIMD_CPPFUNC short4 make_short4(short x, short3 yzw) { 6365 return ::simd_make_short4(x, yzw); 6366 } 6367 6368 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 16-bit 6369 * signed (twos-complement) integers. */ 6370 static inline SIMD_CPPFUNC short4 make_short4(short2 xy, short2 zw) { 6371 return ::simd_make_short4(xy, zw); 6372 } 6373 6374 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 16-bit 6375 * signed (twos-complement) integers. */ 6376 static inline SIMD_CPPFUNC short4 make_short4(short3 xyz, short w) { 6377 return ::simd_make_short4(xyz, w); 6378 } 6379 6380 /*! @abstract Truncates or zero-extends `other` to form a vector of four 6381 * 16-bit signed (twos-complement) integers. */ 6382 template <typename typeN> static SIMD_CPPFUNC short4 make_short4(typeN other) { 6383 return ::simd_make_short4(other); 6384 } 6385 6386 /*! @abstract Extends `other` to form a vector of four 16-bit signed (twos- 6387 * complement) integers. The contents of the newly-created vector lanes are 6388 * unspecified. */ 6389 template <typename typeN> static SIMD_CPPFUNC short4 make_short4_undef(typeN other) { 6390 return ::simd_make_short4_undef(other); 6391 } 6392 6393 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 16-bit 6394 * signed (twos-complement) integers. */ 6395 static inline SIMD_CPPFUNC short8 make_short8(short4 lo, short4 hi) { 6396 return ::simd_make_short8(lo, hi); 6397 } 6398 6399 /*! @abstract Truncates or zero-extends `other` to form a vector of eight 6400 * 16-bit signed (twos-complement) integers. */ 6401 template <typename typeN> static SIMD_CPPFUNC short8 make_short8(typeN other) { 6402 return ::simd_make_short8(other); 6403 } 6404 6405 /*! @abstract Extends `other` to form a vector of eight 16-bit signed (twos- 6406 * complement) integers. The contents of the newly-created vector lanes are 6407 * unspecified. */ 6408 template <typename typeN> static SIMD_CPPFUNC short8 make_short8_undef(typeN other) { 6409 return ::simd_make_short8_undef(other); 6410 } 6411 6412 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 16-bit 6413 * signed (twos-complement) integers. */ 6414 static inline SIMD_CPPFUNC short16 make_short16(short8 lo, short8 hi) { 6415 return ::simd_make_short16(lo, hi); 6416 } 6417 6418 /*! @abstract Truncates or zero-extends `other` to form a vector of sixteen 6419 * 16-bit signed (twos-complement) integers. */ 6420 template <typename typeN> static SIMD_CPPFUNC short16 make_short16(typeN other) { 6421 return ::simd_make_short16(other); 6422 } 6423 6424 /*! @abstract Extends `other` to form a vector of sixteen 16-bit signed 6425 * (twos-complement) integers. The contents of the newly-created vector 6426 * lanes are unspecified. */ 6427 template <typename typeN> static SIMD_CPPFUNC short16 make_short16_undef(typeN other) { 6428 return ::simd_make_short16_undef(other); 6429 } 6430 6431 /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two 6432 * 16-bit signed (twos-complement) integers. */ 6433 static inline SIMD_CPPFUNC short32 make_short32(short16 lo, short16 hi) { 6434 return ::simd_make_short32(lo, hi); 6435 } 6436 6437 /*! @abstract Truncates or zero-extends `other` to form a vector of thirty- 6438 * two 16-bit signed (twos-complement) integers. */ 6439 template <typename typeN> static SIMD_CPPFUNC short32 make_short32(typeN other) { 6440 return ::simd_make_short32(other); 6441 } 6442 6443 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed 6444 * (twos-complement) integers. The contents of the newly-created vector 6445 * lanes are unspecified. */ 6446 template <typename typeN> static SIMD_CPPFUNC short32 make_short32_undef(typeN other) { 6447 return ::simd_make_short32_undef(other); 6448 } 6449 6450 /*! @abstract Concatenates `x` and `y` to form a vector of two 16-bit 6451 * unsigned integers. */ 6452 static inline SIMD_CPPFUNC ushort2 make_ushort2(unsigned short x, unsigned short y) { 6453 return ::simd_make_ushort2(x, y); 6454 } 6455 6456 /*! @abstract Truncates or zero-extends `other` to form a vector of two 6457 * 16-bit unsigned integers. */ 6458 template <typename typeN> static SIMD_CPPFUNC ushort2 make_ushort2(typeN other) { 6459 return ::simd_make_ushort2(other); 6460 } 6461 6462 /*! @abstract Extends `other` to form a vector of two 16-bit unsigned 6463 * integers. The contents of the newly-created vector lanes are 6464 * unspecified. */ 6465 template <typename typeN> static SIMD_CPPFUNC ushort2 make_ushort2_undef(typeN other) { 6466 return ::simd_make_ushort2_undef(other); 6467 } 6468 6469 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 16-bit 6470 * unsigned integers. */ 6471 static inline SIMD_CPPFUNC ushort3 make_ushort3(unsigned short x, unsigned short y, unsigned short z) { 6472 return ::simd_make_ushort3(x, y, z); 6473 } 6474 6475 /*! @abstract Concatenates `x` and `yz` to form a vector of three 16-bit 6476 * unsigned integers. */ 6477 static inline SIMD_CPPFUNC ushort3 make_ushort3(unsigned short x, ushort2 yz) { 6478 return ::simd_make_ushort3(x, yz); 6479 } 6480 6481 /*! @abstract Concatenates `xy` and `z` to form a vector of three 16-bit 6482 * unsigned integers. */ 6483 static inline SIMD_CPPFUNC ushort3 make_ushort3(ushort2 xy, unsigned short z) { 6484 return ::simd_make_ushort3(xy, z); 6485 } 6486 6487 /*! @abstract Truncates or zero-extends `other` to form a vector of three 6488 * 16-bit unsigned integers. */ 6489 template <typename typeN> static SIMD_CPPFUNC ushort3 make_ushort3(typeN other) { 6490 return ::simd_make_ushort3(other); 6491 } 6492 6493 /*! @abstract Extends `other` to form a vector of three 16-bit unsigned 6494 * integers. The contents of the newly-created vector lanes are 6495 * unspecified. */ 6496 template <typename typeN> static SIMD_CPPFUNC ushort3 make_ushort3_undef(typeN other) { 6497 return ::simd_make_ushort3_undef(other); 6498 } 6499 6500 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 6501 * 16-bit unsigned integers. */ 6502 static inline SIMD_CPPFUNC ushort4 make_ushort4(unsigned short x, unsigned short y, unsigned short z, unsigned short w) { 6503 return ::simd_make_ushort4(x, y, z, w); 6504 } 6505 6506 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 16-bit 6507 * unsigned integers. */ 6508 static inline SIMD_CPPFUNC ushort4 make_ushort4(unsigned short x, unsigned short y, ushort2 zw) { 6509 return ::simd_make_ushort4(x, y, zw); 6510 } 6511 6512 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 16-bit 6513 * unsigned integers. */ 6514 static inline SIMD_CPPFUNC ushort4 make_ushort4(unsigned short x, ushort2 yz, unsigned short w) { 6515 return ::simd_make_ushort4(x, yz, w); 6516 } 6517 6518 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 16-bit 6519 * unsigned integers. */ 6520 static inline SIMD_CPPFUNC ushort4 make_ushort4(ushort2 xy, unsigned short z, unsigned short w) { 6521 return ::simd_make_ushort4(xy, z, w); 6522 } 6523 6524 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 16-bit 6525 * unsigned integers. */ 6526 static inline SIMD_CPPFUNC ushort4 make_ushort4(unsigned short x, ushort3 yzw) { 6527 return ::simd_make_ushort4(x, yzw); 6528 } 6529 6530 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 16-bit 6531 * unsigned integers. */ 6532 static inline SIMD_CPPFUNC ushort4 make_ushort4(ushort2 xy, ushort2 zw) { 6533 return ::simd_make_ushort4(xy, zw); 6534 } 6535 6536 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 16-bit 6537 * unsigned integers. */ 6538 static inline SIMD_CPPFUNC ushort4 make_ushort4(ushort3 xyz, unsigned short w) { 6539 return ::simd_make_ushort4(xyz, w); 6540 } 6541 6542 /*! @abstract Truncates or zero-extends `other` to form a vector of four 6543 * 16-bit unsigned integers. */ 6544 template <typename typeN> static SIMD_CPPFUNC ushort4 make_ushort4(typeN other) { 6545 return ::simd_make_ushort4(other); 6546 } 6547 6548 /*! @abstract Extends `other` to form a vector of four 16-bit unsigned 6549 * integers. The contents of the newly-created vector lanes are 6550 * unspecified. */ 6551 template <typename typeN> static SIMD_CPPFUNC ushort4 make_ushort4_undef(typeN other) { 6552 return ::simd_make_ushort4_undef(other); 6553 } 6554 6555 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 16-bit 6556 * unsigned integers. */ 6557 static inline SIMD_CPPFUNC ushort8 make_ushort8(ushort4 lo, ushort4 hi) { 6558 return ::simd_make_ushort8(lo, hi); 6559 } 6560 6561 /*! @abstract Truncates or zero-extends `other` to form a vector of eight 6562 * 16-bit unsigned integers. */ 6563 template <typename typeN> static SIMD_CPPFUNC ushort8 make_ushort8(typeN other) { 6564 return ::simd_make_ushort8(other); 6565 } 6566 6567 /*! @abstract Extends `other` to form a vector of eight 16-bit unsigned 6568 * integers. The contents of the newly-created vector lanes are 6569 * unspecified. */ 6570 template <typename typeN> static SIMD_CPPFUNC ushort8 make_ushort8_undef(typeN other) { 6571 return ::simd_make_ushort8_undef(other); 6572 } 6573 6574 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 16-bit 6575 * unsigned integers. */ 6576 static inline SIMD_CPPFUNC ushort16 make_ushort16(ushort8 lo, ushort8 hi) { 6577 return ::simd_make_ushort16(lo, hi); 6578 } 6579 6580 /*! @abstract Truncates or zero-extends `other` to form a vector of sixteen 6581 * 16-bit unsigned integers. */ 6582 template <typename typeN> static SIMD_CPPFUNC ushort16 make_ushort16(typeN other) { 6583 return ::simd_make_ushort16(other); 6584 } 6585 6586 /*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned 6587 * integers. The contents of the newly-created vector lanes are 6588 * unspecified. */ 6589 template <typename typeN> static SIMD_CPPFUNC ushort16 make_ushort16_undef(typeN other) { 6590 return ::simd_make_ushort16_undef(other); 6591 } 6592 6593 /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two 6594 * 16-bit unsigned integers. */ 6595 static inline SIMD_CPPFUNC ushort32 make_ushort32(ushort16 lo, ushort16 hi) { 6596 return ::simd_make_ushort32(lo, hi); 6597 } 6598 6599 /*! @abstract Truncates or zero-extends `other` to form a vector of thirty- 6600 * two 16-bit unsigned integers. */ 6601 template <typename typeN> static SIMD_CPPFUNC ushort32 make_ushort32(typeN other) { 6602 return ::simd_make_ushort32(other); 6603 } 6604 6605 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned 6606 * integers. The contents of the newly-created vector lanes are 6607 * unspecified. */ 6608 template <typename typeN> static SIMD_CPPFUNC ushort32 make_ushort32_undef(typeN other) { 6609 return ::simd_make_ushort32_undef(other); 6610 } 6611 6612 /*! @abstract Concatenates `x` and `y` to form a vector of two 16-bit 6613 * floating-point numbers. */ 6614 static inline SIMD_CPPFUNC half2 make_half2(_Float16 x, _Float16 y) { 6615 return ::simd_make_half2(x, y); 6616 } 6617 6618 /*! @abstract Truncates or zero-extends `other` to form a vector of two 6619 * 16-bit floating-point numbers. */ 6620 template <typename typeN> static SIMD_CPPFUNC half2 make_half2(typeN other) { 6621 return ::simd_make_half2(other); 6622 } 6623 6624 /*! @abstract Extends `other` to form a vector of two 16-bit floating-point 6625 * numbers. The contents of the newly-created vector lanes are unspecified. */ 6626 template <typename typeN> static SIMD_CPPFUNC half2 make_half2_undef(typeN other) { 6627 return ::simd_make_half2_undef(other); 6628 } 6629 6630 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 16-bit 6631 * floating-point numbers. */ 6632 static inline SIMD_CPPFUNC half3 make_half3(_Float16 x, _Float16 y, _Float16 z) { 6633 return ::simd_make_half3(x, y, z); 6634 } 6635 6636 /*! @abstract Concatenates `x` and `yz` to form a vector of three 16-bit 6637 * floating-point numbers. */ 6638 static inline SIMD_CPPFUNC half3 make_half3(_Float16 x, half2 yz) { 6639 return ::simd_make_half3(x, yz); 6640 } 6641 6642 /*! @abstract Concatenates `xy` and `z` to form a vector of three 16-bit 6643 * floating-point numbers. */ 6644 static inline SIMD_CPPFUNC half3 make_half3(half2 xy, _Float16 z) { 6645 return ::simd_make_half3(xy, z); 6646 } 6647 6648 /*! @abstract Truncates or zero-extends `other` to form a vector of three 6649 * 16-bit floating-point numbers. */ 6650 template <typename typeN> static SIMD_CPPFUNC half3 make_half3(typeN other) { 6651 return ::simd_make_half3(other); 6652 } 6653 6654 /*! @abstract Extends `other` to form a vector of three 16-bit floating- 6655 * point numbers. The contents of the newly-created vector lanes are 6656 * unspecified. */ 6657 template <typename typeN> static SIMD_CPPFUNC half3 make_half3_undef(typeN other) { 6658 return ::simd_make_half3_undef(other); 6659 } 6660 6661 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 6662 * 16-bit floating-point numbers. */ 6663 static inline SIMD_CPPFUNC half4 make_half4(_Float16 x, _Float16 y, _Float16 z, _Float16 w) { 6664 return ::simd_make_half4(x, y, z, w); 6665 } 6666 6667 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 16-bit 6668 * floating-point numbers. */ 6669 static inline SIMD_CPPFUNC half4 make_half4(_Float16 x, _Float16 y, half2 zw) { 6670 return ::simd_make_half4(x, y, zw); 6671 } 6672 6673 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 16-bit 6674 * floating-point numbers. */ 6675 static inline SIMD_CPPFUNC half4 make_half4(_Float16 x, half2 yz, _Float16 w) { 6676 return ::simd_make_half4(x, yz, w); 6677 } 6678 6679 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 16-bit 6680 * floating-point numbers. */ 6681 static inline SIMD_CPPFUNC half4 make_half4(half2 xy, _Float16 z, _Float16 w) { 6682 return ::simd_make_half4(xy, z, w); 6683 } 6684 6685 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 16-bit 6686 * floating-point numbers. */ 6687 static inline SIMD_CPPFUNC half4 make_half4(_Float16 x, half3 yzw) { 6688 return ::simd_make_half4(x, yzw); 6689 } 6690 6691 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 16-bit 6692 * floating-point numbers. */ 6693 static inline SIMD_CPPFUNC half4 make_half4(half2 xy, half2 zw) { 6694 return ::simd_make_half4(xy, zw); 6695 } 6696 6697 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 16-bit 6698 * floating-point numbers. */ 6699 static inline SIMD_CPPFUNC half4 make_half4(half3 xyz, _Float16 w) { 6700 return ::simd_make_half4(xyz, w); 6701 } 6702 6703 /*! @abstract Truncates or zero-extends `other` to form a vector of four 6704 * 16-bit floating-point numbers. */ 6705 template <typename typeN> static SIMD_CPPFUNC half4 make_half4(typeN other) { 6706 return ::simd_make_half4(other); 6707 } 6708 6709 /*! @abstract Extends `other` to form a vector of four 16-bit floating-point 6710 * numbers. The contents of the newly-created vector lanes are unspecified. */ 6711 template <typename typeN> static SIMD_CPPFUNC half4 make_half4_undef(typeN other) { 6712 return ::simd_make_half4_undef(other); 6713 } 6714 6715 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 16-bit 6716 * floating-point numbers. */ 6717 static inline SIMD_CPPFUNC half8 make_half8(half4 lo, half4 hi) { 6718 return ::simd_make_half8(lo, hi); 6719 } 6720 6721 /*! @abstract Truncates or zero-extends `other` to form a vector of eight 6722 * 16-bit floating-point numbers. */ 6723 template <typename typeN> static SIMD_CPPFUNC half8 make_half8(typeN other) { 6724 return ::simd_make_half8(other); 6725 } 6726 6727 /*! @abstract Extends `other` to form a vector of eight 16-bit floating- 6728 * point numbers. The contents of the newly-created vector lanes are 6729 * unspecified. */ 6730 template <typename typeN> static SIMD_CPPFUNC half8 make_half8_undef(typeN other) { 6731 return ::simd_make_half8_undef(other); 6732 } 6733 6734 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 16-bit 6735 * floating-point numbers. */ 6736 static inline SIMD_CPPFUNC half16 make_half16(half8 lo, half8 hi) { 6737 return ::simd_make_half16(lo, hi); 6738 } 6739 6740 /*! @abstract Truncates or zero-extends `other` to form a vector of sixteen 6741 * 16-bit floating-point numbers. */ 6742 template <typename typeN> static SIMD_CPPFUNC half16 make_half16(typeN other) { 6743 return ::simd_make_half16(other); 6744 } 6745 6746 /*! @abstract Extends `other` to form a vector of sixteen 16-bit floating- 6747 * point numbers. The contents of the newly-created vector lanes are 6748 * unspecified. */ 6749 template <typename typeN> static SIMD_CPPFUNC half16 make_half16_undef(typeN other) { 6750 return ::simd_make_half16_undef(other); 6751 } 6752 6753 /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two 6754 * 16-bit floating-point numbers. */ 6755 static inline SIMD_CPPFUNC half32 make_half32(half16 lo, half16 hi) { 6756 return ::simd_make_half32(lo, hi); 6757 } 6758 6759 /*! @abstract Truncates or zero-extends `other` to form a vector of thirty- 6760 * two 16-bit floating-point numbers. */ 6761 template <typename typeN> static SIMD_CPPFUNC half32 make_half32(typeN other) { 6762 return ::simd_make_half32(other); 6763 } 6764 6765 /*! @abstract Extends `other` to form a vector of thirty-two 16-bit 6766 * floating-point numbers. The contents of the newly-created vector lanes 6767 * are unspecified. */ 6768 template <typename typeN> static SIMD_CPPFUNC half32 make_half32_undef(typeN other) { 6769 return ::simd_make_half32_undef(other); 6770 } 6771 6772 /*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit signed 6773 * (twos-complement) integers. */ 6774 static inline SIMD_CPPFUNC int2 make_int2(int x, int y) { 6775 return ::simd_make_int2(x, y); 6776 } 6777 6778 /*! @abstract Truncates or zero-extends `other` to form a vector of two 6779 * 32-bit signed (twos-complement) integers. */ 6780 template <typename typeN> static SIMD_CPPFUNC int2 make_int2(typeN other) { 6781 return ::simd_make_int2(other); 6782 } 6783 6784 /*! @abstract Extends `other` to form a vector of two 32-bit signed (twos- 6785 * complement) integers. The contents of the newly-created vector lanes are 6786 * unspecified. */ 6787 template <typename typeN> static SIMD_CPPFUNC int2 make_int2_undef(typeN other) { 6788 return ::simd_make_int2_undef(other); 6789 } 6790 6791 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit 6792 * signed (twos-complement) integers. */ 6793 static inline SIMD_CPPFUNC int3 make_int3(int x, int y, int z) { 6794 return ::simd_make_int3(x, y, z); 6795 } 6796 6797 /*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit 6798 * signed (twos-complement) integers. */ 6799 static inline SIMD_CPPFUNC int3 make_int3(int x, int2 yz) { 6800 return ::simd_make_int3(x, yz); 6801 } 6802 6803 /*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit 6804 * signed (twos-complement) integers. */ 6805 static inline SIMD_CPPFUNC int3 make_int3(int2 xy, int z) { 6806 return ::simd_make_int3(xy, z); 6807 } 6808 6809 /*! @abstract Truncates or zero-extends `other` to form a vector of three 6810 * 32-bit signed (twos-complement) integers. */ 6811 template <typename typeN> static SIMD_CPPFUNC int3 make_int3(typeN other) { 6812 return ::simd_make_int3(other); 6813 } 6814 6815 /*! @abstract Extends `other` to form a vector of three 32-bit signed (twos- 6816 * complement) integers. The contents of the newly-created vector lanes are 6817 * unspecified. */ 6818 template <typename typeN> static SIMD_CPPFUNC int3 make_int3_undef(typeN other) { 6819 return ::simd_make_int3_undef(other); 6820 } 6821 6822 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 6823 * 32-bit signed (twos-complement) integers. */ 6824 static inline SIMD_CPPFUNC int4 make_int4(int x, int y, int z, int w) { 6825 return ::simd_make_int4(x, y, z, w); 6826 } 6827 6828 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit 6829 * signed (twos-complement) integers. */ 6830 static inline SIMD_CPPFUNC int4 make_int4(int x, int y, int2 zw) { 6831 return ::simd_make_int4(x, y, zw); 6832 } 6833 6834 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit 6835 * signed (twos-complement) integers. */ 6836 static inline SIMD_CPPFUNC int4 make_int4(int x, int2 yz, int w) { 6837 return ::simd_make_int4(x, yz, w); 6838 } 6839 6840 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit 6841 * signed (twos-complement) integers. */ 6842 static inline SIMD_CPPFUNC int4 make_int4(int2 xy, int z, int w) { 6843 return ::simd_make_int4(xy, z, w); 6844 } 6845 6846 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit 6847 * signed (twos-complement) integers. */ 6848 static inline SIMD_CPPFUNC int4 make_int4(int x, int3 yzw) { 6849 return ::simd_make_int4(x, yzw); 6850 } 6851 6852 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit 6853 * signed (twos-complement) integers. */ 6854 static inline SIMD_CPPFUNC int4 make_int4(int2 xy, int2 zw) { 6855 return ::simd_make_int4(xy, zw); 6856 } 6857 6858 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit 6859 * signed (twos-complement) integers. */ 6860 static inline SIMD_CPPFUNC int4 make_int4(int3 xyz, int w) { 6861 return ::simd_make_int4(xyz, w); 6862 } 6863 6864 /*! @abstract Truncates or zero-extends `other` to form a vector of four 6865 * 32-bit signed (twos-complement) integers. */ 6866 template <typename typeN> static SIMD_CPPFUNC int4 make_int4(typeN other) { 6867 return ::simd_make_int4(other); 6868 } 6869 6870 /*! @abstract Extends `other` to form a vector of four 32-bit signed (twos- 6871 * complement) integers. The contents of the newly-created vector lanes are 6872 * unspecified. */ 6873 template <typename typeN> static SIMD_CPPFUNC int4 make_int4_undef(typeN other) { 6874 return ::simd_make_int4_undef(other); 6875 } 6876 6877 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit 6878 * signed (twos-complement) integers. */ 6879 static inline SIMD_CPPFUNC int8 make_int8(int4 lo, int4 hi) { 6880 return ::simd_make_int8(lo, hi); 6881 } 6882 6883 /*! @abstract Truncates or zero-extends `other` to form a vector of eight 6884 * 32-bit signed (twos-complement) integers. */ 6885 template <typename typeN> static SIMD_CPPFUNC int8 make_int8(typeN other) { 6886 return ::simd_make_int8(other); 6887 } 6888 6889 /*! @abstract Extends `other` to form a vector of eight 32-bit signed (twos- 6890 * complement) integers. The contents of the newly-created vector lanes are 6891 * unspecified. */ 6892 template <typename typeN> static SIMD_CPPFUNC int8 make_int8_undef(typeN other) { 6893 return ::simd_make_int8_undef(other); 6894 } 6895 6896 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit 6897 * signed (twos-complement) integers. */ 6898 static inline SIMD_CPPFUNC int16 make_int16(int8 lo, int8 hi) { 6899 return ::simd_make_int16(lo, hi); 6900 } 6901 6902 /*! @abstract Truncates or zero-extends `other` to form a vector of sixteen 6903 * 32-bit signed (twos-complement) integers. */ 6904 template <typename typeN> static SIMD_CPPFUNC int16 make_int16(typeN other) { 6905 return ::simd_make_int16(other); 6906 } 6907 6908 /*! @abstract Extends `other` to form a vector of sixteen 32-bit signed 6909 * (twos-complement) integers. The contents of the newly-created vector 6910 * lanes are unspecified. */ 6911 template <typename typeN> static SIMD_CPPFUNC int16 make_int16_undef(typeN other) { 6912 return ::simd_make_int16_undef(other); 6913 } 6914 6915 /*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit 6916 * unsigned integers. */ 6917 static inline SIMD_CPPFUNC uint2 make_uint2(unsigned int x, unsigned int y) { 6918 return ::simd_make_uint2(x, y); 6919 } 6920 6921 /*! @abstract Truncates or zero-extends `other` to form a vector of two 6922 * 32-bit unsigned integers. */ 6923 template <typename typeN> static SIMD_CPPFUNC uint2 make_uint2(typeN other) { 6924 return ::simd_make_uint2(other); 6925 } 6926 6927 /*! @abstract Extends `other` to form a vector of two 32-bit unsigned 6928 * integers. The contents of the newly-created vector lanes are 6929 * unspecified. */ 6930 template <typename typeN> static SIMD_CPPFUNC uint2 make_uint2_undef(typeN other) { 6931 return ::simd_make_uint2_undef(other); 6932 } 6933 6934 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit 6935 * unsigned integers. */ 6936 static inline SIMD_CPPFUNC uint3 make_uint3(unsigned int x, unsigned int y, unsigned int z) { 6937 return ::simd_make_uint3(x, y, z); 6938 } 6939 6940 /*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit 6941 * unsigned integers. */ 6942 static inline SIMD_CPPFUNC uint3 make_uint3(unsigned int x, uint2 yz) { 6943 return ::simd_make_uint3(x, yz); 6944 } 6945 6946 /*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit 6947 * unsigned integers. */ 6948 static inline SIMD_CPPFUNC uint3 make_uint3(uint2 xy, unsigned int z) { 6949 return ::simd_make_uint3(xy, z); 6950 } 6951 6952 /*! @abstract Truncates or zero-extends `other` to form a vector of three 6953 * 32-bit unsigned integers. */ 6954 template <typename typeN> static SIMD_CPPFUNC uint3 make_uint3(typeN other) { 6955 return ::simd_make_uint3(other); 6956 } 6957 6958 /*! @abstract Extends `other` to form a vector of three 32-bit unsigned 6959 * integers. The contents of the newly-created vector lanes are 6960 * unspecified. */ 6961 template <typename typeN> static SIMD_CPPFUNC uint3 make_uint3_undef(typeN other) { 6962 return ::simd_make_uint3_undef(other); 6963 } 6964 6965 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 6966 * 32-bit unsigned integers. */ 6967 static inline SIMD_CPPFUNC uint4 make_uint4(unsigned int x, unsigned int y, unsigned int z, unsigned int w) { 6968 return ::simd_make_uint4(x, y, z, w); 6969 } 6970 6971 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit 6972 * unsigned integers. */ 6973 static inline SIMD_CPPFUNC uint4 make_uint4(unsigned int x, unsigned int y, uint2 zw) { 6974 return ::simd_make_uint4(x, y, zw); 6975 } 6976 6977 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit 6978 * unsigned integers. */ 6979 static inline SIMD_CPPFUNC uint4 make_uint4(unsigned int x, uint2 yz, unsigned int w) { 6980 return ::simd_make_uint4(x, yz, w); 6981 } 6982 6983 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit 6984 * unsigned integers. */ 6985 static inline SIMD_CPPFUNC uint4 make_uint4(uint2 xy, unsigned int z, unsigned int w) { 6986 return ::simd_make_uint4(xy, z, w); 6987 } 6988 6989 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit 6990 * unsigned integers. */ 6991 static inline SIMD_CPPFUNC uint4 make_uint4(unsigned int x, uint3 yzw) { 6992 return ::simd_make_uint4(x, yzw); 6993 } 6994 6995 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit 6996 * unsigned integers. */ 6997 static inline SIMD_CPPFUNC uint4 make_uint4(uint2 xy, uint2 zw) { 6998 return ::simd_make_uint4(xy, zw); 6999 } 7000 7001 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit 7002 * unsigned integers. */ 7003 static inline SIMD_CPPFUNC uint4 make_uint4(uint3 xyz, unsigned int w) { 7004 return ::simd_make_uint4(xyz, w); 7005 } 7006 7007 /*! @abstract Truncates or zero-extends `other` to form a vector of four 7008 * 32-bit unsigned integers. */ 7009 template <typename typeN> static SIMD_CPPFUNC uint4 make_uint4(typeN other) { 7010 return ::simd_make_uint4(other); 7011 } 7012 7013 /*! @abstract Extends `other` to form a vector of four 32-bit unsigned 7014 * integers. The contents of the newly-created vector lanes are 7015 * unspecified. */ 7016 template <typename typeN> static SIMD_CPPFUNC uint4 make_uint4_undef(typeN other) { 7017 return ::simd_make_uint4_undef(other); 7018 } 7019 7020 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit 7021 * unsigned integers. */ 7022 static inline SIMD_CPPFUNC uint8 make_uint8(uint4 lo, uint4 hi) { 7023 return ::simd_make_uint8(lo, hi); 7024 } 7025 7026 /*! @abstract Truncates or zero-extends `other` to form a vector of eight 7027 * 32-bit unsigned integers. */ 7028 template <typename typeN> static SIMD_CPPFUNC uint8 make_uint8(typeN other) { 7029 return ::simd_make_uint8(other); 7030 } 7031 7032 /*! @abstract Extends `other` to form a vector of eight 32-bit unsigned 7033 * integers. The contents of the newly-created vector lanes are 7034 * unspecified. */ 7035 template <typename typeN> static SIMD_CPPFUNC uint8 make_uint8_undef(typeN other) { 7036 return ::simd_make_uint8_undef(other); 7037 } 7038 7039 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit 7040 * unsigned integers. */ 7041 static inline SIMD_CPPFUNC uint16 make_uint16(uint8 lo, uint8 hi) { 7042 return ::simd_make_uint16(lo, hi); 7043 } 7044 7045 /*! @abstract Truncates or zero-extends `other` to form a vector of sixteen 7046 * 32-bit unsigned integers. */ 7047 template <typename typeN> static SIMD_CPPFUNC uint16 make_uint16(typeN other) { 7048 return ::simd_make_uint16(other); 7049 } 7050 7051 /*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned 7052 * integers. The contents of the newly-created vector lanes are 7053 * unspecified. */ 7054 template <typename typeN> static SIMD_CPPFUNC uint16 make_uint16_undef(typeN other) { 7055 return ::simd_make_uint16_undef(other); 7056 } 7057 7058 /*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit 7059 * floating-point numbers. */ 7060 static inline SIMD_CPPFUNC float2 make_float2(float x, float y) { 7061 return ::simd_make_float2(x, y); 7062 } 7063 7064 /*! @abstract Truncates or zero-extends `other` to form a vector of two 7065 * 32-bit floating-point numbers. */ 7066 template <typename typeN> static SIMD_CPPFUNC float2 make_float2(typeN other) { 7067 return ::simd_make_float2(other); 7068 } 7069 7070 /*! @abstract Extends `other` to form a vector of two 32-bit floating-point 7071 * numbers. The contents of the newly-created vector lanes are unspecified. */ 7072 template <typename typeN> static SIMD_CPPFUNC float2 make_float2_undef(typeN other) { 7073 return ::simd_make_float2_undef(other); 7074 } 7075 7076 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit 7077 * floating-point numbers. */ 7078 static inline SIMD_CPPFUNC float3 make_float3(float x, float y, float z) { 7079 return ::simd_make_float3(x, y, z); 7080 } 7081 7082 /*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit 7083 * floating-point numbers. */ 7084 static inline SIMD_CPPFUNC float3 make_float3(float x, float2 yz) { 7085 return ::simd_make_float3(x, yz); 7086 } 7087 7088 /*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit 7089 * floating-point numbers. */ 7090 static inline SIMD_CPPFUNC float3 make_float3(float2 xy, float z) { 7091 return ::simd_make_float3(xy, z); 7092 } 7093 7094 /*! @abstract Truncates or zero-extends `other` to form a vector of three 7095 * 32-bit floating-point numbers. */ 7096 template <typename typeN> static SIMD_CPPFUNC float3 make_float3(typeN other) { 7097 return ::simd_make_float3(other); 7098 } 7099 7100 /*! @abstract Extends `other` to form a vector of three 32-bit floating- 7101 * point numbers. The contents of the newly-created vector lanes are 7102 * unspecified. */ 7103 template <typename typeN> static SIMD_CPPFUNC float3 make_float3_undef(typeN other) { 7104 return ::simd_make_float3_undef(other); 7105 } 7106 7107 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 7108 * 32-bit floating-point numbers. */ 7109 static inline SIMD_CPPFUNC float4 make_float4(float x, float y, float z, float w) { 7110 return ::simd_make_float4(x, y, z, w); 7111 } 7112 7113 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit 7114 * floating-point numbers. */ 7115 static inline SIMD_CPPFUNC float4 make_float4(float x, float y, float2 zw) { 7116 return ::simd_make_float4(x, y, zw); 7117 } 7118 7119 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit 7120 * floating-point numbers. */ 7121 static inline SIMD_CPPFUNC float4 make_float4(float x, float2 yz, float w) { 7122 return ::simd_make_float4(x, yz, w); 7123 } 7124 7125 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit 7126 * floating-point numbers. */ 7127 static inline SIMD_CPPFUNC float4 make_float4(float2 xy, float z, float w) { 7128 return ::simd_make_float4(xy, z, w); 7129 } 7130 7131 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit 7132 * floating-point numbers. */ 7133 static inline SIMD_CPPFUNC float4 make_float4(float x, float3 yzw) { 7134 return ::simd_make_float4(x, yzw); 7135 } 7136 7137 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit 7138 * floating-point numbers. */ 7139 static inline SIMD_CPPFUNC float4 make_float4(float2 xy, float2 zw) { 7140 return ::simd_make_float4(xy, zw); 7141 } 7142 7143 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit 7144 * floating-point numbers. */ 7145 static inline SIMD_CPPFUNC float4 make_float4(float3 xyz, float w) { 7146 return ::simd_make_float4(xyz, w); 7147 } 7148 7149 /*! @abstract Truncates or zero-extends `other` to form a vector of four 7150 * 32-bit floating-point numbers. */ 7151 template <typename typeN> static SIMD_CPPFUNC float4 make_float4(typeN other) { 7152 return ::simd_make_float4(other); 7153 } 7154 7155 /*! @abstract Extends `other` to form a vector of four 32-bit floating-point 7156 * numbers. The contents of the newly-created vector lanes are unspecified. */ 7157 template <typename typeN> static SIMD_CPPFUNC float4 make_float4_undef(typeN other) { 7158 return ::simd_make_float4_undef(other); 7159 } 7160 7161 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit 7162 * floating-point numbers. */ 7163 static inline SIMD_CPPFUNC float8 make_float8(float4 lo, float4 hi) { 7164 return ::simd_make_float8(lo, hi); 7165 } 7166 7167 /*! @abstract Truncates or zero-extends `other` to form a vector of eight 7168 * 32-bit floating-point numbers. */ 7169 template <typename typeN> static SIMD_CPPFUNC float8 make_float8(typeN other) { 7170 return ::simd_make_float8(other); 7171 } 7172 7173 /*! @abstract Extends `other` to form a vector of eight 32-bit floating- 7174 * point numbers. The contents of the newly-created vector lanes are 7175 * unspecified. */ 7176 template <typename typeN> static SIMD_CPPFUNC float8 make_float8_undef(typeN other) { 7177 return ::simd_make_float8_undef(other); 7178 } 7179 7180 /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit 7181 * floating-point numbers. */ 7182 static inline SIMD_CPPFUNC float16 make_float16(float8 lo, float8 hi) { 7183 return ::simd_make_float16(lo, hi); 7184 } 7185 7186 /*! @abstract Truncates or zero-extends `other` to form a vector of sixteen 7187 * 32-bit floating-point numbers. */ 7188 template <typename typeN> static SIMD_CPPFUNC float16 make_float16(typeN other) { 7189 return ::simd_make_float16(other); 7190 } 7191 7192 /*! @abstract Extends `other` to form a vector of sixteen 32-bit floating- 7193 * point numbers. The contents of the newly-created vector lanes are 7194 * unspecified. */ 7195 template <typename typeN> static SIMD_CPPFUNC float16 make_float16_undef(typeN other) { 7196 return ::simd_make_float16_undef(other); 7197 } 7198 7199 /*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit signed 7200 * (twos-complement) integers. */ 7201 static inline SIMD_CPPFUNC long2 make_long2(long1 x, long1 y) { 7202 return ::simd_make_long2(x, y); 7203 } 7204 7205 /*! @abstract Truncates or zero-extends `other` to form a vector of two 7206 * 64-bit signed (twos-complement) integers. */ 7207 template <typename typeN> static SIMD_CPPFUNC long2 make_long2(typeN other) { 7208 return ::simd_make_long2(other); 7209 } 7210 7211 /*! @abstract Extends `other` to form a vector of two 64-bit signed (twos- 7212 * complement) integers. The contents of the newly-created vector lanes are 7213 * unspecified. */ 7214 template <typename typeN> static SIMD_CPPFUNC long2 make_long2_undef(typeN other) { 7215 return ::simd_make_long2_undef(other); 7216 } 7217 7218 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit 7219 * signed (twos-complement) integers. */ 7220 static inline SIMD_CPPFUNC long3 make_long3(long1 x, long1 y, long1 z) { 7221 return ::simd_make_long3(x, y, z); 7222 } 7223 7224 /*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit 7225 * signed (twos-complement) integers. */ 7226 static inline SIMD_CPPFUNC long3 make_long3(long1 x, long2 yz) { 7227 return ::simd_make_long3(x, yz); 7228 } 7229 7230 /*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit 7231 * signed (twos-complement) integers. */ 7232 static inline SIMD_CPPFUNC long3 make_long3(long2 xy, long1 z) { 7233 return ::simd_make_long3(xy, z); 7234 } 7235 7236 /*! @abstract Truncates or zero-extends `other` to form a vector of three 7237 * 64-bit signed (twos-complement) integers. */ 7238 template <typename typeN> static SIMD_CPPFUNC long3 make_long3(typeN other) { 7239 return ::simd_make_long3(other); 7240 } 7241 7242 /*! @abstract Extends `other` to form a vector of three 64-bit signed (twos- 7243 * complement) integers. The contents of the newly-created vector lanes are 7244 * unspecified. */ 7245 template <typename typeN> static SIMD_CPPFUNC long3 make_long3_undef(typeN other) { 7246 return ::simd_make_long3_undef(other); 7247 } 7248 7249 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 7250 * 64-bit signed (twos-complement) integers. */ 7251 static inline SIMD_CPPFUNC long4 make_long4(long1 x, long1 y, long1 z, long1 w) { 7252 return ::simd_make_long4(x, y, z, w); 7253 } 7254 7255 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit 7256 * signed (twos-complement) integers. */ 7257 static inline SIMD_CPPFUNC long4 make_long4(long1 x, long1 y, long2 zw) { 7258 return ::simd_make_long4(x, y, zw); 7259 } 7260 7261 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit 7262 * signed (twos-complement) integers. */ 7263 static inline SIMD_CPPFUNC long4 make_long4(long1 x, long2 yz, long1 w) { 7264 return ::simd_make_long4(x, yz, w); 7265 } 7266 7267 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit 7268 * signed (twos-complement) integers. */ 7269 static inline SIMD_CPPFUNC long4 make_long4(long2 xy, long1 z, long1 w) { 7270 return ::simd_make_long4(xy, z, w); 7271 } 7272 7273 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit 7274 * signed (twos-complement) integers. */ 7275 static inline SIMD_CPPFUNC long4 make_long4(long1 x, long3 yzw) { 7276 return ::simd_make_long4(x, yzw); 7277 } 7278 7279 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit 7280 * signed (twos-complement) integers. */ 7281 static inline SIMD_CPPFUNC long4 make_long4(long2 xy, long2 zw) { 7282 return ::simd_make_long4(xy, zw); 7283 } 7284 7285 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit 7286 * signed (twos-complement) integers. */ 7287 static inline SIMD_CPPFUNC long4 make_long4(long3 xyz, long1 w) { 7288 return ::simd_make_long4(xyz, w); 7289 } 7290 7291 /*! @abstract Truncates or zero-extends `other` to form a vector of four 7292 * 64-bit signed (twos-complement) integers. */ 7293 template <typename typeN> static SIMD_CPPFUNC long4 make_long4(typeN other) { 7294 return ::simd_make_long4(other); 7295 } 7296 7297 /*! @abstract Extends `other` to form a vector of four 64-bit signed (twos- 7298 * complement) integers. The contents of the newly-created vector lanes are 7299 * unspecified. */ 7300 template <typename typeN> static SIMD_CPPFUNC long4 make_long4_undef(typeN other) { 7301 return ::simd_make_long4_undef(other); 7302 } 7303 7304 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit 7305 * signed (twos-complement) integers. */ 7306 static inline SIMD_CPPFUNC long8 make_long8(long4 lo, long4 hi) { 7307 return ::simd_make_long8(lo, hi); 7308 } 7309 7310 /*! @abstract Truncates or zero-extends `other` to form a vector of eight 7311 * 64-bit signed (twos-complement) integers. */ 7312 template <typename typeN> static SIMD_CPPFUNC long8 make_long8(typeN other) { 7313 return ::simd_make_long8(other); 7314 } 7315 7316 /*! @abstract Extends `other` to form a vector of eight 64-bit signed (twos- 7317 * complement) integers. The contents of the newly-created vector lanes are 7318 * unspecified. */ 7319 template <typename typeN> static SIMD_CPPFUNC long8 make_long8_undef(typeN other) { 7320 return ::simd_make_long8_undef(other); 7321 } 7322 7323 /*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit 7324 * unsigned integers. */ 7325 static inline SIMD_CPPFUNC ulong2 make_ulong2(ulong1 x, ulong1 y) { 7326 return ::simd_make_ulong2(x, y); 7327 } 7328 7329 /*! @abstract Truncates or zero-extends `other` to form a vector of two 7330 * 64-bit unsigned integers. */ 7331 template <typename typeN> static SIMD_CPPFUNC ulong2 make_ulong2(typeN other) { 7332 return ::simd_make_ulong2(other); 7333 } 7334 7335 /*! @abstract Extends `other` to form a vector of two 64-bit unsigned 7336 * integers. The contents of the newly-created vector lanes are 7337 * unspecified. */ 7338 template <typename typeN> static SIMD_CPPFUNC ulong2 make_ulong2_undef(typeN other) { 7339 return ::simd_make_ulong2_undef(other); 7340 } 7341 7342 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit 7343 * unsigned integers. */ 7344 static inline SIMD_CPPFUNC ulong3 make_ulong3(ulong1 x, ulong1 y, ulong1 z) { 7345 return ::simd_make_ulong3(x, y, z); 7346 } 7347 7348 /*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit 7349 * unsigned integers. */ 7350 static inline SIMD_CPPFUNC ulong3 make_ulong3(ulong1 x, ulong2 yz) { 7351 return ::simd_make_ulong3(x, yz); 7352 } 7353 7354 /*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit 7355 * unsigned integers. */ 7356 static inline SIMD_CPPFUNC ulong3 make_ulong3(ulong2 xy, ulong1 z) { 7357 return ::simd_make_ulong3(xy, z); 7358 } 7359 7360 /*! @abstract Truncates or zero-extends `other` to form a vector of three 7361 * 64-bit unsigned integers. */ 7362 template <typename typeN> static SIMD_CPPFUNC ulong3 make_ulong3(typeN other) { 7363 return ::simd_make_ulong3(other); 7364 } 7365 7366 /*! @abstract Extends `other` to form a vector of three 64-bit unsigned 7367 * integers. The contents of the newly-created vector lanes are 7368 * unspecified. */ 7369 template <typename typeN> static SIMD_CPPFUNC ulong3 make_ulong3_undef(typeN other) { 7370 return ::simd_make_ulong3_undef(other); 7371 } 7372 7373 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 7374 * 64-bit unsigned integers. */ 7375 static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong1 x, ulong1 y, ulong1 z, ulong1 w) { 7376 return ::simd_make_ulong4(x, y, z, w); 7377 } 7378 7379 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit 7380 * unsigned integers. */ 7381 static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong1 x, ulong1 y, ulong2 zw) { 7382 return ::simd_make_ulong4(x, y, zw); 7383 } 7384 7385 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit 7386 * unsigned integers. */ 7387 static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong1 x, ulong2 yz, ulong1 w) { 7388 return ::simd_make_ulong4(x, yz, w); 7389 } 7390 7391 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit 7392 * unsigned integers. */ 7393 static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong2 xy, ulong1 z, ulong1 w) { 7394 return ::simd_make_ulong4(xy, z, w); 7395 } 7396 7397 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit 7398 * unsigned integers. */ 7399 static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong1 x, ulong3 yzw) { 7400 return ::simd_make_ulong4(x, yzw); 7401 } 7402 7403 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit 7404 * unsigned integers. */ 7405 static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong2 xy, ulong2 zw) { 7406 return ::simd_make_ulong4(xy, zw); 7407 } 7408 7409 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit 7410 * unsigned integers. */ 7411 static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong3 xyz, ulong1 w) { 7412 return ::simd_make_ulong4(xyz, w); 7413 } 7414 7415 /*! @abstract Truncates or zero-extends `other` to form a vector of four 7416 * 64-bit unsigned integers. */ 7417 template <typename typeN> static SIMD_CPPFUNC ulong4 make_ulong4(typeN other) { 7418 return ::simd_make_ulong4(other); 7419 } 7420 7421 /*! @abstract Extends `other` to form a vector of four 64-bit unsigned 7422 * integers. The contents of the newly-created vector lanes are 7423 * unspecified. */ 7424 template <typename typeN> static SIMD_CPPFUNC ulong4 make_ulong4_undef(typeN other) { 7425 return ::simd_make_ulong4_undef(other); 7426 } 7427 7428 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit 7429 * unsigned integers. */ 7430 static inline SIMD_CPPFUNC ulong8 make_ulong8(ulong4 lo, ulong4 hi) { 7431 return ::simd_make_ulong8(lo, hi); 7432 } 7433 7434 /*! @abstract Truncates or zero-extends `other` to form a vector of eight 7435 * 64-bit unsigned integers. */ 7436 template <typename typeN> static SIMD_CPPFUNC ulong8 make_ulong8(typeN other) { 7437 return ::simd_make_ulong8(other); 7438 } 7439 7440 /*! @abstract Extends `other` to form a vector of eight 64-bit unsigned 7441 * integers. The contents of the newly-created vector lanes are 7442 * unspecified. */ 7443 template <typename typeN> static SIMD_CPPFUNC ulong8 make_ulong8_undef(typeN other) { 7444 return ::simd_make_ulong8_undef(other); 7445 } 7446 7447 /*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit 7448 * floating-point numbers. */ 7449 static inline SIMD_CPPFUNC double2 make_double2(double x, double y) { 7450 return ::simd_make_double2(x, y); 7451 } 7452 7453 /*! @abstract Truncates or zero-extends `other` to form a vector of two 7454 * 64-bit floating-point numbers. */ 7455 template <typename typeN> static SIMD_CPPFUNC double2 make_double2(typeN other) { 7456 return ::simd_make_double2(other); 7457 } 7458 7459 /*! @abstract Extends `other` to form a vector of two 64-bit floating-point 7460 * numbers. The contents of the newly-created vector lanes are unspecified. */ 7461 template <typename typeN> static SIMD_CPPFUNC double2 make_double2_undef(typeN other) { 7462 return ::simd_make_double2_undef(other); 7463 } 7464 7465 /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit 7466 * floating-point numbers. */ 7467 static inline SIMD_CPPFUNC double3 make_double3(double x, double y, double z) { 7468 return ::simd_make_double3(x, y, z); 7469 } 7470 7471 /*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit 7472 * floating-point numbers. */ 7473 static inline SIMD_CPPFUNC double3 make_double3(double x, double2 yz) { 7474 return ::simd_make_double3(x, yz); 7475 } 7476 7477 /*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit 7478 * floating-point numbers. */ 7479 static inline SIMD_CPPFUNC double3 make_double3(double2 xy, double z) { 7480 return ::simd_make_double3(xy, z); 7481 } 7482 7483 /*! @abstract Truncates or zero-extends `other` to form a vector of three 7484 * 64-bit floating-point numbers. */ 7485 template <typename typeN> static SIMD_CPPFUNC double3 make_double3(typeN other) { 7486 return ::simd_make_double3(other); 7487 } 7488 7489 /*! @abstract Extends `other` to form a vector of three 64-bit floating- 7490 * point numbers. The contents of the newly-created vector lanes are 7491 * unspecified. */ 7492 template <typename typeN> static SIMD_CPPFUNC double3 make_double3_undef(typeN other) { 7493 return ::simd_make_double3_undef(other); 7494 } 7495 7496 /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four 7497 * 64-bit floating-point numbers. */ 7498 static inline SIMD_CPPFUNC double4 make_double4(double x, double y, double z, double w) { 7499 return ::simd_make_double4(x, y, z, w); 7500 } 7501 7502 /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit 7503 * floating-point numbers. */ 7504 static inline SIMD_CPPFUNC double4 make_double4(double x, double y, double2 zw) { 7505 return ::simd_make_double4(x, y, zw); 7506 } 7507 7508 /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit 7509 * floating-point numbers. */ 7510 static inline SIMD_CPPFUNC double4 make_double4(double x, double2 yz, double w) { 7511 return ::simd_make_double4(x, yz, w); 7512 } 7513 7514 /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit 7515 * floating-point numbers. */ 7516 static inline SIMD_CPPFUNC double4 make_double4(double2 xy, double z, double w) { 7517 return ::simd_make_double4(xy, z, w); 7518 } 7519 7520 /*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit 7521 * floating-point numbers. */ 7522 static inline SIMD_CPPFUNC double4 make_double4(double x, double3 yzw) { 7523 return ::simd_make_double4(x, yzw); 7524 } 7525 7526 /*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit 7527 * floating-point numbers. */ 7528 static inline SIMD_CPPFUNC double4 make_double4(double2 xy, double2 zw) { 7529 return ::simd_make_double4(xy, zw); 7530 } 7531 7532 /*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit 7533 * floating-point numbers. */ 7534 static inline SIMD_CPPFUNC double4 make_double4(double3 xyz, double w) { 7535 return ::simd_make_double4(xyz, w); 7536 } 7537 7538 /*! @abstract Truncates or zero-extends `other` to form a vector of four 7539 * 64-bit floating-point numbers. */ 7540 template <typename typeN> static SIMD_CPPFUNC double4 make_double4(typeN other) { 7541 return ::simd_make_double4(other); 7542 } 7543 7544 /*! @abstract Extends `other` to form a vector of four 64-bit floating-point 7545 * numbers. The contents of the newly-created vector lanes are unspecified. */ 7546 template <typename typeN> static SIMD_CPPFUNC double4 make_double4_undef(typeN other) { 7547 return ::simd_make_double4_undef(other); 7548 } 7549 7550 /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit 7551 * floating-point numbers. */ 7552 static inline SIMD_CPPFUNC double8 make_double8(double4 lo, double4 hi) { 7553 return ::simd_make_double8(lo, hi); 7554 } 7555 7556 /*! @abstract Truncates or zero-extends `other` to form a vector of eight 7557 * 64-bit floating-point numbers. */ 7558 template <typename typeN> static SIMD_CPPFUNC double8 make_double8(typeN other) { 7559 return ::simd_make_double8(other); 7560 } 7561 7562 /*! @abstract Extends `other` to form a vector of eight 64-bit floating- 7563 * point numbers. The contents of the newly-created vector lanes are 7564 * unspecified. */ 7565 template <typename typeN> static SIMD_CPPFUNC double8 make_double8_undef(typeN other) { 7566 return ::simd_make_double8_undef(other); 7567 } 7568 7569 /*! @struct Vector 7570 * @abstract Templated Vector struct based on scalar type and number of 7571 * elements 7572 * @field count Number of elements in the vector 7573 * @field scalar_t The scalar type of each element 7574 * @field type The inferred simd::typeN type 7575 * @field packed_t The inferred simd::packed::typeN type 7576 * @field mask_t The return type of comparison operations */ 7577 template <typename ScalarType, size_t count> struct Vector { 7578 // static const size_t count 7579 // typedef scalar_t 7580 // typedef type 7581 // typedef packed_t 7582 // typedef mask_t 7583 }; 7584 /*! @abstract Helper type to access the simd type easily. */ 7585 template <typename ScalarType, size_t count> 7586 using Vector_t = typename Vector<ScalarType, count>::type; 7587 7588 /*! @abstract Look up the equivalent Vector struct according to the simd 7589 * type. */ 7590 template <typename typeN> struct get_traits 7591 { 7592 // using type = Vector<ScalarType, count>; 7593 }; 7594 /*! @abstract Helper type to access the Vector struct easily. 7595 * @discussion This is commonly used to query the type traits of a simd 7596 * type. 7597 * For example, simd::traits<simd::float4>::count is 4. */ 7598 template<typename typeN> 7599 using traits = typename get_traits<typeN>::type; 7600 7601 template<> struct Vector<char1, 1> { 7602 static const size_t count = 1; 7603 typedef char1 scalar_t; 7604 typedef char1 type; 7605 typedef char1 mask_t; 7606 }; 7607 7608 template <> struct get_traits<char1> 7609 { 7610 using type = Vector<char1, 1>; 7611 }; 7612 7613 template<> struct Vector<char1, 2> { 7614 static const size_t count = 2; 7615 typedef char1 scalar_t; 7616 typedef char2 type; 7617 typedef packed::char2 packed_t; 7618 typedef char2 mask_t; 7619 }; 7620 7621 template <> struct get_traits<char2> 7622 { 7623 using type = Vector<char1, 2>; 7624 }; 7625 7626 template<> struct Vector<char1, 3> { 7627 static const size_t count = 3; 7628 typedef char1 scalar_t; 7629 typedef char3 type; 7630 typedef char3 mask_t; 7631 }; 7632 7633 template <> struct get_traits<char3> 7634 { 7635 using type = Vector<char1, 3>; 7636 }; 7637 7638 template<> struct Vector<char1, 4> { 7639 static const size_t count = 4; 7640 typedef char1 scalar_t; 7641 typedef char4 type; 7642 typedef packed::char4 packed_t; 7643 typedef char4 mask_t; 7644 }; 7645 7646 template <> struct get_traits<char4> 7647 { 7648 using type = Vector<char1, 4>; 7649 }; 7650 7651 template<> struct Vector<char1, 8> { 7652 static const size_t count = 8; 7653 typedef char1 scalar_t; 7654 typedef char8 type; 7655 typedef packed::char8 packed_t; 7656 typedef char8 mask_t; 7657 }; 7658 7659 template <> struct get_traits<char8> 7660 { 7661 using type = Vector<char1, 8>; 7662 }; 7663 7664 template<> struct Vector<char1, 16> { 7665 static const size_t count = 16; 7666 typedef char1 scalar_t; 7667 typedef char16 type; 7668 typedef packed::char16 packed_t; 7669 typedef char16 mask_t; 7670 }; 7671 7672 template <> struct get_traits<char16> 7673 { 7674 using type = Vector<char1, 16>; 7675 }; 7676 7677 template<> struct Vector<char1, 32> { 7678 static const size_t count = 32; 7679 typedef char1 scalar_t; 7680 typedef char32 type; 7681 typedef packed::char32 packed_t; 7682 typedef char32 mask_t; 7683 }; 7684 7685 template <> struct get_traits<char32> 7686 { 7687 using type = Vector<char1, 32>; 7688 }; 7689 7690 template<> struct Vector<char1, 64> { 7691 static const size_t count = 64; 7692 typedef char1 scalar_t; 7693 typedef char64 type; 7694 typedef packed::char64 packed_t; 7695 typedef char64 mask_t; 7696 }; 7697 7698 template <> struct get_traits<char64> 7699 { 7700 using type = Vector<char1, 64>; 7701 }; 7702 7703 template<> struct Vector<uchar1, 1> { 7704 static const size_t count = 1; 7705 typedef uchar1 scalar_t; 7706 typedef uchar1 type; 7707 typedef char1 mask_t; 7708 }; 7709 7710 template <> struct get_traits<uchar1> 7711 { 7712 using type = Vector<uchar1, 1>; 7713 }; 7714 7715 template<> struct Vector<uchar1, 2> { 7716 static const size_t count = 2; 7717 typedef uchar1 scalar_t; 7718 typedef uchar2 type; 7719 typedef packed::uchar2 packed_t; 7720 typedef char2 mask_t; 7721 }; 7722 7723 template <> struct get_traits<uchar2> 7724 { 7725 using type = Vector<uchar1, 2>; 7726 }; 7727 7728 template<> struct Vector<uchar1, 3> { 7729 static const size_t count = 3; 7730 typedef uchar1 scalar_t; 7731 typedef uchar3 type; 7732 typedef char3 mask_t; 7733 }; 7734 7735 template <> struct get_traits<uchar3> 7736 { 7737 using type = Vector<uchar1, 3>; 7738 }; 7739 7740 template<> struct Vector<uchar1, 4> { 7741 static const size_t count = 4; 7742 typedef uchar1 scalar_t; 7743 typedef uchar4 type; 7744 typedef packed::uchar4 packed_t; 7745 typedef char4 mask_t; 7746 }; 7747 7748 template <> struct get_traits<uchar4> 7749 { 7750 using type = Vector<uchar1, 4>; 7751 }; 7752 7753 template<> struct Vector<uchar1, 8> { 7754 static const size_t count = 8; 7755 typedef uchar1 scalar_t; 7756 typedef uchar8 type; 7757 typedef packed::uchar8 packed_t; 7758 typedef char8 mask_t; 7759 }; 7760 7761 template <> struct get_traits<uchar8> 7762 { 7763 using type = Vector<uchar1, 8>; 7764 }; 7765 7766 template<> struct Vector<uchar1, 16> { 7767 static const size_t count = 16; 7768 typedef uchar1 scalar_t; 7769 typedef uchar16 type; 7770 typedef packed::uchar16 packed_t; 7771 typedef char16 mask_t; 7772 }; 7773 7774 template <> struct get_traits<uchar16> 7775 { 7776 using type = Vector<uchar1, 16>; 7777 }; 7778 7779 template<> struct Vector<uchar1, 32> { 7780 static const size_t count = 32; 7781 typedef uchar1 scalar_t; 7782 typedef uchar32 type; 7783 typedef packed::uchar32 packed_t; 7784 typedef char32 mask_t; 7785 }; 7786 7787 template <> struct get_traits<uchar32> 7788 { 7789 using type = Vector<uchar1, 32>; 7790 }; 7791 7792 template<> struct Vector<uchar1, 64> { 7793 static const size_t count = 64; 7794 typedef uchar1 scalar_t; 7795 typedef uchar64 type; 7796 typedef packed::uchar64 packed_t; 7797 typedef char64 mask_t; 7798 }; 7799 7800 template <> struct get_traits<uchar64> 7801 { 7802 using type = Vector<uchar1, 64>; 7803 }; 7804 7805 template<> struct Vector<short1, 1> { 7806 static const size_t count = 1; 7807 typedef short1 scalar_t; 7808 typedef short1 type; 7809 typedef short1 mask_t; 7810 }; 7811 7812 template <> struct get_traits<short1> 7813 { 7814 using type = Vector<short1, 1>; 7815 }; 7816 7817 template<> struct Vector<short1, 2> { 7818 static const size_t count = 2; 7819 typedef short1 scalar_t; 7820 typedef short2 type; 7821 typedef packed::short2 packed_t; 7822 typedef short2 mask_t; 7823 }; 7824 7825 template <> struct get_traits<short2> 7826 { 7827 using type = Vector<short1, 2>; 7828 }; 7829 7830 template<> struct Vector<short1, 3> { 7831 static const size_t count = 3; 7832 typedef short1 scalar_t; 7833 typedef short3 type; 7834 typedef short3 mask_t; 7835 }; 7836 7837 template <> struct get_traits<short3> 7838 { 7839 using type = Vector<short1, 3>; 7840 }; 7841 7842 template<> struct Vector<short1, 4> { 7843 static const size_t count = 4; 7844 typedef short1 scalar_t; 7845 typedef short4 type; 7846 typedef packed::short4 packed_t; 7847 typedef short4 mask_t; 7848 }; 7849 7850 template <> struct get_traits<short4> 7851 { 7852 using type = Vector<short1, 4>; 7853 }; 7854 7855 template<> struct Vector<short1, 8> { 7856 static const size_t count = 8; 7857 typedef short1 scalar_t; 7858 typedef short8 type; 7859 typedef packed::short8 packed_t; 7860 typedef short8 mask_t; 7861 }; 7862 7863 template <> struct get_traits<short8> 7864 { 7865 using type = Vector<short1, 8>; 7866 }; 7867 7868 template<> struct Vector<short1, 16> { 7869 static const size_t count = 16; 7870 typedef short1 scalar_t; 7871 typedef short16 type; 7872 typedef packed::short16 packed_t; 7873 typedef short16 mask_t; 7874 }; 7875 7876 template <> struct get_traits<short16> 7877 { 7878 using type = Vector<short1, 16>; 7879 }; 7880 7881 template<> struct Vector<short1, 32> { 7882 static const size_t count = 32; 7883 typedef short1 scalar_t; 7884 typedef short32 type; 7885 typedef packed::short32 packed_t; 7886 typedef short32 mask_t; 7887 }; 7888 7889 template <> struct get_traits<short32> 7890 { 7891 using type = Vector<short1, 32>; 7892 }; 7893 7894 template<> struct Vector<ushort1, 1> { 7895 static const size_t count = 1; 7896 typedef ushort1 scalar_t; 7897 typedef ushort1 type; 7898 typedef short1 mask_t; 7899 }; 7900 7901 template <> struct get_traits<ushort1> 7902 { 7903 using type = Vector<ushort1, 1>; 7904 }; 7905 7906 template<> struct Vector<ushort1, 2> { 7907 static const size_t count = 2; 7908 typedef ushort1 scalar_t; 7909 typedef ushort2 type; 7910 typedef packed::ushort2 packed_t; 7911 typedef short2 mask_t; 7912 }; 7913 7914 template <> struct get_traits<ushort2> 7915 { 7916 using type = Vector<ushort1, 2>; 7917 }; 7918 7919 template<> struct Vector<ushort1, 3> { 7920 static const size_t count = 3; 7921 typedef ushort1 scalar_t; 7922 typedef ushort3 type; 7923 typedef short3 mask_t; 7924 }; 7925 7926 template <> struct get_traits<ushort3> 7927 { 7928 using type = Vector<ushort1, 3>; 7929 }; 7930 7931 template<> struct Vector<ushort1, 4> { 7932 static const size_t count = 4; 7933 typedef ushort1 scalar_t; 7934 typedef ushort4 type; 7935 typedef packed::ushort4 packed_t; 7936 typedef short4 mask_t; 7937 }; 7938 7939 template <> struct get_traits<ushort4> 7940 { 7941 using type = Vector<ushort1, 4>; 7942 }; 7943 7944 template<> struct Vector<ushort1, 8> { 7945 static const size_t count = 8; 7946 typedef ushort1 scalar_t; 7947 typedef ushort8 type; 7948 typedef packed::ushort8 packed_t; 7949 typedef short8 mask_t; 7950 }; 7951 7952 template <> struct get_traits<ushort8> 7953 { 7954 using type = Vector<ushort1, 8>; 7955 }; 7956 7957 template<> struct Vector<ushort1, 16> { 7958 static const size_t count = 16; 7959 typedef ushort1 scalar_t; 7960 typedef ushort16 type; 7961 typedef packed::ushort16 packed_t; 7962 typedef short16 mask_t; 7963 }; 7964 7965 template <> struct get_traits<ushort16> 7966 { 7967 using type = Vector<ushort1, 16>; 7968 }; 7969 7970 template<> struct Vector<ushort1, 32> { 7971 static const size_t count = 32; 7972 typedef ushort1 scalar_t; 7973 typedef ushort32 type; 7974 typedef packed::ushort32 packed_t; 7975 typedef short32 mask_t; 7976 }; 7977 7978 template <> struct get_traits<ushort32> 7979 { 7980 using type = Vector<ushort1, 32>; 7981 }; 7982 7983 template<> struct Vector<half1, 1> { 7984 static const size_t count = 1; 7985 typedef half1 scalar_t; 7986 typedef half1 type; 7987 typedef short1 mask_t; 7988 }; 7989 7990 template <> struct get_traits<half1> 7991 { 7992 using type = Vector<half1, 1>; 7993 }; 7994 7995 template<> struct Vector<half1, 2> { 7996 static const size_t count = 2; 7997 typedef half1 scalar_t; 7998 typedef half2 type; 7999 typedef packed::half2 packed_t; 8000 typedef short2 mask_t; 8001 }; 8002 8003 template <> struct get_traits<half2> 8004 { 8005 using type = Vector<half1, 2>; 8006 }; 8007 8008 template<> struct Vector<half1, 3> { 8009 static const size_t count = 3; 8010 typedef half1 scalar_t; 8011 typedef half3 type; 8012 typedef short3 mask_t; 8013 }; 8014 8015 template <> struct get_traits<half3> 8016 { 8017 using type = Vector<half1, 3>; 8018 }; 8019 8020 template<> struct Vector<half1, 4> { 8021 static const size_t count = 4; 8022 typedef half1 scalar_t; 8023 typedef half4 type; 8024 typedef packed::half4 packed_t; 8025 typedef short4 mask_t; 8026 }; 8027 8028 template <> struct get_traits<half4> 8029 { 8030 using type = Vector<half1, 4>; 8031 }; 8032 8033 template<> struct Vector<half1, 8> { 8034 static const size_t count = 8; 8035 typedef half1 scalar_t; 8036 typedef half8 type; 8037 typedef packed::half8 packed_t; 8038 typedef short8 mask_t; 8039 }; 8040 8041 template <> struct get_traits<half8> 8042 { 8043 using type = Vector<half1, 8>; 8044 }; 8045 8046 template<> struct Vector<half1, 16> { 8047 static const size_t count = 16; 8048 typedef half1 scalar_t; 8049 typedef half16 type; 8050 typedef packed::half16 packed_t; 8051 typedef short16 mask_t; 8052 }; 8053 8054 template <> struct get_traits<half16> 8055 { 8056 using type = Vector<half1, 16>; 8057 }; 8058 8059 template<> struct Vector<half1, 32> { 8060 static const size_t count = 32; 8061 typedef half1 scalar_t; 8062 typedef half32 type; 8063 typedef packed::half32 packed_t; 8064 typedef short32 mask_t; 8065 }; 8066 8067 template <> struct get_traits<half32> 8068 { 8069 using type = Vector<half1, 32>; 8070 }; 8071 8072 template<> struct Vector<int1, 1> { 8073 static const size_t count = 1; 8074 typedef int1 scalar_t; 8075 typedef int1 type; 8076 typedef int1 mask_t; 8077 }; 8078 8079 template <> struct get_traits<int1> 8080 { 8081 using type = Vector<int1, 1>; 8082 }; 8083 8084 template<> struct Vector<int1, 2> { 8085 static const size_t count = 2; 8086 typedef int1 scalar_t; 8087 typedef int2 type; 8088 typedef packed::int2 packed_t; 8089 typedef int2 mask_t; 8090 }; 8091 8092 template <> struct get_traits<int2> 8093 { 8094 using type = Vector<int1, 2>; 8095 }; 8096 8097 template<> struct Vector<int1, 3> { 8098 static const size_t count = 3; 8099 typedef int1 scalar_t; 8100 typedef int3 type; 8101 typedef int3 mask_t; 8102 }; 8103 8104 template <> struct get_traits<int3> 8105 { 8106 using type = Vector<int1, 3>; 8107 }; 8108 8109 template<> struct Vector<int1, 4> { 8110 static const size_t count = 4; 8111 typedef int1 scalar_t; 8112 typedef int4 type; 8113 typedef packed::int4 packed_t; 8114 typedef int4 mask_t; 8115 }; 8116 8117 template <> struct get_traits<int4> 8118 { 8119 using type = Vector<int1, 4>; 8120 }; 8121 8122 template<> struct Vector<int1, 8> { 8123 static const size_t count = 8; 8124 typedef int1 scalar_t; 8125 typedef int8 type; 8126 typedef packed::int8 packed_t; 8127 typedef int8 mask_t; 8128 }; 8129 8130 template <> struct get_traits<int8> 8131 { 8132 using type = Vector<int1, 8>; 8133 }; 8134 8135 template<> struct Vector<int1, 16> { 8136 static const size_t count = 16; 8137 typedef int1 scalar_t; 8138 typedef int16 type; 8139 typedef packed::int16 packed_t; 8140 typedef int16 mask_t; 8141 }; 8142 8143 template <> struct get_traits<int16> 8144 { 8145 using type = Vector<int1, 16>; 8146 }; 8147 8148 template<> struct Vector<uint1, 1> { 8149 static const size_t count = 1; 8150 typedef uint1 scalar_t; 8151 typedef uint1 type; 8152 typedef int1 mask_t; 8153 }; 8154 8155 template <> struct get_traits<uint1> 8156 { 8157 using type = Vector<uint1, 1>; 8158 }; 8159 8160 template<> struct Vector<uint1, 2> { 8161 static const size_t count = 2; 8162 typedef uint1 scalar_t; 8163 typedef uint2 type; 8164 typedef packed::uint2 packed_t; 8165 typedef int2 mask_t; 8166 }; 8167 8168 template <> struct get_traits<uint2> 8169 { 8170 using type = Vector<uint1, 2>; 8171 }; 8172 8173 template<> struct Vector<uint1, 3> { 8174 static const size_t count = 3; 8175 typedef uint1 scalar_t; 8176 typedef uint3 type; 8177 typedef int3 mask_t; 8178 }; 8179 8180 template <> struct get_traits<uint3> 8181 { 8182 using type = Vector<uint1, 3>; 8183 }; 8184 8185 template<> struct Vector<uint1, 4> { 8186 static const size_t count = 4; 8187 typedef uint1 scalar_t; 8188 typedef uint4 type; 8189 typedef packed::uint4 packed_t; 8190 typedef int4 mask_t; 8191 }; 8192 8193 template <> struct get_traits<uint4> 8194 { 8195 using type = Vector<uint1, 4>; 8196 }; 8197 8198 template<> struct Vector<uint1, 8> { 8199 static const size_t count = 8; 8200 typedef uint1 scalar_t; 8201 typedef uint8 type; 8202 typedef packed::uint8 packed_t; 8203 typedef int8 mask_t; 8204 }; 8205 8206 template <> struct get_traits<uint8> 8207 { 8208 using type = Vector<uint1, 8>; 8209 }; 8210 8211 template<> struct Vector<uint1, 16> { 8212 static const size_t count = 16; 8213 typedef uint1 scalar_t; 8214 typedef uint16 type; 8215 typedef packed::uint16 packed_t; 8216 typedef int16 mask_t; 8217 }; 8218 8219 template <> struct get_traits<uint16> 8220 { 8221 using type = Vector<uint1, 16>; 8222 }; 8223 8224 template<> struct Vector<float1, 1> { 8225 static const size_t count = 1; 8226 typedef float1 scalar_t; 8227 typedef float1 type; 8228 typedef int1 mask_t; 8229 }; 8230 8231 template <> struct get_traits<float1> 8232 { 8233 using type = Vector<float1, 1>; 8234 }; 8235 8236 template<> struct Vector<float1, 2> { 8237 static const size_t count = 2; 8238 typedef float1 scalar_t; 8239 typedef float2 type; 8240 typedef packed::float2 packed_t; 8241 typedef int2 mask_t; 8242 }; 8243 8244 template <> struct get_traits<float2> 8245 { 8246 using type = Vector<float1, 2>; 8247 }; 8248 8249 template<> struct Vector<float1, 3> { 8250 static const size_t count = 3; 8251 typedef float1 scalar_t; 8252 typedef float3 type; 8253 typedef int3 mask_t; 8254 }; 8255 8256 template <> struct get_traits<float3> 8257 { 8258 using type = Vector<float1, 3>; 8259 }; 8260 8261 template<> struct Vector<float1, 4> { 8262 static const size_t count = 4; 8263 typedef float1 scalar_t; 8264 typedef float4 type; 8265 typedef packed::float4 packed_t; 8266 typedef int4 mask_t; 8267 }; 8268 8269 template <> struct get_traits<float4> 8270 { 8271 using type = Vector<float1, 4>; 8272 }; 8273 8274 template<> struct Vector<float1, 8> { 8275 static const size_t count = 8; 8276 typedef float1 scalar_t; 8277 typedef float8 type; 8278 typedef packed::float8 packed_t; 8279 typedef int8 mask_t; 8280 }; 8281 8282 template <> struct get_traits<float8> 8283 { 8284 using type = Vector<float1, 8>; 8285 }; 8286 8287 template<> struct Vector<float1, 16> { 8288 static const size_t count = 16; 8289 typedef float1 scalar_t; 8290 typedef float16 type; 8291 typedef packed::float16 packed_t; 8292 typedef int16 mask_t; 8293 }; 8294 8295 template <> struct get_traits<float16> 8296 { 8297 using type = Vector<float1, 16>; 8298 }; 8299 8300 template<> struct Vector<long1, 1> { 8301 static const size_t count = 1; 8302 typedef long1 scalar_t; 8303 typedef long1 type; 8304 typedef long1 mask_t; 8305 }; 8306 8307 template <> struct get_traits<long1> 8308 { 8309 using type = Vector<long1, 1>; 8310 }; 8311 8312 template<> struct Vector<long1, 2> { 8313 static const size_t count = 2; 8314 typedef long1 scalar_t; 8315 typedef long2 type; 8316 typedef packed::long2 packed_t; 8317 typedef long2 mask_t; 8318 }; 8319 8320 template <> struct get_traits<long2> 8321 { 8322 using type = Vector<long1, 2>; 8323 }; 8324 8325 template<> struct Vector<long1, 3> { 8326 static const size_t count = 3; 8327 typedef long1 scalar_t; 8328 typedef long3 type; 8329 typedef long3 mask_t; 8330 }; 8331 8332 template <> struct get_traits<long3> 8333 { 8334 using type = Vector<long1, 3>; 8335 }; 8336 8337 template<> struct Vector<long1, 4> { 8338 static const size_t count = 4; 8339 typedef long1 scalar_t; 8340 typedef long4 type; 8341 typedef packed::long4 packed_t; 8342 typedef long4 mask_t; 8343 }; 8344 8345 template <> struct get_traits<long4> 8346 { 8347 using type = Vector<long1, 4>; 8348 }; 8349 8350 template<> struct Vector<long1, 8> { 8351 static const size_t count = 8; 8352 typedef long1 scalar_t; 8353 typedef long8 type; 8354 typedef packed::long8 packed_t; 8355 typedef long8 mask_t; 8356 }; 8357 8358 template <> struct get_traits<long8> 8359 { 8360 using type = Vector<long1, 8>; 8361 }; 8362 8363 template<> struct Vector<ulong1, 1> { 8364 static const size_t count = 1; 8365 typedef ulong1 scalar_t; 8366 typedef ulong1 type; 8367 typedef long1 mask_t; 8368 }; 8369 8370 template <> struct get_traits<ulong1> 8371 { 8372 using type = Vector<ulong1, 1>; 8373 }; 8374 8375 template<> struct Vector<ulong1, 2> { 8376 static const size_t count = 2; 8377 typedef ulong1 scalar_t; 8378 typedef ulong2 type; 8379 typedef packed::ulong2 packed_t; 8380 typedef long2 mask_t; 8381 }; 8382 8383 template <> struct get_traits<ulong2> 8384 { 8385 using type = Vector<ulong1, 2>; 8386 }; 8387 8388 template<> struct Vector<ulong1, 3> { 8389 static const size_t count = 3; 8390 typedef ulong1 scalar_t; 8391 typedef ulong3 type; 8392 typedef long3 mask_t; 8393 }; 8394 8395 template <> struct get_traits<ulong3> 8396 { 8397 using type = Vector<ulong1, 3>; 8398 }; 8399 8400 template<> struct Vector<ulong1, 4> { 8401 static const size_t count = 4; 8402 typedef ulong1 scalar_t; 8403 typedef ulong4 type; 8404 typedef packed::ulong4 packed_t; 8405 typedef long4 mask_t; 8406 }; 8407 8408 template <> struct get_traits<ulong4> 8409 { 8410 using type = Vector<ulong1, 4>; 8411 }; 8412 8413 template<> struct Vector<ulong1, 8> { 8414 static const size_t count = 8; 8415 typedef ulong1 scalar_t; 8416 typedef ulong8 type; 8417 typedef packed::ulong8 packed_t; 8418 typedef long8 mask_t; 8419 }; 8420 8421 template <> struct get_traits<ulong8> 8422 { 8423 using type = Vector<ulong1, 8>; 8424 }; 8425 8426 template<> struct Vector<double1, 1> { 8427 static const size_t count = 1; 8428 typedef double1 scalar_t; 8429 typedef double1 type; 8430 typedef long1 mask_t; 8431 }; 8432 8433 template <> struct get_traits<double1> 8434 { 8435 using type = Vector<double1, 1>; 8436 }; 8437 8438 template<> struct Vector<double1, 2> { 8439 static const size_t count = 2; 8440 typedef double1 scalar_t; 8441 typedef double2 type; 8442 typedef packed::double2 packed_t; 8443 typedef long2 mask_t; 8444 }; 8445 8446 template <> struct get_traits<double2> 8447 { 8448 using type = Vector<double1, 2>; 8449 }; 8450 8451 template<> struct Vector<double1, 3> { 8452 static const size_t count = 3; 8453 typedef double1 scalar_t; 8454 typedef double3 type; 8455 typedef long3 mask_t; 8456 }; 8457 8458 template <> struct get_traits<double3> 8459 { 8460 using type = Vector<double1, 3>; 8461 }; 8462 8463 template<> struct Vector<double1, 4> { 8464 static const size_t count = 4; 8465 typedef double1 scalar_t; 8466 typedef double4 type; 8467 typedef packed::double4 packed_t; 8468 typedef long4 mask_t; 8469 }; 8470 8471 template <> struct get_traits<double4> 8472 { 8473 using type = Vector<double1, 4>; 8474 }; 8475 8476 template<> struct Vector<double1, 8> { 8477 static const size_t count = 8; 8478 typedef double1 scalar_t; 8479 typedef double8 type; 8480 typedef packed::double8 packed_t; 8481 typedef long8 mask_t; 8482 }; 8483 8484 template <> struct get_traits<double8> 8485 { 8486 using type = Vector<double1, 8>; 8487 }; 8488 8489 #if __has_feature(cxx_constexpr) 8490 /*! @abstract Templated make function based on return type and argument 8491 * type. */ 8492 template<typename typeN, typename... Args> 8493 static constexpr typeN make(Args... args) 8494 { 8495 if constexpr (traits<typeN>::count == 1) 8496 { 8497 using FirstArgType = typename std::tuple_element<0, std::tuple<Args...>>::type; 8498 if constexpr (std::is_same<FirstArgType, typename traits<FirstArgType>::scalar_t>::value) 8499 return typeN(std::get<0>(std::make_tuple(args...))); 8500 else 8501 return typeN(std::get<0>(std::make_tuple(args...))[0]); 8502 } 8503 else if constexpr (std::is_same<typeN, char2>::value) 8504 return make_char2(args...); 8505 else if constexpr (std::is_same<typeN, char3>::value) 8506 return make_char3(args...); 8507 else if constexpr (std::is_same<typeN, char4>::value) 8508 return make_char4(args...); 8509 else if constexpr (std::is_same<typeN, char8>::value) 8510 return make_char8(args...); 8511 else if constexpr (std::is_same<typeN, char16>::value) 8512 return make_char16(args...); 8513 else if constexpr (std::is_same<typeN, char32>::value) 8514 return make_char32(args...); 8515 else if constexpr (std::is_same<typeN, char64>::value) 8516 return make_char64(args...); 8517 else if constexpr (std::is_same<typeN, uchar2>::value) 8518 return make_uchar2(args...); 8519 else if constexpr (std::is_same<typeN, uchar3>::value) 8520 return make_uchar3(args...); 8521 else if constexpr (std::is_same<typeN, uchar4>::value) 8522 return make_uchar4(args...); 8523 else if constexpr (std::is_same<typeN, uchar8>::value) 8524 return make_uchar8(args...); 8525 else if constexpr (std::is_same<typeN, uchar16>::value) 8526 return make_uchar16(args...); 8527 else if constexpr (std::is_same<typeN, uchar32>::value) 8528 return make_uchar32(args...); 8529 else if constexpr (std::is_same<typeN, uchar64>::value) 8530 return make_uchar64(args...); 8531 else if constexpr (std::is_same<typeN, short2>::value) 8532 return make_short2(args...); 8533 else if constexpr (std::is_same<typeN, short3>::value) 8534 return make_short3(args...); 8535 else if constexpr (std::is_same<typeN, short4>::value) 8536 return make_short4(args...); 8537 else if constexpr (std::is_same<typeN, short8>::value) 8538 return make_short8(args...); 8539 else if constexpr (std::is_same<typeN, short16>::value) 8540 return make_short16(args...); 8541 else if constexpr (std::is_same<typeN, short32>::value) 8542 return make_short32(args...); 8543 else if constexpr (std::is_same<typeN, ushort2>::value) 8544 return make_ushort2(args...); 8545 else if constexpr (std::is_same<typeN, ushort3>::value) 8546 return make_ushort3(args...); 8547 else if constexpr (std::is_same<typeN, ushort4>::value) 8548 return make_ushort4(args...); 8549 else if constexpr (std::is_same<typeN, ushort8>::value) 8550 return make_ushort8(args...); 8551 else if constexpr (std::is_same<typeN, ushort16>::value) 8552 return make_ushort16(args...); 8553 else if constexpr (std::is_same<typeN, ushort32>::value) 8554 return make_ushort32(args...); 8555 else if constexpr (std::is_same<typeN, half2>::value) 8556 return make_half2(args...); 8557 else if constexpr (std::is_same<typeN, half3>::value) 8558 return make_half3(args...); 8559 else if constexpr (std::is_same<typeN, half4>::value) 8560 return make_half4(args...); 8561 else if constexpr (std::is_same<typeN, half8>::value) 8562 return make_half8(args...); 8563 else if constexpr (std::is_same<typeN, half16>::value) 8564 return make_half16(args...); 8565 else if constexpr (std::is_same<typeN, half32>::value) 8566 return make_half32(args...); 8567 else if constexpr (std::is_same<typeN, int2>::value) 8568 return make_int2(args...); 8569 else if constexpr (std::is_same<typeN, int3>::value) 8570 return make_int3(args...); 8571 else if constexpr (std::is_same<typeN, int4>::value) 8572 return make_int4(args...); 8573 else if constexpr (std::is_same<typeN, int8>::value) 8574 return make_int8(args...); 8575 else if constexpr (std::is_same<typeN, int16>::value) 8576 return make_int16(args...); 8577 else if constexpr (std::is_same<typeN, uint2>::value) 8578 return make_uint2(args...); 8579 else if constexpr (std::is_same<typeN, uint3>::value) 8580 return make_uint3(args...); 8581 else if constexpr (std::is_same<typeN, uint4>::value) 8582 return make_uint4(args...); 8583 else if constexpr (std::is_same<typeN, uint8>::value) 8584 return make_uint8(args...); 8585 else if constexpr (std::is_same<typeN, uint16>::value) 8586 return make_uint16(args...); 8587 else if constexpr (std::is_same<typeN, float2>::value) 8588 return make_float2(args...); 8589 else if constexpr (std::is_same<typeN, float3>::value) 8590 return make_float3(args...); 8591 else if constexpr (std::is_same<typeN, float4>::value) 8592 return make_float4(args...); 8593 else if constexpr (std::is_same<typeN, float8>::value) 8594 return make_float8(args...); 8595 else if constexpr (std::is_same<typeN, float16>::value) 8596 return make_float16(args...); 8597 else if constexpr (std::is_same<typeN, long2>::value) 8598 return make_long2(args...); 8599 else if constexpr (std::is_same<typeN, long3>::value) 8600 return make_long3(args...); 8601 else if constexpr (std::is_same<typeN, long4>::value) 8602 return make_long4(args...); 8603 else if constexpr (std::is_same<typeN, long8>::value) 8604 return make_long8(args...); 8605 else if constexpr (std::is_same<typeN, ulong2>::value) 8606 return make_ulong2(args...); 8607 else if constexpr (std::is_same<typeN, ulong3>::value) 8608 return make_ulong3(args...); 8609 else if constexpr (std::is_same<typeN, ulong4>::value) 8610 return make_ulong4(args...); 8611 else if constexpr (std::is_same<typeN, ulong8>::value) 8612 return make_ulong8(args...); 8613 else if constexpr (std::is_same<typeN, double2>::value) 8614 return make_double2(args...); 8615 else if constexpr (std::is_same<typeN, double3>::value) 8616 return make_double3(args...); 8617 else if constexpr (std::is_same<typeN, double4>::value) 8618 return make_double4(args...); 8619 else if constexpr (std::is_same<typeN, double8>::value) 8620 return make_double8(args...); 8621 } 8622 8623 /*! @abstract Templated make_undef function based on return type and 8624 * argument type. */ 8625 template<typename typeN, typename... Args> 8626 static constexpr typeN make_undef(Args... args) 8627 { 8628 if constexpr (traits<typeN>::count == 1) 8629 { 8630 using FirstArgType = typename std::tuple_element<0, std::tuple<Args...>>::type; 8631 if constexpr (std::is_same<FirstArgType, typename traits<FirstArgType>::scalar_t>::value) 8632 return typeN(std::get<0>(std::make_tuple(args...))); 8633 else 8634 return typeN(std::get<0>(std::make_tuple(args...))[0]); 8635 } 8636 else if constexpr (std::is_same<typeN, char2>::value) 8637 return make_char2_undef(args...); 8638 else if constexpr (std::is_same<typeN, char3>::value) 8639 return make_char3_undef(args...); 8640 else if constexpr (std::is_same<typeN, char4>::value) 8641 return make_char4_undef(args...); 8642 else if constexpr (std::is_same<typeN, char8>::value) 8643 return make_char8_undef(args...); 8644 else if constexpr (std::is_same<typeN, char16>::value) 8645 return make_char16_undef(args...); 8646 else if constexpr (std::is_same<typeN, char32>::value) 8647 return make_char32_undef(args...); 8648 else if constexpr (std::is_same<typeN, char64>::value) 8649 return make_char64_undef(args...); 8650 else if constexpr (std::is_same<typeN, uchar2>::value) 8651 return make_uchar2_undef(args...); 8652 else if constexpr (std::is_same<typeN, uchar3>::value) 8653 return make_uchar3_undef(args...); 8654 else if constexpr (std::is_same<typeN, uchar4>::value) 8655 return make_uchar4_undef(args...); 8656 else if constexpr (std::is_same<typeN, uchar8>::value) 8657 return make_uchar8_undef(args...); 8658 else if constexpr (std::is_same<typeN, uchar16>::value) 8659 return make_uchar16_undef(args...); 8660 else if constexpr (std::is_same<typeN, uchar32>::value) 8661 return make_uchar32_undef(args...); 8662 else if constexpr (std::is_same<typeN, uchar64>::value) 8663 return make_uchar64_undef(args...); 8664 else if constexpr (std::is_same<typeN, short2>::value) 8665 return make_short2_undef(args...); 8666 else if constexpr (std::is_same<typeN, short3>::value) 8667 return make_short3_undef(args...); 8668 else if constexpr (std::is_same<typeN, short4>::value) 8669 return make_short4_undef(args...); 8670 else if constexpr (std::is_same<typeN, short8>::value) 8671 return make_short8_undef(args...); 8672 else if constexpr (std::is_same<typeN, short16>::value) 8673 return make_short16_undef(args...); 8674 else if constexpr (std::is_same<typeN, short32>::value) 8675 return make_short32_undef(args...); 8676 else if constexpr (std::is_same<typeN, ushort2>::value) 8677 return make_ushort2_undef(args...); 8678 else if constexpr (std::is_same<typeN, ushort3>::value) 8679 return make_ushort3_undef(args...); 8680 else if constexpr (std::is_same<typeN, ushort4>::value) 8681 return make_ushort4_undef(args...); 8682 else if constexpr (std::is_same<typeN, ushort8>::value) 8683 return make_ushort8_undef(args...); 8684 else if constexpr (std::is_same<typeN, ushort16>::value) 8685 return make_ushort16_undef(args...); 8686 else if constexpr (std::is_same<typeN, ushort32>::value) 8687 return make_ushort32_undef(args...); 8688 else if constexpr (std::is_same<typeN, half2>::value) 8689 return make_half2_undef(args...); 8690 else if constexpr (std::is_same<typeN, half3>::value) 8691 return make_half3_undef(args...); 8692 else if constexpr (std::is_same<typeN, half4>::value) 8693 return make_half4_undef(args...); 8694 else if constexpr (std::is_same<typeN, half8>::value) 8695 return make_half8_undef(args...); 8696 else if constexpr (std::is_same<typeN, half16>::value) 8697 return make_half16_undef(args...); 8698 else if constexpr (std::is_same<typeN, half32>::value) 8699 return make_half32_undef(args...); 8700 else if constexpr (std::is_same<typeN, int2>::value) 8701 return make_int2_undef(args...); 8702 else if constexpr (std::is_same<typeN, int3>::value) 8703 return make_int3_undef(args...); 8704 else if constexpr (std::is_same<typeN, int4>::value) 8705 return make_int4_undef(args...); 8706 else if constexpr (std::is_same<typeN, int8>::value) 8707 return make_int8_undef(args...); 8708 else if constexpr (std::is_same<typeN, int16>::value) 8709 return make_int16_undef(args...); 8710 else if constexpr (std::is_same<typeN, uint2>::value) 8711 return make_uint2_undef(args...); 8712 else if constexpr (std::is_same<typeN, uint3>::value) 8713 return make_uint3_undef(args...); 8714 else if constexpr (std::is_same<typeN, uint4>::value) 8715 return make_uint4_undef(args...); 8716 else if constexpr (std::is_same<typeN, uint8>::value) 8717 return make_uint8_undef(args...); 8718 else if constexpr (std::is_same<typeN, uint16>::value) 8719 return make_uint16_undef(args...); 8720 else if constexpr (std::is_same<typeN, float2>::value) 8721 return make_float2_undef(args...); 8722 else if constexpr (std::is_same<typeN, float3>::value) 8723 return make_float3_undef(args...); 8724 else if constexpr (std::is_same<typeN, float4>::value) 8725 return make_float4_undef(args...); 8726 else if constexpr (std::is_same<typeN, float8>::value) 8727 return make_float8_undef(args...); 8728 else if constexpr (std::is_same<typeN, float16>::value) 8729 return make_float16_undef(args...); 8730 else if constexpr (std::is_same<typeN, long2>::value) 8731 return make_long2_undef(args...); 8732 else if constexpr (std::is_same<typeN, long3>::value) 8733 return make_long3_undef(args...); 8734 else if constexpr (std::is_same<typeN, long4>::value) 8735 return make_long4_undef(args...); 8736 else if constexpr (std::is_same<typeN, long8>::value) 8737 return make_long8_undef(args...); 8738 else if constexpr (std::is_same<typeN, ulong2>::value) 8739 return make_ulong2_undef(args...); 8740 else if constexpr (std::is_same<typeN, ulong3>::value) 8741 return make_ulong3_undef(args...); 8742 else if constexpr (std::is_same<typeN, ulong4>::value) 8743 return make_ulong4_undef(args...); 8744 else if constexpr (std::is_same<typeN, ulong8>::value) 8745 return make_ulong8_undef(args...); 8746 else if constexpr (std::is_same<typeN, double2>::value) 8747 return make_double2_undef(args...); 8748 else if constexpr (std::is_same<typeN, double3>::value) 8749 return make_double3_undef(args...); 8750 else if constexpr (std::is_same<typeN, double4>::value) 8751 return make_double4_undef(args...); 8752 else if constexpr (std::is_same<typeN, double8>::value) 8753 return make_double8_undef(args...); 8754 } 8755 #endif /* __has_feature(cxx_constexpr) */ 8756 } /* namespace simd */ 8757 #endif /* __cplusplus */ 8758 #endif /* SIMD_COMPILER_HAS_REQUIRED_FEATURES */ 8759 #endif /* SIMD_VECTOR_CONSTRUCTORS */