Vector types

XL C/C++ supports vector processing technologies through language extensions. XL C/C++ implements and extends the AltiVec Programming Interface specification. In the extended syntax, type qualifiers and storage class specifiers can precede the keyword vector (or its alternative spelling, __vector) in a declaration.

Most of the legal forms of the syntax are captured in the following diagram. Some variations have been omitted from the diagram for the sake of clarity: type qualifiers such as const and storage class specifiers such as static can appear in any order within the declaration, as long as neither immediately follows the keyword vector (or __vector).

Vector declaration syntax

Read syntax diagramSkip visual syntax diagramtype_qualifierstorage_class_specifiervector__vectorboolsignedunsignedcharshortintintlong longpixel__pixelfloatdouble
Notes:
  • The keyword vector is recognized in a declaration context only when used as a type specifier and when vector support is enabled. The keywords pixel, __pixel and bool are recognized as valid type specifiers only when preceded by the keyword vector or __vector.
  • Duplicate type specifiers are ignored in a vector declaration context.

The following table lists the supported vector data types, the size and possible values for each type.

Table 1. Vector data types
Type Interpretation of content Range of values
vector unsigned char 16 unsigned char 0..255
vector signed char 16 signed char -128..127
vector bool char 16 unsigned char 0, 255
vector unsigned short 8 unsigned short 0..65535
vector unsigned short int
vector signed short 8 signed short -32768..32767
vector signed short int
vector bool short 8 unsigned short 0, 65535
vector bool short int
vector unsigned int 4 unsigned int 0..232-1
vector signed int 4 signed int -231..231-1
vector bool int 4 unsigned int 0, 232-1
vector unsigned long long 2 unsigned long long 0..264-1
vector bool long long 0, 264-1
vector signed long long 2 signed long long -263..263-1
vector float 4 float IEEE-754 single (32 bit) precision floating-point values
vector double 2 double IEEE-754 double (64 bit) precision floating-point values
vector pixel 8 unsigned short 1/5/5/5 pixel

All vector types are aligned on a 16-byte boundary. An aggregate that contains one or more vector types is aligned on a 16-byte boundary, and padded, if necessary, so that each member of vector type is also 16-byte aligned.