Vector types

IBM® Open XL C/C++ supports vector processing technologies through language extensions.

IBM Open 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__pixel_pair1_quad2floatdouble
Notes:
  • 1 This type is valid when -mcpu is set to target Power10 processors.
  • 2 This type is valid when -mcpu is set to target Power10 processors.
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
__vector_pair Opaque type Depend on the instruction or built-in function that it is used with
__vector_quad Opaque type Depend on the instruction or built-in function that it is used with
Note: The __vector_pair and __vector_quad types are valid only when -mcpu is set to target Power10 processors.

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.

Different vector types are incompatible. Assignments between variables of different vector types might result in programming errors.