master
   1/*! @header
   2 *  This header defines fixed size vector types with relaxed alignment. For 
   3 *  each vector type defined by <simd/vector_types.h> that is not a 1- or 3-
   4 *  element vector, there is a corresponding type defined by this header that
   5 *  requires only the alignment matching that of the underlying scalar type.
   6 *
   7 *  These types should be used to access buffers that may not be sufficiently
   8 *  aligned to allow them to be accessed using the "normal" simd vector types.
   9 *  As an example of this usage, suppose that you want to load a vector of
  10 *  four floats from an array of floats. The type simd_float4 has sixteen byte
  11 *  alignment, whereas an array of floats has only four byte alignment.
  12 *  Thus, naively casting a pointer into the array to (simd_float4 *) would 
  13 *  invoke undefined behavior, and likely produce an alignment fault at
  14 *  runtime. Instead, use the corresponding packed type to load from the array:
  15 *
  16 *  <pre>
  17 *  @textblock
  18 *  simd_float4 vector = *(simd_packed_float4 *)&array[i];
  19 *  // do something with vector ...
  20 *  @/textblock
  21 *  </pre>
  22 *
  23 *  It's important to note that the packed_ types are only needed to work with
  24 *  memory; once the data is loaded, we simply operate on it as usual using
  25 *  the simd_float4 type, as illustrated above.
  26 *
  27 *  @copyright 2014-2017 Apple, Inc. All rights reserved.
  28 *  @unsorted                                                                 */
  29
  30#ifndef SIMD_PACKED_TYPES
  31#define SIMD_PACKED_TYPES
  32
  33# include <simd/vector_types.h>
  34# if SIMD_COMPILER_HAS_REQUIRED_FEATURES
  35/*! @abstract A vector of two 8-bit signed (twos-complement) integers with
  36 *  relaxed alignment.
  37 *  @description In C++ and Metal, this type is also available as
  38 *  simd::packed::char2. The alignment of this type is that of the
  39 *  underlying scalar element type, so you can use it to load or store from
  40 *  an array of that type.                                                    */
  41typedef __attribute__((__ext_vector_type__(2),__aligned__(1))) char simd_packed_char2;
  42
  43/*! @abstract A vector of four 8-bit signed (twos-complement) integers with
  44 *  relaxed alignment.
  45 *  @description In C++ and Metal, this type is also available as
  46 *  simd::packed::char4. The alignment of this type is that of the
  47 *  underlying scalar element type, so you can use it to load or store from
  48 *  an array of that type.                                                    */
  49typedef __attribute__((__ext_vector_type__(4),__aligned__(1))) char simd_packed_char4;
  50
  51/*! @abstract A vector of eight 8-bit signed (twos-complement) integers with
  52 *  relaxed alignment.
  53 *  @description In C++ this type is also available as simd::packed::char8.
  54 *  This type is not available in Metal. The alignment of this type is only
  55 *  that of the underlying scalar element type, so you can use it to load or
  56 *  store from an array of that type.                                         */
  57typedef __attribute__((__ext_vector_type__(8),__aligned__(1))) char simd_packed_char8;
  58
  59/*! @abstract A vector of sixteen 8-bit signed (twos-complement) integers
  60 *  with relaxed alignment.
  61 *  @description In C++ this type is also available as simd::packed::char16.
  62 *  This type is not available in Metal. The alignment of this type is only
  63 *  that of the underlying scalar element type, so you can use it to load or
  64 *  store from an array of that type.                                         */
  65typedef __attribute__((__ext_vector_type__(16),__aligned__(1))) char simd_packed_char16;
  66
  67/*! @abstract A vector of thirty-two 8-bit signed (twos-complement) integers
  68 *  with relaxed alignment.
  69 *  @description In C++ this type is also available as simd::packed::char32.
  70 *  This type is not available in Metal. The alignment of this type is only
  71 *  that of the underlying scalar element type, so you can use it to load or
  72 *  store from an array of that type.                                         */
  73typedef __attribute__((__ext_vector_type__(32),__aligned__(1))) char simd_packed_char32;
  74
  75/*! @abstract A vector of sixty-four 8-bit signed (twos-complement) integers
  76 *  with relaxed alignment.
  77 *  @description In C++ this type is also available as simd::packed::char64.
  78 *  This type is not available in Metal. The alignment of this type is only
  79 *  that of the underlying scalar element type, so you can use it to load or
  80 *  store from an array of that type.                                         */
  81typedef __attribute__((__ext_vector_type__(64),__aligned__(1))) char simd_packed_char64;
  82
  83/*! @abstract A vector of two 8-bit unsigned integers with relaxed
  84 *  alignment.
  85 *  @description In C++ and Metal, this type is also available as
  86 *  simd::packed::uchar2. The alignment of this type is that of the
  87 *  underlying scalar element type, so you can use it to load or store from
  88 *  an array of that type.                                                    */
  89typedef __attribute__((__ext_vector_type__(2),__aligned__(1))) unsigned char simd_packed_uchar2;
  90
  91/*! @abstract A vector of four 8-bit unsigned integers with relaxed
  92 *  alignment.
  93 *  @description In C++ and Metal, this type is also available as
  94 *  simd::packed::uchar4. The alignment of this type is that of the
  95 *  underlying scalar element type, so you can use it to load or store from
  96 *  an array of that type.                                                    */
  97typedef __attribute__((__ext_vector_type__(4),__aligned__(1))) unsigned char simd_packed_uchar4;
  98
  99/*! @abstract A vector of eight 8-bit unsigned integers with relaxed
 100 *  alignment.
 101 *  @description In C++ this type is also available as simd::packed::uchar8.
 102 *  This type is not available in Metal. The alignment of this type is only
 103 *  that of the underlying scalar element type, so you can use it to load or
 104 *  store from an array of that type.                                         */
 105typedef __attribute__((__ext_vector_type__(8),__aligned__(1))) unsigned char simd_packed_uchar8;
 106
 107/*! @abstract A vector of sixteen 8-bit unsigned integers with relaxed
 108 *  alignment.
 109 *  @description In C++ this type is also available as
 110 *  simd::packed::uchar16. This type is not available in Metal. The
 111 *  alignment of this type is only that of the underlying scalar element
 112 *  type, so you can use it to load or store from an array of that type.      */
 113typedef __attribute__((__ext_vector_type__(16),__aligned__(1))) unsigned char simd_packed_uchar16;
 114
 115/*! @abstract A vector of thirty-two 8-bit unsigned integers with relaxed
 116 *  alignment.
 117 *  @description In C++ this type is also available as
 118 *  simd::packed::uchar32. This type is not available in Metal. The
 119 *  alignment of this type is only that of the underlying scalar element
 120 *  type, so you can use it to load or store from an array of that type.      */
 121typedef __attribute__((__ext_vector_type__(32),__aligned__(1))) unsigned char simd_packed_uchar32;
 122
 123/*! @abstract A vector of sixty-four 8-bit unsigned integers with relaxed
 124 *  alignment.
 125 *  @description In C++ this type is also available as
 126 *  simd::packed::uchar64. This type is not available in Metal. The
 127 *  alignment of this type is only that of the underlying scalar element
 128 *  type, so you can use it to load or store from an array of that type.      */
 129typedef __attribute__((__ext_vector_type__(64),__aligned__(1))) unsigned char simd_packed_uchar64;
 130
 131/*! @abstract A vector of two 16-bit signed (twos-complement) integers with
 132 *  relaxed alignment.
 133 *  @description In C++ and Metal, this type is also available as
 134 *  simd::packed::short2. The alignment of this type is that of the
 135 *  underlying scalar element type, so you can use it to load or store from
 136 *  an array of that type.                                                    */
 137typedef __attribute__((__ext_vector_type__(2),__aligned__(2))) short simd_packed_short2;
 138
 139/*! @abstract A vector of four 16-bit signed (twos-complement) integers with
 140 *  relaxed alignment.
 141 *  @description In C++ and Metal, this type is also available as
 142 *  simd::packed::short4. The alignment of this type is that of the
 143 *  underlying scalar element type, so you can use it to load or store from
 144 *  an array of that type.                                                    */
 145typedef __attribute__((__ext_vector_type__(4),__aligned__(2))) short simd_packed_short4;
 146
 147/*! @abstract A vector of eight 16-bit signed (twos-complement) integers
 148 *  with relaxed alignment.
 149 *  @description In C++ this type is also available as simd::packed::short8.
 150 *  This type is not available in Metal. The alignment of this type is only
 151 *  that of the underlying scalar element type, so you can use it to load or
 152 *  store from an array of that type.                                         */
 153typedef __attribute__((__ext_vector_type__(8),__aligned__(2))) short simd_packed_short8;
 154
 155/*! @abstract A vector of sixteen 16-bit signed (twos-complement) integers
 156 *  with relaxed alignment.
 157 *  @description In C++ this type is also available as
 158 *  simd::packed::short16. This type is not available in Metal. The
 159 *  alignment of this type is only that of the underlying scalar element
 160 *  type, so you can use it to load or store from an array of that type.      */
 161typedef __attribute__((__ext_vector_type__(16),__aligned__(2))) short simd_packed_short16;
 162
 163/*! @abstract A vector of thirty-two 16-bit signed (twos-complement)
 164 *  integers with relaxed alignment.
 165 *  @description In C++ this type is also available as
 166 *  simd::packed::short32. This type is not available in Metal. The
 167 *  alignment of this type is only that of the underlying scalar element
 168 *  type, so you can use it to load or store from an array of that type.      */
 169typedef __attribute__((__ext_vector_type__(32),__aligned__(2))) short simd_packed_short32;
 170
 171/*! @abstract A vector of two 16-bit unsigned integers with relaxed
 172 *  alignment.
 173 *  @description In C++ and Metal, this type is also available as
 174 *  simd::packed::ushort2. The alignment of this type is that of the
 175 *  underlying scalar element type, so you can use it to load or store from
 176 *  an array of that type.                                                    */
 177typedef __attribute__((__ext_vector_type__(2),__aligned__(2))) unsigned short simd_packed_ushort2;
 178
 179/*! @abstract A vector of four 16-bit unsigned integers with relaxed
 180 *  alignment.
 181 *  @description In C++ and Metal, this type is also available as
 182 *  simd::packed::ushort4. The alignment of this type is that of the
 183 *  underlying scalar element type, so you can use it to load or store from
 184 *  an array of that type.                                                    */
 185typedef __attribute__((__ext_vector_type__(4),__aligned__(2))) unsigned short simd_packed_ushort4;
 186
 187/*! @abstract A vector of eight 16-bit unsigned integers with relaxed
 188 *  alignment.
 189 *  @description In C++ this type is also available as
 190 *  simd::packed::ushort8. This type is not available in Metal. The
 191 *  alignment of this type is only that of the underlying scalar element
 192 *  type, so you can use it to load or store from an array of that type.      */
 193typedef __attribute__((__ext_vector_type__(8),__aligned__(2))) unsigned short simd_packed_ushort8;
 194
 195/*! @abstract A vector of sixteen 16-bit unsigned integers with relaxed
 196 *  alignment.
 197 *  @description In C++ this type is also available as
 198 *  simd::packed::ushort16. This type is not available in Metal. The
 199 *  alignment of this type is only that of the underlying scalar element
 200 *  type, so you can use it to load or store from an array of that type.      */
 201typedef __attribute__((__ext_vector_type__(16),__aligned__(2))) unsigned short simd_packed_ushort16;
 202
 203/*! @abstract A vector of thirty-two 16-bit unsigned integers with relaxed
 204 *  alignment.
 205 *  @description In C++ this type is also available as
 206 *  simd::packed::ushort32. This type is not available in Metal. The
 207 *  alignment of this type is only that of the underlying scalar element
 208 *  type, so you can use it to load or store from an array of that type.      */
 209typedef __attribute__((__ext_vector_type__(32),__aligned__(2))) unsigned short simd_packed_ushort32;
 210
 211/*! @abstract A vector of two 16-bit floating-point numbers with relaxed
 212 *  alignment.
 213 *  @description In C++ and Metal, this type is also available as
 214 *  simd::packed::half2. The alignment of this type is that of the
 215 *  underlying scalar element type, so you can use it to load or store from
 216 *  an array of that type.                                                    */
 217typedef __attribute__((__ext_vector_type__(2),__aligned__(2))) _Float16 simd_packed_half2;
 218
 219/*! @abstract A vector of four 16-bit floating-point numbers with relaxed
 220 *  alignment.
 221 *  @description In C++ and Metal, this type is also available as
 222 *  simd::packed::half4. The alignment of this type is that of the
 223 *  underlying scalar element type, so you can use it to load or store from
 224 *  an array of that type.                                                    */
 225typedef __attribute__((__ext_vector_type__(4),__aligned__(2))) _Float16 simd_packed_half4;
 226
 227/*! @abstract A vector of eight 16-bit floating-point numbers with relaxed
 228 *  alignment.
 229 *  @description In C++ this type is also available as simd::packed::half8.
 230 *  This type is not available in Metal. The alignment of this type is only
 231 *  that of the underlying scalar element type, so you can use it to load or
 232 *  store from an array of that type.                                         */
 233typedef __attribute__((__ext_vector_type__(8),__aligned__(2))) _Float16 simd_packed_half8;
 234
 235/*! @abstract A vector of sixteen 16-bit floating-point numbers with relaxed
 236 *  alignment.
 237 *  @description In C++ this type is also available as simd::packed::half16.
 238 *  This type is not available in Metal. The alignment of this type is only
 239 *  that of the underlying scalar element type, so you can use it to load or
 240 *  store from an array of that type.                                         */
 241typedef __attribute__((__ext_vector_type__(16),__aligned__(2))) _Float16 simd_packed_half16;
 242
 243/*! @abstract A vector of thirty-two 16-bit floating-point numbers with
 244 *  relaxed alignment.
 245 *  @description In C++ this type is also available as simd::packed::half32.
 246 *  This type is not available in Metal. The alignment of this type is only
 247 *  that of the underlying scalar element type, so you can use it to load or
 248 *  store from an array of that type.                                         */
 249typedef __attribute__((__ext_vector_type__(32),__aligned__(2))) _Float16 simd_packed_half32;
 250
 251/*! @abstract A vector of two 32-bit signed (twos-complement) integers with
 252 *  relaxed alignment.
 253 *  @description In C++ and Metal, this type is also available as
 254 *  simd::packed::int2. The alignment of this type is that of the underlying
 255 *  scalar element type, so you can use it to load or store from an array of
 256 *  that type.                                                                */
 257typedef __attribute__((__ext_vector_type__(2),__aligned__(4))) int simd_packed_int2;
 258
 259/*! @abstract A vector of four 32-bit signed (twos-complement) integers with
 260 *  relaxed alignment.
 261 *  @description In C++ and Metal, this type is also available as
 262 *  simd::packed::int4. The alignment of this type is that of the underlying
 263 *  scalar element type, so you can use it to load or store from an array of
 264 *  that type.                                                                */
 265typedef __attribute__((__ext_vector_type__(4),__aligned__(4))) int simd_packed_int4;
 266
 267/*! @abstract A vector of eight 32-bit signed (twos-complement) integers
 268 *  with relaxed alignment.
 269 *  @description In C++ this type is also available as simd::packed::int8.
 270 *  This type is not available in Metal. The alignment of this type is only
 271 *  that of the underlying scalar element type, so you can use it to load or
 272 *  store from an array of that type.                                         */
 273typedef __attribute__((__ext_vector_type__(8),__aligned__(4))) int simd_packed_int8;
 274
 275/*! @abstract A vector of sixteen 32-bit signed (twos-complement) integers
 276 *  with relaxed alignment.
 277 *  @description In C++ this type is also available as simd::packed::int16.
 278 *  This type is not available in Metal. The alignment of this type is only
 279 *  that of the underlying scalar element type, so you can use it to load or
 280 *  store from an array of that type.                                         */
 281typedef __attribute__((__ext_vector_type__(16),__aligned__(4))) int simd_packed_int16;
 282
 283/*! @abstract A vector of two 32-bit unsigned integers with relaxed
 284 *  alignment.
 285 *  @description In C++ and Metal, this type is also available as
 286 *  simd::packed::uint2. The alignment of this type is that of the
 287 *  underlying scalar element type, so you can use it to load or store from
 288 *  an array of that type.                                                    */
 289typedef __attribute__((__ext_vector_type__(2),__aligned__(4))) unsigned int simd_packed_uint2;
 290
 291/*! @abstract A vector of four 32-bit unsigned integers with relaxed
 292 *  alignment.
 293 *  @description In C++ and Metal, this type is also available as
 294 *  simd::packed::uint4. The alignment of this type is that of the
 295 *  underlying scalar element type, so you can use it to load or store from
 296 *  an array of that type.                                                    */
 297typedef __attribute__((__ext_vector_type__(4),__aligned__(4))) unsigned int simd_packed_uint4;
 298
 299/*! @abstract A vector of eight 32-bit unsigned integers with relaxed
 300 *  alignment.
 301 *  @description In C++ this type is also available as simd::packed::uint8.
 302 *  This type is not available in Metal. The alignment of this type is only
 303 *  that of the underlying scalar element type, so you can use it to load or
 304 *  store from an array of that type.                                         */
 305typedef __attribute__((__ext_vector_type__(8),__aligned__(4))) unsigned int simd_packed_uint8;
 306
 307/*! @abstract A vector of sixteen 32-bit unsigned integers with relaxed
 308 *  alignment.
 309 *  @description In C++ this type is also available as simd::packed::uint16.
 310 *  This type is not available in Metal. The alignment of this type is only
 311 *  that of the underlying scalar element type, so you can use it to load or
 312 *  store from an array of that type.                                         */
 313typedef __attribute__((__ext_vector_type__(16),__aligned__(4))) unsigned int simd_packed_uint16;
 314
 315/*! @abstract A vector of two 32-bit floating-point numbers with relaxed
 316 *  alignment.
 317 *  @description In C++ and Metal, this type is also available as
 318 *  simd::packed::float2. The alignment of this type is that of the
 319 *  underlying scalar element type, so you can use it to load or store from
 320 *  an array of that type.                                                    */
 321typedef __attribute__((__ext_vector_type__(2),__aligned__(4))) float simd_packed_float2;
 322
 323/*! @abstract A vector of four 32-bit floating-point numbers with relaxed
 324 *  alignment.
 325 *  @description In C++ and Metal, this type is also available as
 326 *  simd::packed::float4. The alignment of this type is that of the
 327 *  underlying scalar element type, so you can use it to load or store from
 328 *  an array of that type.                                                    */
 329typedef __attribute__((__ext_vector_type__(4),__aligned__(4))) float simd_packed_float4;
 330
 331/*! @abstract A vector of eight 32-bit floating-point numbers with relaxed
 332 *  alignment.
 333 *  @description In C++ this type is also available as simd::packed::float8.
 334 *  This type is not available in Metal. The alignment of this type is only
 335 *  that of the underlying scalar element type, so you can use it to load or
 336 *  store from an array of that type.                                         */
 337typedef __attribute__((__ext_vector_type__(8),__aligned__(4))) float simd_packed_float8;
 338
 339/*! @abstract A vector of sixteen 32-bit floating-point numbers with relaxed
 340 *  alignment.
 341 *  @description In C++ this type is also available as
 342 *  simd::packed::float16. This type is not available in Metal. The
 343 *  alignment of this type is only that of the underlying scalar element
 344 *  type, so you can use it to load or store from an array of that type.      */
 345typedef __attribute__((__ext_vector_type__(16),__aligned__(4))) float simd_packed_float16;
 346
 347/*! @abstract A vector of two 64-bit signed (twos-complement) integers with
 348 *  relaxed alignment.
 349 *  @description In C++ and Metal, this type is also available as
 350 *  simd::packed::long2. The alignment of this type is that of the
 351 *  underlying scalar element type, so you can use it to load or store from
 352 *  an array of that type.                                                    */
 353#if defined __LP64__
 354typedef __attribute__((__ext_vector_type__(2),__aligned__(8))) simd_long1 simd_packed_long2;
 355#else
 356typedef __attribute__((__ext_vector_type__(2),__aligned__(4))) simd_long1 simd_packed_long2;
 357#endif
 358
 359/*! @abstract A vector of four 64-bit signed (twos-complement) integers with
 360 *  relaxed alignment.
 361 *  @description In C++ and Metal, this type is also available as
 362 *  simd::packed::long4. The alignment of this type is that of the
 363 *  underlying scalar element type, so you can use it to load or store from
 364 *  an array of that type.                                                    */
 365#if defined __LP64__
 366typedef __attribute__((__ext_vector_type__(4),__aligned__(8))) simd_long1 simd_packed_long4;
 367#else
 368typedef __attribute__((__ext_vector_type__(4),__aligned__(4))) simd_long1 simd_packed_long4;
 369#endif
 370
 371/*! @abstract A vector of eight 64-bit signed (twos-complement) integers
 372 *  with relaxed alignment.
 373 *  @description In C++ this type is also available as simd::packed::long8.
 374 *  This type is not available in Metal. The alignment of this type is only
 375 *  that of the underlying scalar element type, so you can use it to load or
 376 *  store from an array of that type.                                         */
 377#if defined __LP64__
 378typedef __attribute__((__ext_vector_type__(8),__aligned__(8))) simd_long1 simd_packed_long8;
 379#else
 380typedef __attribute__((__ext_vector_type__(8),__aligned__(4))) simd_long1 simd_packed_long8;
 381#endif
 382
 383/*! @abstract A vector of two 64-bit unsigned integers with relaxed
 384 *  alignment.
 385 *  @description In C++ and Metal, this type is also available as
 386 *  simd::packed::ulong2. The alignment of this type is that of the
 387 *  underlying scalar element type, so you can use it to load or store from
 388 *  an array of that type.                                                    */
 389#if defined __LP64__
 390typedef __attribute__((__ext_vector_type__(2),__aligned__(8))) simd_ulong1 simd_packed_ulong2;
 391#else
 392typedef __attribute__((__ext_vector_type__(2),__aligned__(4))) simd_ulong1 simd_packed_ulong2;
 393#endif
 394
 395/*! @abstract A vector of four 64-bit unsigned integers with relaxed
 396 *  alignment.
 397 *  @description In C++ and Metal, this type is also available as
 398 *  simd::packed::ulong4. The alignment of this type is that of the
 399 *  underlying scalar element type, so you can use it to load or store from
 400 *  an array of that type.                                                    */
 401#if defined __LP64__
 402typedef __attribute__((__ext_vector_type__(4),__aligned__(8))) simd_ulong1 simd_packed_ulong4;
 403#else
 404typedef __attribute__((__ext_vector_type__(4),__aligned__(4))) simd_ulong1 simd_packed_ulong4;
 405#endif
 406
 407/*! @abstract A vector of eight 64-bit unsigned integers with relaxed
 408 *  alignment.
 409 *  @description In C++ this type is also available as simd::packed::ulong8.
 410 *  This type is not available in Metal. The alignment of this type is only
 411 *  that of the underlying scalar element type, so you can use it to load or
 412 *  store from an array of that type.                                         */
 413#if defined __LP64__
 414typedef __attribute__((__ext_vector_type__(8),__aligned__(8))) simd_ulong1 simd_packed_ulong8;
 415#else
 416typedef __attribute__((__ext_vector_type__(8),__aligned__(4))) simd_ulong1 simd_packed_ulong8;
 417#endif
 418
 419/*! @abstract A vector of two 64-bit floating-point numbers with relaxed
 420 *  alignment.
 421 *  @description In C++ and Metal, this type is also available as
 422 *  simd::packed::double2. The alignment of this type is that of the
 423 *  underlying scalar element type, so you can use it to load or store from
 424 *  an array of that type.                                                    */
 425#if defined __LP64__
 426typedef __attribute__((__ext_vector_type__(2),__aligned__(8))) double simd_packed_double2;
 427#else
 428typedef __attribute__((__ext_vector_type__(2),__aligned__(4))) double simd_packed_double2;
 429#endif
 430
 431/*! @abstract A vector of four 64-bit floating-point numbers with relaxed
 432 *  alignment.
 433 *  @description In C++ and Metal, this type is also available as
 434 *  simd::packed::double4. The alignment of this type is that of the
 435 *  underlying scalar element type, so you can use it to load or store from
 436 *  an array of that type.                                                    */
 437#if defined __LP64__
 438typedef __attribute__((__ext_vector_type__(4),__aligned__(8))) double simd_packed_double4;
 439#else
 440typedef __attribute__((__ext_vector_type__(4),__aligned__(4))) double simd_packed_double4;
 441#endif
 442
 443/*! @abstract A vector of eight 64-bit floating-point numbers with relaxed
 444 *  alignment.
 445 *  @description In C++ this type is also available as
 446 *  simd::packed::double8. This type is not available in Metal. The
 447 *  alignment of this type is only that of the underlying scalar element
 448 *  type, so you can use it to load or store from an array of that type.      */
 449#if defined __LP64__
 450typedef __attribute__((__ext_vector_type__(8),__aligned__(8))) double simd_packed_double8;
 451#else
 452typedef __attribute__((__ext_vector_type__(8),__aligned__(4))) double simd_packed_double8;
 453#endif
 454
 455/*  MARK: C++ vector types                                                    */
 456#if defined __cplusplus
 457namespace simd {
 458  namespace packed {
 459    /*! @abstract A vector of two 8-bit signed (twos-complement) integers
 460     *  with relaxed alignment.
 461     *  @description In C or Objective-C, this type is available as
 462     *  simd_packed_char2. The alignment of this type is only that of the
 463     *  underlying scalar element type, so you can use it to load or store
 464     *  from an array of that type.                                           */
 465typedef ::simd_packed_char2 char2;
 466  
 467    /*! @abstract A vector of four 8-bit signed (twos-complement) integers
 468     *  with relaxed alignment.
 469     *  @description In C or Objective-C, this type is available as
 470     *  simd_packed_char4. The alignment of this type is only that of the
 471     *  underlying scalar element type, so you can use it to load or store
 472     *  from an array of that type.                                           */
 473typedef ::simd_packed_char4 char4;
 474  
 475    /*! @abstract A vector of eight 8-bit signed (twos-complement) integers
 476     *  with relaxed alignment.
 477     *  @description This type is not available in Metal. In C or
 478     *  Objective-C, this type is available as simd_packed_char8. The
 479     *  alignment of this type is only that of the underlying scalar element
 480     *  type, so you can use it to load or store from an array of that type.  */
 481typedef ::simd_packed_char8 char8;
 482  
 483    /*! @abstract A vector of sixteen 8-bit signed (twos-complement)
 484     *  integers with relaxed alignment.
 485     *  @description This type is not available in Metal. In C or
 486     *  Objective-C, this type is available as simd_packed_char16. The
 487     *  alignment of this type is only that of the underlying scalar element
 488     *  type, so you can use it to load or store from an array of that type.  */
 489typedef ::simd_packed_char16 char16;
 490  
 491    /*! @abstract A vector of thirty-two 8-bit signed (twos-complement)
 492     *  integers with relaxed alignment.
 493     *  @description This type is not available in Metal. In C or
 494     *  Objective-C, this type is available as simd_packed_char32. The
 495     *  alignment of this type is only that of the underlying scalar element
 496     *  type, so you can use it to load or store from an array of that type.  */
 497typedef ::simd_packed_char32 char32;
 498  
 499    /*! @abstract A vector of sixty-four 8-bit signed (twos-complement)
 500     *  integers with relaxed alignment.
 501     *  @description This type is not available in Metal. In C or
 502     *  Objective-C, this type is available as simd_packed_char64. The
 503     *  alignment of this type is only that of the underlying scalar element
 504     *  type, so you can use it to load or store from an array of that type.  */
 505typedef ::simd_packed_char64 char64;
 506  
 507    /*! @abstract A vector of two 8-bit unsigned integers with relaxed
 508     *  alignment.
 509     *  @description In C or Objective-C, this type is available as
 510     *  simd_packed_uchar2. The alignment of this type is only that of the
 511     *  underlying scalar element type, so you can use it to load or store
 512     *  from an array of that type.                                           */
 513typedef ::simd_packed_uchar2 uchar2;
 514  
 515    /*! @abstract A vector of four 8-bit unsigned integers with relaxed
 516     *  alignment.
 517     *  @description In C or Objective-C, this type is available as
 518     *  simd_packed_uchar4. The alignment of this type is only that of the
 519     *  underlying scalar element type, so you can use it to load or store
 520     *  from an array of that type.                                           */
 521typedef ::simd_packed_uchar4 uchar4;
 522  
 523    /*! @abstract A vector of eight 8-bit unsigned integers with relaxed
 524     *  alignment.
 525     *  @description This type is not available in Metal. In C or
 526     *  Objective-C, this type is available as simd_packed_uchar8. The
 527     *  alignment of this type is only that of the underlying scalar element
 528     *  type, so you can use it to load or store from an array of that type.  */
 529typedef ::simd_packed_uchar8 uchar8;
 530  
 531    /*! @abstract A vector of sixteen 8-bit unsigned integers with relaxed
 532     *  alignment.
 533     *  @description This type is not available in Metal. In C or
 534     *  Objective-C, this type is available as simd_packed_uchar16. The
 535     *  alignment of this type is only that of the underlying scalar element
 536     *  type, so you can use it to load or store from an array of that type.  */
 537typedef ::simd_packed_uchar16 uchar16;
 538  
 539    /*! @abstract A vector of thirty-two 8-bit unsigned integers with
 540     *  relaxed alignment.
 541     *  @description This type is not available in Metal. In C or
 542     *  Objective-C, this type is available as simd_packed_uchar32. The
 543     *  alignment of this type is only that of the underlying scalar element
 544     *  type, so you can use it to load or store from an array of that type.  */
 545typedef ::simd_packed_uchar32 uchar32;
 546  
 547    /*! @abstract A vector of sixty-four 8-bit unsigned integers with
 548     *  relaxed alignment.
 549     *  @description This type is not available in Metal. In C or
 550     *  Objective-C, this type is available as simd_packed_uchar64. The
 551     *  alignment of this type is only that of the underlying scalar element
 552     *  type, so you can use it to load or store from an array of that type.  */
 553typedef ::simd_packed_uchar64 uchar64;
 554  
 555    /*! @abstract A vector of two 16-bit signed (twos-complement) integers
 556     *  with relaxed alignment.
 557     *  @description In C or Objective-C, this type is available as
 558     *  simd_packed_short2. The alignment of this type is only that of the
 559     *  underlying scalar element type, so you can use it to load or store
 560     *  from an array of that type.                                           */
 561typedef ::simd_packed_short2 short2;
 562  
 563    /*! @abstract A vector of four 16-bit signed (twos-complement) integers
 564     *  with relaxed alignment.
 565     *  @description In C or Objective-C, this type is available as
 566     *  simd_packed_short4. The alignment of this type is only that of the
 567     *  underlying scalar element type, so you can use it to load or store
 568     *  from an array of that type.                                           */
 569typedef ::simd_packed_short4 short4;
 570  
 571    /*! @abstract A vector of eight 16-bit signed (twos-complement) integers
 572     *  with relaxed alignment.
 573     *  @description This type is not available in Metal. In C or
 574     *  Objective-C, this type is available as simd_packed_short8. The
 575     *  alignment of this type is only that of the underlying scalar element
 576     *  type, so you can use it to load or store from an array of that type.  */
 577typedef ::simd_packed_short8 short8;
 578  
 579    /*! @abstract A vector of sixteen 16-bit signed (twos-complement)
 580     *  integers with relaxed alignment.
 581     *  @description This type is not available in Metal. In C or
 582     *  Objective-C, this type is available as simd_packed_short16. The
 583     *  alignment of this type is only that of the underlying scalar element
 584     *  type, so you can use it to load or store from an array of that type.  */
 585typedef ::simd_packed_short16 short16;
 586  
 587    /*! @abstract A vector of thirty-two 16-bit signed (twos-complement)
 588     *  integers with relaxed alignment.
 589     *  @description This type is not available in Metal. In C or
 590     *  Objective-C, this type is available as simd_packed_short32. The
 591     *  alignment of this type is only that of the underlying scalar element
 592     *  type, so you can use it to load or store from an array of that type.  */
 593typedef ::simd_packed_short32 short32;
 594  
 595    /*! @abstract A vector of two 16-bit unsigned integers with relaxed
 596     *  alignment.
 597     *  @description In C or Objective-C, this type is available as
 598     *  simd_packed_ushort2. The alignment of this type is only that of the
 599     *  underlying scalar element type, so you can use it to load or store
 600     *  from an array of that type.                                           */
 601typedef ::simd_packed_ushort2 ushort2;
 602  
 603    /*! @abstract A vector of four 16-bit unsigned integers with relaxed
 604     *  alignment.
 605     *  @description In C or Objective-C, this type is available as
 606     *  simd_packed_ushort4. The alignment of this type is only that of the
 607     *  underlying scalar element type, so you can use it to load or store
 608     *  from an array of that type.                                           */
 609typedef ::simd_packed_ushort4 ushort4;
 610  
 611    /*! @abstract A vector of eight 16-bit unsigned integers with relaxed
 612     *  alignment.
 613     *  @description This type is not available in Metal. In C or
 614     *  Objective-C, this type is available as simd_packed_ushort8. The
 615     *  alignment of this type is only that of the underlying scalar element
 616     *  type, so you can use it to load or store from an array of that type.  */
 617typedef ::simd_packed_ushort8 ushort8;
 618  
 619    /*! @abstract A vector of sixteen 16-bit unsigned integers with relaxed
 620     *  alignment.
 621     *  @description This type is not available in Metal. In C or
 622     *  Objective-C, this type is available as simd_packed_ushort16. The
 623     *  alignment of this type is only that of the underlying scalar element
 624     *  type, so you can use it to load or store from an array of that type.  */
 625typedef ::simd_packed_ushort16 ushort16;
 626  
 627    /*! @abstract A vector of thirty-two 16-bit unsigned integers with
 628     *  relaxed alignment.
 629     *  @description This type is not available in Metal. In C or
 630     *  Objective-C, this type is available as simd_packed_ushort32. The
 631     *  alignment of this type is only that of the underlying scalar element
 632     *  type, so you can use it to load or store from an array of that type.  */
 633typedef ::simd_packed_ushort32 ushort32;
 634  
 635    /*! @abstract A vector of two 16-bit floating-point numbers with relaxed
 636     *  alignment.
 637     *  @description In C or Objective-C, this type is available as
 638     *  simd_packed_half2. The alignment of this type is only that of the
 639     *  underlying scalar element type, so you can use it to load or store
 640     *  from an array of that type.                                           */
 641typedef ::simd_packed_half2 half2;
 642  
 643    /*! @abstract A vector of four 16-bit floating-point numbers with
 644     *  relaxed alignment.
 645     *  @description In C or Objective-C, this type is available as
 646     *  simd_packed_half4. The alignment of this type is only that of the
 647     *  underlying scalar element type, so you can use it to load or store
 648     *  from an array of that type.                                           */
 649typedef ::simd_packed_half4 half4;
 650  
 651    /*! @abstract A vector of eight 16-bit floating-point numbers with
 652     *  relaxed alignment.
 653     *  @description This type is not available in Metal. In C or
 654     *  Objective-C, this type is available as simd_packed_half8. The
 655     *  alignment of this type is only that of the underlying scalar element
 656     *  type, so you can use it to load or store from an array of that type.  */
 657typedef ::simd_packed_half8 half8;
 658  
 659    /*! @abstract A vector of sixteen 16-bit floating-point numbers with
 660     *  relaxed alignment.
 661     *  @description This type is not available in Metal. In C or
 662     *  Objective-C, this type is available as simd_packed_half16. The
 663     *  alignment of this type is only that of the underlying scalar element
 664     *  type, so you can use it to load or store from an array of that type.  */
 665typedef ::simd_packed_half16 half16;
 666  
 667    /*! @abstract A vector of thirty-two 16-bit floating-point numbers with
 668     *  relaxed alignment.
 669     *  @description This type is not available in Metal. In C or
 670     *  Objective-C, this type is available as simd_packed_half32. The
 671     *  alignment of this type is only that of the underlying scalar element
 672     *  type, so you can use it to load or store from an array of that type.  */
 673typedef ::simd_packed_half32 half32;
 674  
 675    /*! @abstract A vector of two 32-bit signed (twos-complement) integers
 676     *  with relaxed alignment.
 677     *  @description In C or Objective-C, this type is available as
 678     *  simd_packed_int2. The alignment of this type is only that of the
 679     *  underlying scalar element type, so you can use it to load or store
 680     *  from an array of that type.                                           */
 681typedef ::simd_packed_int2 int2;
 682  
 683    /*! @abstract A vector of four 32-bit signed (twos-complement) integers
 684     *  with relaxed alignment.
 685     *  @description In C or Objective-C, this type is available as
 686     *  simd_packed_int4. The alignment of this type is only that of the
 687     *  underlying scalar element type, so you can use it to load or store
 688     *  from an array of that type.                                           */
 689typedef ::simd_packed_int4 int4;
 690  
 691    /*! @abstract A vector of eight 32-bit signed (twos-complement) integers
 692     *  with relaxed alignment.
 693     *  @description This type is not available in Metal. In C or
 694     *  Objective-C, this type is available as simd_packed_int8. The
 695     *  alignment of this type is only that of the underlying scalar element
 696     *  type, so you can use it to load or store from an array of that type.  */
 697typedef ::simd_packed_int8 int8;
 698  
 699    /*! @abstract A vector of sixteen 32-bit signed (twos-complement)
 700     *  integers with relaxed alignment.
 701     *  @description This type is not available in Metal. In C or
 702     *  Objective-C, this type is available as simd_packed_int16. The
 703     *  alignment of this type is only that of the underlying scalar element
 704     *  type, so you can use it to load or store from an array of that type.  */
 705typedef ::simd_packed_int16 int16;
 706  
 707    /*! @abstract A vector of two 32-bit unsigned integers with relaxed
 708     *  alignment.
 709     *  @description In C or Objective-C, this type is available as
 710     *  simd_packed_uint2. The alignment of this type is only that of the
 711     *  underlying scalar element type, so you can use it to load or store
 712     *  from an array of that type.                                           */
 713typedef ::simd_packed_uint2 uint2;
 714  
 715    /*! @abstract A vector of four 32-bit unsigned integers with relaxed
 716     *  alignment.
 717     *  @description In C or Objective-C, this type is available as
 718     *  simd_packed_uint4. The alignment of this type is only that of the
 719     *  underlying scalar element type, so you can use it to load or store
 720     *  from an array of that type.                                           */
 721typedef ::simd_packed_uint4 uint4;
 722  
 723    /*! @abstract A vector of eight 32-bit unsigned integers with relaxed
 724     *  alignment.
 725     *  @description This type is not available in Metal. In C or
 726     *  Objective-C, this type is available as simd_packed_uint8. The
 727     *  alignment of this type is only that of the underlying scalar element
 728     *  type, so you can use it to load or store from an array of that type.  */
 729typedef ::simd_packed_uint8 uint8;
 730  
 731    /*! @abstract A vector of sixteen 32-bit unsigned integers with relaxed
 732     *  alignment.
 733     *  @description This type is not available in Metal. In C or
 734     *  Objective-C, this type is available as simd_packed_uint16. The
 735     *  alignment of this type is only that of the underlying scalar element
 736     *  type, so you can use it to load or store from an array of that type.  */
 737typedef ::simd_packed_uint16 uint16;
 738  
 739    /*! @abstract A vector of two 32-bit floating-point numbers with relaxed
 740     *  alignment.
 741     *  @description In C or Objective-C, this type is available as
 742     *  simd_packed_float2. The alignment of this type is only that of the
 743     *  underlying scalar element type, so you can use it to load or store
 744     *  from an array of that type.                                           */
 745typedef ::simd_packed_float2 float2;
 746  
 747    /*! @abstract A vector of four 32-bit floating-point numbers with
 748     *  relaxed alignment.
 749     *  @description In C or Objective-C, this type is available as
 750     *  simd_packed_float4. The alignment of this type is only that of the
 751     *  underlying scalar element type, so you can use it to load or store
 752     *  from an array of that type.                                           */
 753typedef ::simd_packed_float4 float4;
 754  
 755    /*! @abstract A vector of eight 32-bit floating-point numbers with
 756     *  relaxed alignment.
 757     *  @description This type is not available in Metal. In C or
 758     *  Objective-C, this type is available as simd_packed_float8. The
 759     *  alignment of this type is only that of the underlying scalar element
 760     *  type, so you can use it to load or store from an array of that type.  */
 761typedef ::simd_packed_float8 float8;
 762  
 763    /*! @abstract A vector of sixteen 32-bit floating-point numbers with
 764     *  relaxed alignment.
 765     *  @description This type is not available in Metal. In C or
 766     *  Objective-C, this type is available as simd_packed_float16. The
 767     *  alignment of this type is only that of the underlying scalar element
 768     *  type, so you can use it to load or store from an array of that type.  */
 769typedef ::simd_packed_float16 float16;
 770  
 771    /*! @abstract A vector of two 64-bit signed (twos-complement) integers
 772     *  with relaxed alignment.
 773     *  @description In C or Objective-C, this type is available as
 774     *  simd_packed_long2. The alignment of this type is only that of the
 775     *  underlying scalar element type, so you can use it to load or store
 776     *  from an array of that type.                                           */
 777typedef ::simd_packed_long2 long2;
 778  
 779    /*! @abstract A vector of four 64-bit signed (twos-complement) integers
 780     *  with relaxed alignment.
 781     *  @description In C or Objective-C, this type is available as
 782     *  simd_packed_long4. The alignment of this type is only that of the
 783     *  underlying scalar element type, so you can use it to load or store
 784     *  from an array of that type.                                           */
 785typedef ::simd_packed_long4 long4;
 786  
 787    /*! @abstract A vector of eight 64-bit signed (twos-complement) integers
 788     *  with relaxed alignment.
 789     *  @description This type is not available in Metal. In C or
 790     *  Objective-C, this type is available as simd_packed_long8. The
 791     *  alignment of this type is only that of the underlying scalar element
 792     *  type, so you can use it to load or store from an array of that type.  */
 793typedef ::simd_packed_long8 long8;
 794  
 795    /*! @abstract A vector of two 64-bit unsigned integers with relaxed
 796     *  alignment.
 797     *  @description In C or Objective-C, this type is available as
 798     *  simd_packed_ulong2. The alignment of this type is only that of the
 799     *  underlying scalar element type, so you can use it to load or store
 800     *  from an array of that type.                                           */
 801typedef ::simd_packed_ulong2 ulong2;
 802  
 803    /*! @abstract A vector of four 64-bit unsigned integers with relaxed
 804     *  alignment.
 805     *  @description In C or Objective-C, this type is available as
 806     *  simd_packed_ulong4. The alignment of this type is only that of the
 807     *  underlying scalar element type, so you can use it to load or store
 808     *  from an array of that type.                                           */
 809typedef ::simd_packed_ulong4 ulong4;
 810  
 811    /*! @abstract A vector of eight 64-bit unsigned integers with relaxed
 812     *  alignment.
 813     *  @description This type is not available in Metal. In C or
 814     *  Objective-C, this type is available as simd_packed_ulong8. The
 815     *  alignment of this type is only that of the underlying scalar element
 816     *  type, so you can use it to load or store from an array of that type.  */
 817typedef ::simd_packed_ulong8 ulong8;
 818  
 819    /*! @abstract A vector of two 64-bit floating-point numbers with relaxed
 820     *  alignment.
 821     *  @description In C or Objective-C, this type is available as
 822     *  simd_packed_double2. The alignment of this type is only that of the
 823     *  underlying scalar element type, so you can use it to load or store
 824     *  from an array of that type.                                           */
 825typedef ::simd_packed_double2 double2;
 826  
 827    /*! @abstract A vector of four 64-bit floating-point numbers with
 828     *  relaxed alignment.
 829     *  @description In C or Objective-C, this type is available as
 830     *  simd_packed_double4. The alignment of this type is only that of the
 831     *  underlying scalar element type, so you can use it to load or store
 832     *  from an array of that type.                                           */
 833typedef ::simd_packed_double4 double4;
 834  
 835    /*! @abstract A vector of eight 64-bit floating-point numbers with
 836     *  relaxed alignment.
 837     *  @description This type is not available in Metal. In C or
 838     *  Objective-C, this type is available as simd_packed_double8. The
 839     *  alignment of this type is only that of the underlying scalar element
 840     *  type, so you can use it to load or store from an array of that type.  */
 841typedef ::simd_packed_double8 double8;
 842  
 843  } /* namespace simd::packed::                                               */
 844} /* namespace simd::                                                         */
 845#endif /* __cplusplus                                                         */
 846
 847/*  MARK: Deprecated vector types                                             */
 848/*! @group Deprecated vector types
 849 *  @discussion These are the original types used by earlier versions of the
 850 *  simd library; they are provided here for compatability with existing source
 851 *  files. Use the new ("simd_"-prefixed) types for future development.       */
 852/*! @abstract A vector of two 8-bit signed (twos-complement) integers with
 853 *  relaxed alignment.
 854 *  @description This type is deprecated; you should use simd_packed_char2
 855 *  or simd::packed::char2 instead.                                           */
 856typedef simd_packed_char2 packed_char2;
 857
 858/*! @abstract A vector of four 8-bit signed (twos-complement) integers with
 859 *  relaxed alignment.
 860 *  @description This type is deprecated; you should use simd_packed_char4
 861 *  or simd::packed::char4 instead.                                           */
 862typedef simd_packed_char4 packed_char4;
 863
 864/*! @abstract A vector of eight 8-bit signed (twos-complement) integers with
 865 *  relaxed alignment.
 866 *  @description This type is deprecated; you should use simd_packed_char8
 867 *  or simd::packed::char8 instead.                                           */
 868typedef simd_packed_char8 packed_char8;
 869
 870/*! @abstract A vector of sixteen 8-bit signed (twos-complement) integers
 871 *  with relaxed alignment.
 872 *  @description This type is deprecated; you should use simd_packed_char16
 873 *  or simd::packed::char16 instead.                                          */
 874typedef simd_packed_char16 packed_char16;
 875
 876/*! @abstract A vector of thirty-two 8-bit signed (twos-complement) integers
 877 *  with relaxed alignment.
 878 *  @description This type is deprecated; you should use simd_packed_char32
 879 *  or simd::packed::char32 instead.                                          */
 880typedef simd_packed_char32 packed_char32;
 881
 882/*! @abstract A vector of sixty-four 8-bit signed (twos-complement) integers
 883 *  with relaxed alignment.
 884 *  @description This type is deprecated; you should use simd_packed_char64
 885 *  or simd::packed::char64 instead.                                          */
 886typedef simd_packed_char64 packed_char64;
 887
 888/*! @abstract A vector of two 8-bit unsigned integers with relaxed
 889 *  alignment.
 890 *  @description This type is deprecated; you should use simd_packed_uchar2
 891 *  or simd::packed::uchar2 instead.                                          */
 892typedef simd_packed_uchar2 packed_uchar2;
 893
 894/*! @abstract A vector of four 8-bit unsigned integers with relaxed
 895 *  alignment.
 896 *  @description This type is deprecated; you should use simd_packed_uchar4
 897 *  or simd::packed::uchar4 instead.                                          */
 898typedef simd_packed_uchar4 packed_uchar4;
 899
 900/*! @abstract A vector of eight 8-bit unsigned integers with relaxed
 901 *  alignment.
 902 *  @description This type is deprecated; you should use simd_packed_uchar8
 903 *  or simd::packed::uchar8 instead.                                          */
 904typedef simd_packed_uchar8 packed_uchar8;
 905
 906/*! @abstract A vector of sixteen 8-bit unsigned integers with relaxed
 907 *  alignment.
 908 *  @description This type is deprecated; you should use simd_packed_uchar16
 909 *  or simd::packed::uchar16 instead.                                         */
 910typedef simd_packed_uchar16 packed_uchar16;
 911
 912/*! @abstract A vector of thirty-two 8-bit unsigned integers with relaxed
 913 *  alignment.
 914 *  @description This type is deprecated; you should use simd_packed_uchar32
 915 *  or simd::packed::uchar32 instead.                                         */
 916typedef simd_packed_uchar32 packed_uchar32;
 917
 918/*! @abstract A vector of sixty-four 8-bit unsigned integers with relaxed
 919 *  alignment.
 920 *  @description This type is deprecated; you should use simd_packed_uchar64
 921 *  or simd::packed::uchar64 instead.                                         */
 922typedef simd_packed_uchar64 packed_uchar64;
 923
 924/*! @abstract A vector of two 16-bit signed (twos-complement) integers with
 925 *  relaxed alignment.
 926 *  @description This type is deprecated; you should use simd_packed_short2
 927 *  or simd::packed::short2 instead.                                          */
 928typedef simd_packed_short2 packed_short2;
 929
 930/*! @abstract A vector of four 16-bit signed (twos-complement) integers with
 931 *  relaxed alignment.
 932 *  @description This type is deprecated; you should use simd_packed_short4
 933 *  or simd::packed::short4 instead.                                          */
 934typedef simd_packed_short4 packed_short4;
 935
 936/*! @abstract A vector of eight 16-bit signed (twos-complement) integers
 937 *  with relaxed alignment.
 938 *  @description This type is deprecated; you should use simd_packed_short8
 939 *  or simd::packed::short8 instead.                                          */
 940typedef simd_packed_short8 packed_short8;
 941
 942/*! @abstract A vector of sixteen 16-bit signed (twos-complement) integers
 943 *  with relaxed alignment.
 944 *  @description This type is deprecated; you should use simd_packed_short16
 945 *  or simd::packed::short16 instead.                                         */
 946typedef simd_packed_short16 packed_short16;
 947
 948/*! @abstract A vector of thirty-two 16-bit signed (twos-complement)
 949 *  integers with relaxed alignment.
 950 *  @description This type is deprecated; you should use simd_packed_short32
 951 *  or simd::packed::short32 instead.                                         */
 952typedef simd_packed_short32 packed_short32;
 953
 954/*! @abstract A vector of two 16-bit unsigned integers with relaxed
 955 *  alignment.
 956 *  @description This type is deprecated; you should use simd_packed_ushort2
 957 *  or simd::packed::ushort2 instead.                                         */
 958typedef simd_packed_ushort2 packed_ushort2;
 959
 960/*! @abstract A vector of four 16-bit unsigned integers with relaxed
 961 *  alignment.
 962 *  @description This type is deprecated; you should use simd_packed_ushort4
 963 *  or simd::packed::ushort4 instead.                                         */
 964typedef simd_packed_ushort4 packed_ushort4;
 965
 966/*! @abstract A vector of eight 16-bit unsigned integers with relaxed
 967 *  alignment.
 968 *  @description This type is deprecated; you should use simd_packed_ushort8
 969 *  or simd::packed::ushort8 instead.                                         */
 970typedef simd_packed_ushort8 packed_ushort8;
 971
 972/*! @abstract A vector of sixteen 16-bit unsigned integers with relaxed
 973 *  alignment.
 974 *  @description This type is deprecated; you should use
 975 *  simd_packed_ushort16 or simd::packed::ushort16 instead.                   */
 976typedef simd_packed_ushort16 packed_ushort16;
 977
 978/*! @abstract A vector of thirty-two 16-bit unsigned integers with relaxed
 979 *  alignment.
 980 *  @description This type is deprecated; you should use
 981 *  simd_packed_ushort32 or simd::packed::ushort32 instead.                   */
 982typedef simd_packed_ushort32 packed_ushort32;
 983
 984/*! @abstract A vector of two 32-bit signed (twos-complement) integers with
 985 *  relaxed alignment.
 986 *  @description This type is deprecated; you should use simd_packed_int2 or
 987 *  simd::packed::int2 instead.                                               */
 988typedef simd_packed_int2 packed_int2;
 989
 990/*! @abstract A vector of four 32-bit signed (twos-complement) integers with
 991 *  relaxed alignment.
 992 *  @description This type is deprecated; you should use simd_packed_int4 or
 993 *  simd::packed::int4 instead.                                               */
 994typedef simd_packed_int4 packed_int4;
 995
 996/*! @abstract A vector of eight 32-bit signed (twos-complement) integers
 997 *  with relaxed alignment.
 998 *  @description This type is deprecated; you should use simd_packed_int8 or
 999 *  simd::packed::int8 instead.                                               */
1000typedef simd_packed_int8 packed_int8;
1001
1002/*! @abstract A vector of sixteen 32-bit signed (twos-complement) integers
1003 *  with relaxed alignment.
1004 *  @description This type is deprecated; you should use simd_packed_int16
1005 *  or simd::packed::int16 instead.                                           */
1006typedef simd_packed_int16 packed_int16;
1007
1008/*! @abstract A vector of two 32-bit unsigned integers with relaxed
1009 *  alignment.
1010 *  @description This type is deprecated; you should use simd_packed_uint2
1011 *  or simd::packed::uint2 instead.                                           */
1012typedef simd_packed_uint2 packed_uint2;
1013
1014/*! @abstract A vector of four 32-bit unsigned integers with relaxed
1015 *  alignment.
1016 *  @description This type is deprecated; you should use simd_packed_uint4
1017 *  or simd::packed::uint4 instead.                                           */
1018typedef simd_packed_uint4 packed_uint4;
1019
1020/*! @abstract A vector of eight 32-bit unsigned integers with relaxed
1021 *  alignment.
1022 *  @description This type is deprecated; you should use simd_packed_uint8
1023 *  or simd::packed::uint8 instead.                                           */
1024typedef simd_packed_uint8 packed_uint8;
1025
1026/*! @abstract A vector of sixteen 32-bit unsigned integers with relaxed
1027 *  alignment.
1028 *  @description This type is deprecated; you should use simd_packed_uint16
1029 *  or simd::packed::uint16 instead.                                          */
1030typedef simd_packed_uint16 packed_uint16;
1031
1032/*! @abstract A vector of two 32-bit floating-point numbers with relaxed
1033 *  alignment.
1034 *  @description This type is deprecated; you should use simd_packed_float2
1035 *  or simd::packed::float2 instead.                                          */
1036typedef simd_packed_float2 packed_float2;
1037
1038/*! @abstract A vector of four 32-bit floating-point numbers with relaxed
1039 *  alignment.
1040 *  @description This type is deprecated; you should use simd_packed_float4
1041 *  or simd::packed::float4 instead.                                          */
1042typedef simd_packed_float4 packed_float4;
1043
1044/*! @abstract A vector of eight 32-bit floating-point numbers with relaxed
1045 *  alignment.
1046 *  @description This type is deprecated; you should use simd_packed_float8
1047 *  or simd::packed::float8 instead.                                          */
1048typedef simd_packed_float8 packed_float8;
1049
1050/*! @abstract A vector of sixteen 32-bit floating-point numbers with relaxed
1051 *  alignment.
1052 *  @description This type is deprecated; you should use simd_packed_float16
1053 *  or simd::packed::float16 instead.                                         */
1054typedef simd_packed_float16 packed_float16;
1055
1056/*! @abstract A vector of two 64-bit signed (twos-complement) integers with
1057 *  relaxed alignment.
1058 *  @description This type is deprecated; you should use simd_packed_long2
1059 *  or simd::packed::long2 instead.                                           */
1060typedef simd_packed_long2 packed_long2;
1061
1062/*! @abstract A vector of four 64-bit signed (twos-complement) integers with
1063 *  relaxed alignment.
1064 *  @description This type is deprecated; you should use simd_packed_long4
1065 *  or simd::packed::long4 instead.                                           */
1066typedef simd_packed_long4 packed_long4;
1067
1068/*! @abstract A vector of eight 64-bit signed (twos-complement) integers
1069 *  with relaxed alignment.
1070 *  @description This type is deprecated; you should use simd_packed_long8
1071 *  or simd::packed::long8 instead.                                           */
1072typedef simd_packed_long8 packed_long8;
1073
1074/*! @abstract A vector of two 64-bit unsigned integers with relaxed
1075 *  alignment.
1076 *  @description This type is deprecated; you should use simd_packed_ulong2
1077 *  or simd::packed::ulong2 instead.                                          */
1078typedef simd_packed_ulong2 packed_ulong2;
1079
1080/*! @abstract A vector of four 64-bit unsigned integers with relaxed
1081 *  alignment.
1082 *  @description This type is deprecated; you should use simd_packed_ulong4
1083 *  or simd::packed::ulong4 instead.                                          */
1084typedef simd_packed_ulong4 packed_ulong4;
1085
1086/*! @abstract A vector of eight 64-bit unsigned integers with relaxed
1087 *  alignment.
1088 *  @description This type is deprecated; you should use simd_packed_ulong8
1089 *  or simd::packed::ulong8 instead.                                          */
1090typedef simd_packed_ulong8 packed_ulong8;
1091
1092/*! @abstract A vector of two 64-bit floating-point numbers with relaxed
1093 *  alignment.
1094 *  @description This type is deprecated; you should use simd_packed_double2
1095 *  or simd::packed::double2 instead.                                         */
1096typedef simd_packed_double2 packed_double2;
1097
1098/*! @abstract A vector of four 64-bit floating-point numbers with relaxed
1099 *  alignment.
1100 *  @description This type is deprecated; you should use simd_packed_double4
1101 *  or simd::packed::double4 instead.                                         */
1102typedef simd_packed_double4 packed_double4;
1103
1104/*! @abstract A vector of eight 64-bit floating-point numbers with relaxed
1105 *  alignment.
1106 *  @description This type is deprecated; you should use simd_packed_double8
1107 *  or simd::packed::double8 instead.                                         */
1108typedef simd_packed_double8 packed_double8;
1109
1110# endif /* SIMD_COMPILER_HAS_REQUIRED_FEATURES */
1111#endif