Predefined Functions for Vector Programming So that programmers can access the vector facilities provided by the Power ISA, ABI-compliant environments should provide the vector functions and predicates described in and . Although functions are specified in this document in C/C++ language syntax, other environments should follow the proposed vector built-in naming and function set, based on the vector types provided by the respective language. If signed or unsigned is omitted, the signedness of the vector type is the default signedness of the base type. The default varies depending on the operating system, so a portable program should always specify the signedness. Vector built-in functions that take a pointer as an argument can also take pointers with const or volatile modifiers as argument. Arguments that are documented as const int require literal integral values within the vector built-in invocation. Specifying a literal value outside the supported range leads to implementation-defined behavior. It is recommended that compilers generate a warning or error for out-of-range literals. Vectors may be constructed from scalar values with a vector constructor. For example: (vector type){e1, e2, ..., en}. The values specified for each vector element can be either a compile-time constant or a runtime expression. Floating-point vector built-in operators are controlled by the rounding mode set for floating-point operations unless otherwise specified.
Vector Built-In Functions summarizes the built-in vector functions for the Power SIMD vector programming API. In addition to these core functions, and describe functions that correspond to deprecated interfaces of previous versions of the Power SIMD API and the Altivec APIs. Functions are listed alphabetically; supported prototypes are provided for each function. Prototypes are grouped by integer and floating-point types. Within each group, types are sorted alphabetically, first by type name and then by modifier. Prototypes are first sorted by the built-in result type, which is the output argument. Then, prototypes are sorted by the input arguments; ARG1, ARG2, and ARG3; in order. shows the format of the prototypes and provides an example. Format of Prototypes Output Argument Function Input Arguments ARG1 ARG2 ARG3 Modifier Type Modifier Type Modifier Type Modifier Type Sort 3 Sort 2 Sort 1 Sort 5 Sort 4 Sort 7 Sort 6 Sort 9 Sort 8 vector unsigned char vec_insert unsigned char vector bool char signed int
Vector Built-In Functions Group Description of Vector Built-In Functions (with Prototypes) VEC_ABS (ARG1) Purpose: Returns a vector that contains the absolute values of the contents of the given vector. Result value: The value of each element of the result is the absolute value of the corresponding element of ARG1. For integer vectors, the arithmetic is modular. vector signed char vec_abs (vector signed char); vector signed int vec_abs (vector signed int); vector signed long long vec_abs (vector signed long long); vector signed short vec_abs (vector signed short); vector double vec_abs (vector double); vector float vec_abs (vector float); VEC_ABSD (ARG1, ARG2) POWER ISA 3.0 Purpose: Computes the absolute difference. Result value: Each element of the result contains the absolute difference of the corresponding input elements using modulo arithmetic. POWER ISA 3.0 vector unsigned char vec_absd (vector unsigned char, vector unsigned char); POWER ISA 3.0 vector unsigned int vec_absd (vector unsigned int, vector unsigned int); POWER ISA 3.0 vector unsigned short vec_absd (vector unsigned short, vector unsigned short); VEC_ABSS (ARG1) Purpose: Returns a vector containing the saturated absolute values of the contents of the given vector. Result value: The value of each element of the result is the saturated absolute value of the corresponding element of ARG1. vector signed char vec_abss (vector signed char); vector signed int vec_abss (vector signed int); vector signed short vec_abss (vector signed short); VEC_ADD (ARG1, ARG2) Purpose: Returns a vector containing the sums of each set of corresponding elements of the given vectors. Result value: The value of each element of the result is the sum of the corresponding elements of ARG1 and ARG2. For signed and unsigned integers, modular arithmetic is used. vector signed char vec_add (vector signed char, vector signed char); vector unsigned char vec_add (vector unsigned char, vector unsigned char); vector signed int vec_add (vector signed int, vector signed int); vector unsigned int vec_add (vector unsigned int, vector unsigned int); vector signed __int128 vec_add (vector signed __int128, vector signed __int128); vector unsigned __int128 vec_add (vector unsigned __int128, vector unsigned __int128); vector signed long long vec_add (vector signed long long, vector signed long long); vector unsigned long long vec_add (vector unsigned long long, vector unsigned long long); vector signed short vec_add (vector signed short, vector signed short); vector unsigned short vec_add (vector unsigned short, vector unsigned short); vector double vec_add (vector double, vector double); vector float vec_add (vector float, vector float); VEC_ADDC (ARG1, ARG2) Purpose: Returns a vector containing the carry produced by adding each set of corresponding elements of the given vectors. Result value: The value of each element of the result is the carry produced by adding the corresponding elements of ARG1 and ARG2 (1 if there is a carry, 0 otherwise). vector signed int vec_addc (vector signed int, vector signed int); vector unsigned int vec_addc (vector unsigned int, vector unsigned int); vector signed __int128 vec_addc (vector signed __int128, vector signed __int128); vector unsigned __int128 vec_addc (vector unsigned __int128, vector unsigned __int128); VEC_ADDE (ARG1, ARG2, ARG3) Purpose: Returns a vector containing the result of adding each set of the corresponding elements of ARG1 and ARG2 with a carry (that has a value of either 0 or 1) specified as the ARG3 vector. Result value: The value of each element of the result is produced by adding the corresponding elements of ARG1 and ARG2 and a carry specified in ARG3 (1 if there is a carry, 0 otherwise). vector signed int vec_adde (vector signed int, vector signed int, vector signed int); vector unsigned int vec_adde (vector unsigned int, vector unsigned int, vector unsigned int); vector signed __int128 vec_adde (vector signed __int128, vector signed __int128, vector signed __int128); vector unsigned __int128 vec_adde (vector unsigned __int128, vector unsigned __int128, vector unsigned __int128); VEC_ADDEC (ARG1, ARG2, ARG3) Purpose: Returns a vector containing the carry produced by adding each set of the corresponding elements of ARG1 and ARG2 with a carry (that has a value of either 0 or 1) specified as the ARG3 vector. Result value: The value of each element of the result is the carry produced by adding the corresponding elements of ARG1 and ARG2 and a carry specified in ARG3 (1 if there is a carry, 0 otherwise). vector signed int vec_addec (vector signed int, vector signed int, vector signed int); vector unsigned int vec_addec (vector unsigned int, vector unsigned int, vector unsigned int); vector signed __int128 vec_addec (vector signed __int128, vector signed __int128, vector signed __int128); vector unsigned __int128 vec_addec (vector unsigned __int128, vector unsigned __int128, vector unsigned __int128); VEC_ADDS (ARG1, ARG2) Purpose: Returns a vector containing the saturated sums of each set of corresponding elements of the given vectors. Result value: The value of each element of the result is the saturated sum of the corresponding elements of ARG1 and ARG2. vector signed char vec_adds (vector signed char, vector signed char); vector unsigned char vec_adds (vector unsigned char, vector unsigned char); vector signed int vec_adds (vector signed int, vector signed int); vector unsigned int vec_adds (vector unsigned int, vector unsigned int); vector signed short vec_adds (vector signed short, vector signed short); vector unsigned short vec_adds (vector unsigned short, vector unsigned short); VEC_AND (ARG1, ARG2) Purpose: Performs a bitwise AND of the given vectors. Result value: The result is the bitwise AND of ARG1 and ARG2. vector bool char vec_and (vector bool char, vector bool char); vector signed char vec_and (vector signed char, vector signed char); vector unsigned char vec_and (vector unsigned char, vector unsigned char); vector bool int vec_and (vector bool int, vector bool int); vector signed int vec_and (vector signed int, vector signed int); vector unsigned int vec_and (vector unsigned int, vector unsigned int); Phased in. This optional function is being phased in, and it might not be available on all implementations. Phased-in interfaces are optional for the current generation of compliant systems. vector bool long long vec_and (vector bool long long, vector bool long long) Phased in. vector signed long long vec_and (vector signed long long, vector signed long long); Phased in. vector unsigned long long vec_and (vector unsigned long long, vector unsigned long long); vector bool short vec_and (vector bool short, vector bool short); vector signed short vec_and (vector signed short, vector signed short); vector unsigned short vec_and (vector unsigned short, vector unsigned short); vector double vec_and (vector double, vector double); vector float vec_and (vector float, vector float); VEC_ANDC (ARG1, ARG2) Purpose: Performs a bitwise AND of the first argument and the bitwise complement of the second argument. Result value: The result is the bitwise AND of ARG1 with the bitwise complement of ARG2. vector bool char vec_andc (vector bool char, vector bool char); vector signed char vec_andc (vector signed char, vector signed char); vector unsigned char vec_andc (vector unsigned char, vector unsigned char); vector bool int vec_andc (vector bool int, vector bool int); vector signed int vec_andc (vector signed int, vector signed int); vector unsigned int vec_andc (vector unsigned int, vector unsigned int); Phased in. vector bool long long vec_andc (vector bool long long, vector bool long long); Phased in. vector signed long long vec_andc (vector signed long long, vector signed long long); Phased in. vector unsigned long long vec_andc (vector unsigned long long, vector unsigned long long); vector bool short vec_andc (vector bool short, vector bool short); vector signed short vec_andc (vector signed short, vector signed short); vector unsigned short vec_andc (vector unsigned short, vector unsigned short); vector double vec_andc (vector double, vector double); vector float vec_andc (vector float, vector float); VEC_AVG (ARG1, ARG2) Purpose: Returns a vector containing the average of each set of corresponding elements of the given vectors. Result value: The value of each element of the result is the average of the values of the corresponding elements of ARG1 and ARG2. vector signed char vec_avg (vector signed char, vector signed char); vector unsigned char vec_avg (vector unsigned char, vector unsigned char); vector signed int vec_avg (vector signed int, vector signed int); vector unsigned int vec_avg (vector unsigned int, vector unsigned int); vector signed short vec_avg (vector signed short, vector signed short); vector unsigned short vec_avg (vector unsigned short, vector unsigned short); VEC_BPERM (ARG1, ARG2) Purpose: Gathers up to 16 1-bit values from a quadword or from each doubleword element in the specified order, zeroing other bits. Result value: When the type of ARG1 is vector unsigned char or vector unsigned __int128: For each i (0 ≤ i < 16), let bit index j denote the byte value of the i-th element of ARG2. If bit index j is greater than or equal to 128, bit i of doubleword 0 is set to 0. If bit index j is smaller than 128, bit i of the result is set to the value of the j-th bit of input ARG1. All other bits are zeroed. When the type of ARG1 is vector unsigned long long: For each doubleword element i (0 ≤ i < 2) of ARG1, regardless of the input operand type specified for ARG1: For each j (0 ≤ j < 8), let bit index k denote the byte value of the j-th element of ARG2. If bit index k is greater than or equal to 64, bit j of element i is set to 0. If bit index k is less than 64, bit j of element i is set to the value of the k-th bit of element i of input ARG1. All other bits are zeroed. vector unsigned char vec_bperm (vector unsigned char, vector unsigned char); POWER ISA 3.0 Phased in. vector unsigned long long vec_bperm (vector unsigned __int128, vector unsigned char); POWER ISA 3.0 Phased in. vector unsigned long long vec_bperm (vector unsigned long long, vector unsigned char); VEC_CEIL (ARG1) Purpose: Returns a vector containing the smallest representable floating-point integral values greater than or equal to the values of the corresponding elements of the given vector. Result value: Each element of the result contains the smallest representable floating-point integral value greater than or equal to the value of the corresponding element of ARG1. vector double vec_ceil (vector double); vector float vec_ceil (vector float); VEC_CMPB (ARG1, ARG2) Purpose: Performs a bounds comparison of each set of corresponding elements of the given vectors. Result value: Each element of the result has the value 0 if the value of the corresponding element of ARG1 is less than or equal to the value of the corresponding element of ARG2 and greater than or equal to the negative of the value of the corresponding element of ARG2. Otherwise: If an element of ARG2 is greater than or equal to 0, then the value of the corresponding element of the result is 0 if the absolute value of the corresponding element of ARG1 is equal to the value of the corresponding element of ARG2. The value is negative if it is greater than the value of the corresponding element of ARG2. It is positive if it is less than the value of the corresponding element of ARG2. If an element of ARG2 is less than 0, then the value of the element of the result is positive if the value of the corresponding element of ARG1 is less than or equal to the value of the element of ARG2. Otherwise. it is negative. vector signed int vec_cmpb (vector float, vector float); VEC_CMPEQ (ARG1, ARG2) Purpose: Returns a vector containing the results of comparing each set of corresponding elements of the given vectors for equality. Result value: For each element of the result, the value of each bit is 1 if the corresponding elements of ARG1 and ARG2 are equal. Otherwise, the value of each bit is 0. vector bool char vec_cmpeq (vector bool char, vector bool char); vector bool char vec_cmpeq (vector signed char, vector signed char); vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); vector bool int vec_cmpeq (vector bool int, vector bool int); vector bool int vec_cmpeq (vector signed int, vector signed int); vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); vector bool long long vec_cmpeq (vector bool long long, vector bool long long); vector bool long long vec_cmpeq (vector signed long long, vector signed long long); vector bool long long vec_cmpeq (vector unsigned long long, vector unsigned long long); vector bool short vec_cmpeq (vector bool short, vector bool short); vector bool short vec_cmpeq (vector signed short, vector signed short); vector bool short vec_cmpeq (vector unsigned short, vector unsigned short); vector bool int vec_cmpeq (vector float, vector float); vector bool long long vec_cmpeq (vector double, vector double); VEC_CMPGE (ARG1, ARG2) Purpose: Returns a vector containing the results of a greater-than-or-equal-to comparison between each set of corresponding elements of the given vectors. Result value: For each element of the result, the value of each bit is 1 if the value of the corresponding element of ARG1 is greater than or equal to the value of the corresponding element of ARG2. Otherwise, the value of each bit is 0. vector bool char vec_cmpge (vector signed char, vector signed char); vector bool char vec_cmpge (vector unsigned char, vector unsigned char); vector bool int vec_cmpge (vector signed int, vector signed int); vector bool int vec_cmpge (vector unsigned int, vector unsigned int); vector bool long long vec_cmpge (vector signed long long, vector signed long long); vector bool long long vec_cmpge (vector unsigned long long, vector unsigned long long); vector bool short vec_cmpge (vector signed short, vector signed short); vector bool short vec_cmpge (vector unsigned short, vector unsigned short); vector bool int vec_cmpge (vector float, vector float); vector bool long long vec_cmpge (vector double, vector double); VEC_CMPGT (ARG1, ARG2) Purpose: Returns a vector containing the results of a greater-than comparison between each set of corresponding elements of the given vectors. Result value: For each element of the result, the value of each bit is 1 if the value of the corresponding element of ARG1 is greater than the value of the corresponding element of ARG2. Otherwise, the value of each bit is 0. vector bool char vec_cmpgt (vector signed char, vector signed char); vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); vector bool int vec_cmpgt (vector signed int, vector signed int); vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); vector bool long long vec_cmpgt (vector signed long long, vector signed long long); vector bool long long vec_cmpgt (vector unsigned long long, vector unsigned long long); vector bool short vec_cmpgt (vector signed short, vector signed short); vector bool short vec_cmpgt (vector unsigned short, vector unsigned short); vector bool int vec_cmpgt (vector float, vector float); vector bool long long vec_cmpgt (vector double, vector double); VEC_CMPLE (ARG1, ARG2) Purpose: Returns a vector containing the results of a less-than-or-equal-to comparison between each set of corresponding elements of the given vectors. Result value: For each element of the result, the value of each bit is 1 if the value of the corresponding element of ARG1 is less than or equal to the value of the corresponding element of ARG2. Otherwise, the value of each bit is 0. vector bool char vec_cmple (vector signed char, vector signed char); vector bool char vec_cmple (vector unsigned char, vector unsigned char); vector bool int vec_cmple (vector signed int, vector signed int); vector bool int vec_cmple (vector unsigned int, vector unsigned int); vector bool long long vec_cmple (vector signed long long, vector signed long long); vector bool long long vec_cmple (vector unsigned long long, vector unsigned long long); vector bool short vec_cmple (vector signed short, vector signed short); vector bool short vec_cmple (vector unsigned short, vector unsigned short); vector bool int vec_cmple (vector float, vector float); vector bool long long vec_cmple (vector double, vector double); VEC_CMPLT (ARG1, ARG2) Purpose: Returns a vector containing the results of a less-than comparison between each set of corresponding elements of the given vectors. Result value: For each element of the result, the value of each bit is 1 if the value of the corresponding element of ARG1 is less than the value of the corresponding element of ARG2. Otherwise, the value of each bit is 0. vector bool char vec_cmplt (vector signed char, vector signed char); vector bool char vec_cmplt (vector unsigned char, vector unsigned char); vector bool int vec_cmplt (vector signed int, vector signed int); vector bool int vec_cmplt (vector unsigned int, vector unsigned int); vector bool long long vec_cmplt (vector signed long long, vector signed long long); vector bool long long vec_cmplt (vector unsigned long long, vector unsigned long long); vector bool short vec_cmplt (vector signed short, vector signed short); vector bool short vec_cmplt (vector unsigned short, vector unsigned short); vector bool int vec_cmplt (vector float, vector float); vector bool long long vec_cmplt (vector double, vector double); VEC_CMPNE (ARG1, ARG2) Purpose: Returns a vector containing the results of comparing each set of corresponding elements of the given vectors for inequality. Result value: For each element of the result, the value of each bit is 1 if the corresponding elements of ARG1 and ARG2 are not equal. Otherwise, the value of each bit is 0. vector bool char vec_cmpne (vector bool char, vector bool char); vector bool char vec_cmpne (vector signed char, vector signed char); vector bool char vec_cmpne (vector unsigned char, vector unsigned char); vector bool int vec_cmpne (vector bool int, vector bool int); vector bool int vec_cmpne (vector signed int, vector signed int); vector bool int vec_cmpne (vector unsigned int, vector unsigned int); vector bool long long vec_cmpne (vector bool long long, vector bool long long); vector bool long long vec_cmpne (vector signed long long, vector signed long long); vector bool long long vec_cmpne (vector unsigned long long, vector unsigned long long); vector bool short vec_cmpne (vector bool short, vector bool short); vector bool short vec_cmpne (vector signed short, vector signed short); vector bool short vec_cmpne (vector unsigned short, vector unsigned short); vector bool long long vec_cmpne (vector double, vector double); vector bool int vec_cmpne (vector float, vector float); VEC_CMPNEZ (ARG1, ARG2) POWER ISA 3.0 Purpose: Returns a vector containing the results of comparing each set of corresponding elements of the given vectors for inequality or for an element with a 0 value. Result value: For each element of the result, the value of each bit is 1 if the corresponding elements of ARG1 and ARG2 are not equal, or if the ARG1 element or the ARG2 element is 0. Otherwise, the value of each bit is 0. POWER ISA 3.0 vector bool char vec_cmpnez (vector signed char, vector signed char); POWER ISA 3.0 vector bool char vec_cmpnez (vector unsigned char, vector unsigned char); POWER ISA 3.0 vector bool int vec_cmpnez (vector signed int, vector signed int); POWER ISA 3.0 vector bool int vec_cmpnez (vector unsigned int, vector unsigned int); POWER ISA 3.0 vector bool short vec_cmpnez (vector signed short, vector signed short); POWER ISA 3.0 vector bool short vec_cmpnez (vector unsigned short, vector unsigned short); VEC_CNTLZ (ARG1) Purpose: Returns a vector containing the number of most-significant bits equal to 0 of each corresponding element of the given vector. Result value: The value of each element of the result is set to the number of leading zeros of the corresponding element of ARG1. Phased in. vector signed char vec_cntlz (vector signed char); Phased in. vector unsigned char vec_cntlz (vector unsigned char); Phased in. vector signed int vec_cntlz (vector signed int); Phased in. vector unsigned int vec_cntlz (vector unsigned int); Phased in. vector signed long long vec_cntlz (vector signed long long); Phased in. vector unsigned long long vec_cntlz (vector unsigned long long); Phased in. vector signed short vec_cntlz (vector signed short); Phased in. vector unsigned short vec_cntlz (vector unsigned short); VEC_CNTLZ_LSBB (ARG1) POWER ISA 3.0 Purpose: Returns the number of leading byte elements (starting at the lowest-numbered element) of a vector that have a least-significant bit of 0. Result value: The number of leading byte elements (starting at the lowest-numbered element) of a vector that have a least-significant bit of 0. POWER ISA 3.0 signed int vec_cntlz_lsbb (vector signed char); POWER ISA 3.0 signed int vec_cntlz_lsbb (vector unsigned char); VEC_CNTTZ (ARG1) POWER ISA 3.0 Purpose: Returns a vector containing the number of least-significant bits equal to 0 of each corresponding element of the given vector. Result value: The value of each element of the result is set to the number of trailing zeros of the corresponding element of ARG1. POWER ISA 3.0 vector signed char vec_cnttz (vector signed char); POWER ISA 3.0 vector unsigned char vec_cnttz (vector unsigned char); POWER ISA 3.0 vector signed int vec_cnttz (vector signed int); POWER ISA 3.0 vector unsigned int vec_cnttz (vector unsigned int); POWER ISA 3.0 vector signed long long vec_cnttz (vector signed long long); POWER ISA 3.0 vector unsigned long long vec_cnttz (vector unsigned long long); POWER ISA 3.0 vector signed short vec_cnttz (vector signed short); POWER ISA 3.0 vector unsigned short vec_cnttz (vector unsigned short); VEC_CNTTZ_LSBB (ARG1) POWER ISA 3.0 Purpose: Returns the number of trailing byte elements (starting at the highest-numbered element) of a vector that have a least-significant bit of 0. Result value: The number of trailing byte elements (starting at the highest-numbered element) of a vector that have a least-significant bit of 0. POWER ISA 3.0 signed int vec_cnttz_lsbb (vector signed char); POWER ISA 3.0 signed int vec_cnttz_lsbb (vector unsigned char); VEC_CPSGN(ARG1, ARG2) Purpose: Returns a vector by copying the sign of the elements in vector ARG1 to the sign of the corresponding elements in vector ARG2. Result value: For each element of the result, copies the sign of the corresponding element in vector ARG1 to the sign of the corresponding element in vector ARG2. Phased in. vector float vec_cpsgn (vector float, vector float); Phased in. vector double vec_cpsgn (vector double, vector double); VEC_CTF (ARG1, ARG2) Purpose: Converts an integer vector into a floating-point vector. Result value: The value of each element of the result is the closest floating-point approximationestimate of the value of the corresponding element of ARG1 divided by 2 to the power of ARG2, which should be in the range 0–31. vector float vec_ctf (vector signed int, const int); vector float vec_ctf (vector unsigned int, const int); VEC_CTS (ARG1, ARG2) Purpose: Converts a real vector into a vector signed int. Result value: The value of each element of the result is the saturated signed-integer value, truncated towards zero, obtained by multiplying the corresponding element of ARG1 by 2 to the power of ARG2, which should be in the range 0–31. vector signed int vec_cts (vector float, const int); VEC_CTU (ARG1, ARG2) Purpose: Converts a real vector into a vector unsigned int. Result value: The value of each element of the result is the saturated unsigned-integer value, truncated towards zero, obtained by multiplying the corresponding element of ARG1 by 2 to the power of ARG2, which should be in the range 0–31. vector unsigned int vec_ctu (vector float, const int); VEC_DIV (ARG1, ARG2) Purpose: Divides the elements in ARG1 by the corresponding elements in ARG2 and then assigns the result to corresponding elements in the result vector. This function emulates the operation on integer vectors. Result value: The value of each element of the result is obtained by dividing the corresponding element of ARG1 by the corresponding element of ARG2. vector signed long long vec_div (vector signed long long, vector signed long long); vector unsigned long long vec_div (vector unsigned long long, vector unsigned long long); vector double vec_div (vector double, vector double); vector float vec_div (vector float, vector float); VEC_DOUBLE (ARG1) Purpose: Converts a vector of long integers into a vector of double-precision numbers. Result value: Target elements are computed by converting the respective input elements. vector double vec_double (vector signed long long); vector double vec_double (vector unsigned long long); VEC_DOUBLEE (ARG1) Purpose: Converts an input vector to a vector of double-precision numbers. Result value: Target elements 0 and 1 are set to the converted values of source elements 0 and 2. vector double vec_doublee (vector signed int); vector double vec_doublee (vector unsigned int); vector double vec_doublee (vector float); VEC_DOUBLEH (ARG1) Purpose: Converts an input vectora vector of integers to a vector of double-precision floating-point numbers. Result value: Target elements 0 and 1 are set to the converted values of source elements 0 and 1. vector double vec_doubleh (vector signed int); vector double vec_doubleh (vector unsigned int); vector double vec_doubleh (vector float); VEC_DOUBLEL (ARG1) Purpose: Converts an input vectora vector of integers to a vector of double-precision floating-point numbers. Result value: Target elements 0 and 1 are set to the converted values of source elements 2 and 3. vector double vec_doublel (vector signed int); vector double vec_doublel (vector unsigned int); vector double vec_doublel (vector float); VEC_DOUBLEO (ARG1) Purpose: Converts an input vector to a vector of double-precision numbers. Result value: Target elements 0 and 1 are set to the converted values of source elements 1 and 3. vector double vec_doubleo (vector signed int); vector double vec_doubleo (vector unsigned int); vector double vec_doubleo (vector float); VEC_EQV (ARG1, ARG2) Purpose: Performs a bitwise XNOR of the given vectors. Result value: The result is the bitwise XNOR of ARG1 and ARG2. vector bool char vec_eqv (vector bool char, vector bool char); vector signed char vec_eqv (vector signed char, vector signed char); vector unsigned char vec_eqv (vector unsigned char, vector unsigned char); vector bool int vec_eqv (vector bool int, vector bool int); vector signed int vec_eqv (vector signed int, vector signed int); vector unsigned int vec_eqv (vector unsigned int, vector unsigned int); vector bool long long vec_eqv (vector bool long long, vector bool long long); vector signed long long vec_eqv (vector signed long long, vector signed long long); vector unsigned long long vec_eqv (vector unsigned long long, vector unsigned long long); vector bool short vec_eqv (vector bool short, vector bool short); vector signed short vec_eqv (vector signed short, vector signed short); vector unsigned short vec_eqv (vector unsigned short, vector unsigned short); vector double vec_eqv (vector double, vector double); vector float vec_eqv (vector float, vector float); VEC_EXPTE (ARG1) Purpose: Returns a vector containing estimates of 2 raised to the power of the corresponding elements of the given vector. Result value: Each element of the result contains the estimated value of 2 raised to the power of the corresponding element of ARG1. vector float vec_expte (vector float); VEC_EXTRACT (ARG1, ARG2) Purpose: Returns the value of the ARG1 element indicated by the ARG2 parameter. Result value: This function uses modular arithmetic on ARG2 to determine the element number. For example, if ARG2 is out of range, the compiler uses ARG2 modulo the number of elements in the vector to determine the element position. signed char vec_extract (vector signed char, signed int); unsigned char vec_extract (vector bool char, signed int); unsigned char vec_extract (vector unsigned char, signed int); signed int vec_extract (vector signed int, signed int); unsigned int vec_extract (vector bool int, signed int); unsigned int vec_extract (vector unsigned int, signed int); signed long long vec_extract (vector signed long long, signed int); unsigned long long vec_extract (vector bool long long, signed int); unsigned long long vec_extract (vector unsigned long long, signed int); signed short vec_extract (vector signed short, signed int); unsigned short vec_extract (vector bool short, signed int); unsigned short vec_extract (vector unsigned short, signed int); double vec_extract (vector double, signed int); float vec_extract (vector float, signed int); POWER ISA 3.0 Phased in. _Float16 vec_extract (vector _Float16, signed int); VEC_EXTRACT_EXP (ARG1) POWER ISA 3.0 Purpose: Extracts an exponent from a floating-point number. Result value: Each element of the returned integer vector is extracted from the exponent field of the corresponding floating-point vector element. The extracted exponent of ARG1 is returned as a right-justified unsigned integer containing a biased exponent, in accordance with the exponent representation specified by IEEE 754, without further processing. POWER ISA 3.0 vector unsigned long long vec_extract_exp (vector double); POWER ISA 3.0 vector unsigned int vec_extract_exp (vector float); VEC_EXTRACT_FP32_ FROM_SHORTH (ARG1) POWER ISA 3.0 Purpose: Extracts four single-precision floating-point numbers from the high elements of a vector of eight 16-bit elements, interpreting each element as a 16-bit floating-point number in IEEE format. Result value: The first four elements are interpreted as 16-bit floating-point numbers in IEEE format, and extended to single-precision format, returning a vector with four single-precision IEEE numbers. POWER ISA 3.0 vector float vec_extract_fp32_from_shorth (vector unsigned short); VEC_EXTRACT_FP32_ FROM_SHORTL (ARG1) POWER ISA 3.0 Purpose Extracts four single-precision floating-point numbers from the low elements of a vector of eight 16-bit elements, interpreting each element as a 16-bit floating-point number in IEEE format. Result value: The last four elements are interpreted as 16-bit floating-point numbers in IEEE format, and extended to single-precision format, returning a vector with four single-precision IEEE numbers. POWER ISA 3.0 vector float vec_extract_fp32_from_shortl (vector unsigned short); VEC_EXTRACT_SIG (ARG1) POWER ISA 3.0 Purpose: Extracts a significand (mantissa) from a floating-point number. Result value: Each element of the returned integer vector is extracted from the significand (mantissa) field of the corresponding floating-point vector element. The significand is from the corresponding floating-point number in accordance with the IEEE format. The returned result includes the implicit leading digit. The value of that digit is not encoded in the IEEE format, but is implied by the exponent. POWER ISA 3.0 vector unsigned long long vec_extract_sig (vector double); POWER ISA 3.0 vector unsigned int vec_extract_sig (vector float); VEC_EXTRACT4B (ARG1, ARG2) POWER ISA 3.0 Purpose: Extracts a word from a vector at a byte position. Result value: The first doubleword element of the result contains the zero-extended extracted word from ARG1. The second doubleword is set to 0. ARG2 specifies the least-significant byte number (0–12) of the word to be extracted. POWER ISA 3.0 vector unsigned long long vec_extract4b (vector unsigned char, const int); VEC_FIRST_MATCH_INDEX (ARG1, ARG2) POWER ISA 3.0 Purpose: Performs a comparison of equality on each of the corresponding elements of ARG1 and ARG2, and returns the first position of equality. Result value: Returns the element index of the position of the first character match. If no match, returns the number of characters as an element count in the vector argument. POWER ISA 3.0 unsigned int vec_first_match_index (vector signed char, vector signed char); POWER ISA 3.0 unsigned int vec_first_match_index (vector unsigned char, vector unsigned char); POWER ISA 3.0 unsigned int vec_first_match_index (vector signed int, vector signed int); POWER ISA 3.0 unsigned int vec_first_match_index (vector unsigned int, vector unsigned int); POWER ISA 3.0 unsigned int vec_first_match_index (vector signed short, vector signed short); POWER ISA 3.0 unsigned int vec_first_match_index (vector unsigned short, vector unsigned short); VEC_FIRST_MATCH_OR_EOS_ INDEX (ARG1, ARG2) POWER ISA 3.0 Purpose: Performs a comparison of equality on each of the corresponding elements of ARG1 and ARG2. Returns the first position of equality, or the zero string terminator. Result value: Returns the element index of the position of either the first character match or an end-of-string (EOS) terminator. If no match or terminator, returns the number of characters as an element count in the vector argument. POWER ISA 3.0 unsigned int vec_first_match_or_eos_index (vector signed char, vector signed char); POWER ISA 3.0 unsigned int vec_first_match_or_eos_index (vector unsigned char, vector unsigned char); POWER ISA 3.0 unsigned int vec_first_match_or_eos_index (vector signed int, vector signed int); POWER ISA 3.0 unsigned int vec_first_match_or_eos_index (vector unsigned int, vector unsigned int); POWER ISA 3.0 unsigned int vec_first_match_or_eos_index (vector signed short, vector signed short); POWER ISA 3.0 unsigned int vec_first_match_or_eos_index (vector unsigned short, vector unsigned short); VEC_FIRST_MISMATCH_INDEX(ARG1, ARG2) POWER ISA 3.0 Purpose: Performs a comparison of inequality on each of the corresponding elements of ARG1 and ARG2, and returns the first position of inequality. Result value: Returns the element index of the position of the first character mismatch. If no mismatch, returns the number of characters as an element count in the vector argument. POWER ISA 3.0 unsigned int vec_first_mismatch_index (vector signed char, vector signed char); POWER ISA 3.0 unsigned int vec_first_mismatch_index (vector unsigned char, vector unsigned char); POWER ISA 3.0 unsigned int vec_first_mismatch_index (vector signed int, vector signed int); POWER ISA 3.0 unsigned int vec_first_mismatch_index (vector unsigned int, vector unsigned int); POWER ISA 3.0 unsigned int vec_first_mismatch_index (vector signed short, vector signed short); POWER ISA 3.0 unsigned int vec_first_mismatch_index (vector unsigned short, vector unsigned short); VEC_FIRST_MISMATCH_OR_ EOS_INDEX (ARG1, ARG2) POWER ISA 3.0 Purpose: Performs a comparison of inequality on each of the corresponding elements of ARG1 and ARG2. Returns the first position of inequality, or the zero string terminator. Result value: Returns the element index of the position of either the first character mismatch or an end-of-string (EOS) terminator. If no mismatch or terminator, returns the number of characters as an element count in the vector argument. POWER ISA 3.0 unsigned int vec_first_mismatch_or_eos_index (vector signed char, vector signed char); POWER ISA 3.0 unsigned int vec_first_mismatch_or_eos_index (vector unsigned char, vector unsigned char); POWER ISA 3.0 unsigned int vec_first_mismatch_or_eos_index (vector signed int, vector signed int); POWER ISA 3.0 unsigned int vec_first_mismatch_or_eos_index (vector unsigned int, vector unsigned int); POWER ISA 3.0 unsigned int vec_first_mismatch_or_eos_index (vector signed short, vector signed short); POWER ISA 3.0 unsigned int vec_first_mismatch_or_eos_index (vector unsigned short, vector unsigned short); VEC_FLOAT (ARG1) Purpose: Converts a vector of integers to a vector of single-precision floating-point numbers. Result value: Target elements are obtained by converting the respective source elements to unsigned integers. vector float vec_float (vector signed int); vector float vec_float (vector unsigned int); VEC_FLOAT2 (ARG1, ARG2) Purpose: Converts an input vectora vector of integers to a vector of single-precision numbers floating-point numbers. Result value: Target elements are obtained by converting the source elements to single-precision numbers as follows: Target elements 0 and 1 from source 0 Target elements 2 and 3 from source 1 vector float vec_float2 (vector signed long long, vector signed long long); vector float vec_float2 (vector unsigned long long, vector unsigned long long); vector float vec_float2 (vector double, vector double); VEC_FLOATE (ARG2) Purpose: Converts an input vector to a vector of single-precision numbers. Result value: The even-numbered target elements are obtained by converting the source elements to single-precision numbers, using the current floating-point rounding mode. vector float vec_floate (vector signed long long); vector float vec_floate (vector unsigned long long); vector float vec_floate (vector double); VEC_FLOATH (ARG2) POWER ISA 3.0 Phased in. Purpose: Converts a vector to a vector of single-precision floating-point numbers. Result value: Target elements 0 through 3 are set to the converted values of source elements 0 through 3, respectively. POWER ISA 3.0 vector float vec_floath (vector _Float16); VEC_FLOATL (ARG2) POWER ISA 3.0 Phased in. Purpose: Converts a vector to a vector of single-precision floating-point numbers. Result value: Target elements 0 through 3 are set to the converted values of source elements 4 through 7, respectively. POWER ISA 3.0 vector float vec_floatl (vector _Float16); VEC_FLOATO (ARG2) Purpose: Converts an input vector to a vector of single-precision numbers. Result value: The odd-numbered target elements are obtained by converting the source elements to single-precision numbers, using the current floating-point rounding mode. vector float vec_floato (vector signed long long); vector float vec_floato (vector unsigned long long); vector float vec_floato (vector double); VEC_FLOOR (ARG1) Purpose: Returns a vector containing the largest representable floating-point integral values less than or equal to the values of the corresponding elements of the given vector. Result value: Each element of the result contains the largest representable floating-point integral value less than or equal to the value of the corresponding element of ARG1. vector double vec_floor (vector double); vector float vec_floor (vector float); VEC_GB (ARG1) Purpose: Performs a gather-bits operation on the input. Result value: Within each doubleword, let x(i) (0 ≤ i < 8) denote the byte elements of the corresponding input doubleword element, with x(7) the most-significant byte. For each pair of i and j (0 ≤ i < 8, 0 ≤ j < 8), the j-th bit of the i-th byte element of the result is set to the value of the i-th bit of the j-th byte element of the input. vector unsigned char vec_gb (vector unsigned char); VEC_INSERT (ARG1, ARG2, ARG3) Purpose: Returns a copy of vector ARG2 with element ARG3 replaced by the value of ARG1. Result value: A copy of vector ARG2 with element ARG3 replaced by the value of ARG1. This function uses modular arithmetic on ARG3 to determine the element number. For example, if ARG3 is out of range, the compiler uses ARG3 modulo the number of elements in the vector to determine the element position. vector signed char vec_insert (signed char, vector signed char, signed int); vector unsigned char vec_insert (unsigned char, vector unsigned char, signed int); vector signed int vec_insert (signed int, vector signed int, signed int); vector unsigned int vec_insert (unsigned int, vector unsigned int, signed int); vector signed long long vec_insert (signed long long, vector signed long long, signed int); vector unsigned long long vec_insert (unsigned long long, vector unsigned long long, signed int); vector signed short vec_insert (signed short, vector signed short,. signed int); vector unsigned short vec_insert (unsigned short, vector unsigned short, signed int); vector double vec_insert (double, vector double, signed int); vector float vec_insert (float, vector float, signed int); POWER ISA 3.0 Phased in. vector _Float16 vec_insert (_Float16, vector _Float16, signed int); VEC_INSERT_EXP (ARG1, ARG2) POWER ISA 3.0 Purpose: Inserts an exponent into a floating-point number. Result value: Each element of the returned floating-point vector is generated by combining the exponent specified by the corresponding element of ARG2 with the sign and significand of the corresponding element of ARG1. The inserted exponent of ARG2 is treated as a right-justified unsigned integer containing a biased exponent, in accordance with the exponent representation specified by IEEE 754. It is combined with the sign and significand of ARG1 without further processing. POWER ISA 3.0 vector double vec_insert_exp (vector double, vector unsigned long long); POWER ISA 3.0 vector double vec_insert_exp (vector unsigned long long, vector unsigned long long); POWER ISA 3.0 vector float vec_insert_exp (vector float, vector unsigned int); POWER ISA 3.0 vector float vec_insert_exp (vector unsigned int, vector unsigned int); VEC_INSERT4B (ARG1, ARG2, ARG3) POWER ISA 3.0 Purpose: Inserts a word into a vector at a byte position. Result value: Let W be the first doubleword element of ARG1, truncated to 32 bits. The result vector is formed by inserting W into ARG2 at the byte position (0–12) specified by ARG3. POWER ISA 3.0 vector unsigned char vec_insert4b (vector signed int, vector unsigned char, const int); POWER ISA 3.0 vector unsigned char vec_insert4b (vector unsigned int, vector unsigned char, const int); VEC_LOGE (ARG1) Purpose: Returns a vector containing estimates of the base-2 logarithms of the corresponding elements of the given vector. Result value: Each element of the result contains the estimated value of the base-2 logarithm of the corresponding element of ARG1. vector float vec_loge (vector float); VEC_MADD (ARG1, ARG2, ARG3) Purpose: Returns a vector containing the results of performing a fused multiply-add operation for each corresponding set of elements of the given vectors. Result value: The value of each element of the result is the product of the values of the corresponding elements of ARG1 and ARG2, added to the value of the corresponding element of ARG3. vector signed short vec_madd (vector signed short, vector signed short, vector signed short); vector signed short vec_madd (vector signed short, vector unsigned short, vector unsigned short); vector signed short vec_madd (vector unsigned short, vector signed short, vector signed short); vector unsigned short vec_madd (vector unsigned short, vector unsigned short, vector unsigned short); vector double vec_madd (vector double, vector double, vector double); vector float vec_madd (vector float, vector float, vector float); VEC_MADDS (ARG1, ARG2, ARG3) Purpose: Returns a vector containing the results of performing a saturated multiply-high-and-add operation for each corresponding set of elements of the given vectors. Result value: For each element of the result, the value is produced in the following way: The values of the corresponding elements of ARG1 and ARG2 are multiplied. The value of the 17 most-significant bits of this product is then added, using 16-bit-saturated addition, to the value of the corresponding element of ARG3. vector signed short vec_madds (vector signed short, vector signed short, vector signed short); VEC_MAX (ARG1, ARG2) Purpose Returns a vector containing the maximum value from each set of corresponding elements of the given vectors. Result value The value of each element of the result is the maximum of the values of the corresponding elements of ARG1 and ARG2. vector signed char vec_max (vector signed char, vector signed char); vector unsigned char vec_max (vector unsigned char, vector unsigned char); vector signed int vec_max (vector signed int, vector signed int); vector unsigned int vec_max (vector unsigned int, vector unsigned int); vector signed long long vec_max (vector signed long long, vector signed long long); vector unsigned long long vec_max (vector unsigned long long, vector unsigned long long); vector signed short vec_max (vector signed short, vector signed short); vector unsigned short vec_max (vector unsigned short, vector unsigned short); vector double vec_max (vector double, vector double); vector float vec_max (vector float, vector float); VEC_MERGEE (ARG1, ARG2) Purpose: Merges the even-numbered values from the two vectors. Result value: The even-numbered elements of ARG1 are stored into the even-numbered elements of the result. The even-numbered elements of ARG2 are stored in the odd-numbered elements of the result. Phased in. vector bool int vec_mergee (vector bool int, vector bool int); Phased in. vector signed int vec_mergee (vector signed int, vector signed int); Phased in. vector unsigned int vec_mergee (vector unsigned int, vector unsigned int); Phased in. vector bool long long vec_mergee (vector bool long long, vector bool long long); Phased in. vector signed long long vec_mergee (vector signed long long, vector signed long long); Phased in. vector unsigned long long vec_mergee (vector unsigned long long, vector unsigned long long); Phased in. vector float vec_mergee (vector float, vector float); Phased in. vector double vec_mergee (vector double, vector double); VEC_MERGEH (ARG1, ARG2) Purpose: Merges the most-significant halves of two vectors. Result value: Assume that the elements of each vector are numbered beginning with 0. The even-numbered elements of the result are taken, in order, from the elements in the most-significant 8 bytes of ARG1. The odd-numbered elements of the result are taken, in order, from the elements in the most-significant 8 bytes of ARG2. vector bool char vec_mergeh (vector bool char, vector bool char); vector signed char vec_mergeh (vector signed char, vector signed char); vector unsigned char vec_mergeh (vector unsigned char, vector unsigned char); vector bool int vec_mergeh (vector bool int, vector bool int); vector signed int vec_mergeh (vector signed int, vector signed int); vector unsigned int vec_mergeh (vector unsigned int, vector unsigned int); vector bool long long vec_mergeh (vector bool long long, vector bool long long); vector signed long long vec_mergeh (vector signed long long, vector signed long long); Phased in. vector unsigned long long vec_mergeh (vector unsigned long long, vector unsigned long long); vector pixel vec_mergeh (vector pixel, vector pixel); vector bool short vec_mergeh (vector bool short, vector bool short); vector signed short vec_mergeh (vector signed short, vector signed short); vector unsigned short vec_mergeh (vector unsigned short, vector unsigned short); vector double vec_mergeh (vector double, vector double); vector float vec_mergeh (vector float, vector float); POWER ISA 3.0 Phased in. vector _Float16 vec_mergeh (vector _Float16, vector _Float16); VEC_MERGEL (ARG1, ARG2) Purpose: Merges the least-significant halves of two vectors. Result value: Assume that the elements of each vector are numbered beginning with 0. The even-numbered elements of the result are taken, in order, from the elements in the least-significant 8 bytes of ARG1. The odd-numbered elements of the result are taken, in order, from the elements in the least-significant 8 bytes of ARG2. vector bool char vec_mergel (vector bool char, vector bool char); vector signed char vec_mergel (vector signed char, vector signed char); vector unsigned char vec_mergel (vector unsigned char, vector unsigned char); vector bool int vec_mergel (vector bool int, vector bool int); vector signed int vec_mergel (vector signed int, vector signed int); vector unsigned int vec_mergel (vector unsigned int, vector unsigned int); Phased in. vector bool long long vec_mergel (vector bool long long, vector bool long long); vector signed long long vec_mergel (vector signed long long, vector signed long long); Phased in. vector unsigned long long vec_mergel (vector unsigned long long, vector unsigned long long); vector pixel vec_mergel (vector pixel, vector pixel); vector bool short vec_mergel (vector bool short, vector bool short); vector signed short vec_mergel (vector signed short, vector signed short); vector unsigned short vec_mergel (vector unsigned short, vector unsigned short); vector double vec_mergel (vector double, vector double); vector float vec_mergel (vector float, vector float); POWER ISA 3.0 Phased in. vector _Float16 vec_mergel (vector _Float16, vector _Float16); VEC_MERGEO (ARG1, ARG2) Purpose: Merges the odd-numbered halves of two vectors. Result value: The odd-numbered elements of ARG1 are stored in the even-numbered elements of the result. The odd-numbered elements of ARG2 are stored in the odd-numbered elements of the result. Phased in. vector bool int vec_mergeo (vector bool int, vector bool int); Phased in. vector signed int vec_mergeo (vector signed int, vector signed int); Phased in. vector unsigned int vec_mergeo (vector unsigned int, vector unsigned int); Phased in. vector bool long long vec_mergeo (vector bool long long, vector bool long long); Phased in. vector signed long long vec_mergeo (vector signed long long, vector signed long long); Phased in. vector unsigned long long vec_mergeo (vector unsigned long long, vector unsigned long long); Phased in. vector double vec_mergeo (vector double, vector double); Phased in. vector float vec_mergeo (vector float, vector float); VEC_MIN (ARG1, ARG2) Purpose: Returns a vector containing the minimum value from each set of corresponding elements of the given vectors. Result value: The value of each element of the result is the minimum of the values of the corresponding elements of ARG1 and ARG2. vector signed char vec_min (vector signed char, vector signed char); vector unsigned char vec_min (vector unsigned char, vector unsigned char); vector signed int vec_min (vector signed int, vector signed int); vector unsigned int vec_min (vector unsigned int, vector unsigned int); vector signed long long vec_min (vector signed long long, vector signed long long); vector unsigned long long vec_min (vector unsigned long long, vector unsigned long long); vector signed short vec_min (vector signed short, vector signed short); vector unsigned short vec_min (vector unsigned short, vector unsigned short); vector double vec_min (vector double, vector double); vector float vec_min (vector float, vector float); VEC_MRADDS (ARG1, ARG2, ARG3) Purpose: Returns a vector containing the results of performing a saturated multiply-high-round-and-add operation for each corresponding set of elements of the given vectors. Result value: For each element of the result, the value is produced in the following way: The values of the corresponding elements of ARG1 and ARG2 are multiplied and rounded such that the 15 least-significant bits are 0. The value of the 17 most-significant bits of this rounded product is then added, using 16-bit-saturated addition, to the value of the corresponding element of ARG3. vector signed short vec_mradds (vector signed short, vector signed short, vector signed short); VEC_MSUB (ARG1, ARG2, ARG3) Purpose: Returns a vector containing the results of performing a multiply-subtract operation using the given vectors. Result value: This function multiplies each element in ARG1 by the corresponding element in ARG2 and then subtracts the corresponding element in ARG3 from the result. vector double vec_msub (vector double, vector double, vector double); vector float vec_msub (vector float, vector float, vector float); VEC_MSUM (ARG1, ARG2, ARG3) Purpose: Returns a vector containing the results of performing a multiply-sum operation using the given vectors. Result value: Assume that the elements of each vector are numbered beginning with 0. If ARG1 is a vector signed char or a vector unsigned char vector, then let m be 4. Otherwise, let m be 2. For each element n of the result vector, the value is obtained in the following way: For p = mn to mn + m – 1, multiply element p of ARG1 by element p of ARG2. Add the sum of these products to element n of ARG3. All additions are performed using 32-bit modular arithmetic. vector signed int vec_msum (vector signed char, vector unsigned char, vector signed int); vector signed int vec_msum (vector signed short, vector signed short, vector signed int); vector unsigned int vec_msum (vector unsigned char, vector unsigned char, vector unsigned int); vector unsigned int vec_msum (vector unsigned short, vector unsigned short, vector unsigned int); VEC_MSUMS (ARG1, ARG2, ARG3) Purpose: Returns a vector containing the results of performing a saturated multiply-sum operation using the given vectors. Result value: Assume that the elements of each vector are numbered beginning with 0. For each element n of the result vector, the value is obtained in the following way: For p = 2n to 2n+1, multiply element p of ARG1 by element p of ARG2. Add the sum of these products to element n of ARG3. All additions are performed using 32-bit saturated arithmetic. vector signed int vec_msums (vector signed short, vector signed short, vector signed int); vector unsigned int vec_msums (vector unsigned short, vector unsigned short, vector unsigned int); VEC_MUL (ARG1, ARG2) Purpose: Returns a vector containing the results of performing a multiply operation using the given vectors. This function emulates the operation on integer vectors. Result value: This function multiplies corresponding elements in the given vectors and then assigns the result to corresponding elements in the result vector. vector signed char vec_mul (vector signed char, vector signed char); vector unsigned char vec_mul (vector unsigned char, vector unsigned char); vector signed int vec_mul (vector signed int, vector signed int); vector unsigned int vec_mul (vector unsigned int, vector unsigned int); Phased in. vector signed long long vec_mul (vector signed long long, vector signed long long); Phased in. vector unsigned long long vec_mul (vector unsigned long long, vector unsigned long long); vector signed short vec_mul (vector signed short, vector signed short); vector unsigned short vec_mul (vector unsigned short, vector unsigned short); vector double vec_mul (vector double, vector double); vector float vec_mul (vector float, vector float); VEC_MULE (ARG1, ARG2) Purpose: Returns a vector containing the results of multiplying every second set of the corresponding elements of the given vectors, beginning with the first element. Result value: Assume that the elements of each vector are numbered beginning with 0. For each element n of the result vector, the value is the product of the value of element 2n of ARG1 and the value of element 2n of ARG2. vector signed int vec_mule (vector signed short, vector signed short); vector unsigned int vec_mule (vector unsigned short, vector unsigned short); vector signed long long vec_mule (vector signed int, vector signed int); vector unsigned long long vec_mule (vector unsigned int, vector unsigned int); vector signed short vec_mule (vector signed char, vector signed char); vector unsigned short vec_mule (vector unsigned char, vector unsigned char); VEC_MULO (ARG1, ARG2) Purpose: Returns a vector containing the results of multiplying every second set of corresponding elements of the given vectors, beginning with the second element. Result value: Assume that the elements of each vector are numbered beginning with 0. For each element n of the result vector, the value is the product of the value of element 2n+1 of ARG1 and the value of element 2n+1 of ARG2. vector signed int vec_mulo (vector signed short, vector signed short); vector unsigned int vec_mulo (vector unsigned short, vector unsigned short); vector signed long long vec_mulo (vector signed int, vector signed int); vector unsigned long long vec_mulo (vector unsigned int, vector unsigned int); vector signed short vec_mulo (vector signed char, vector signed char); vector unsigned short vec_mulo (vector unsigned char, vector unsigned char); VEC_NABS (ARG1) Purpose: Returns a vector containing the negated absolute values of the contents of the given vector. Result value: The value of each element of the result is the negated absolute value of the corresponding element of ARG1. For integer vectors, the arithmetic is modular. vector signed char vec_nabs (vector signed char); vector signed int vec_nabs (vector signed int); vector signed long long vec_nabs (vector signed long long); vector signed short vec_nabs (vector signed short); vector double vec_nabs (vector double); vector float vec_nabs (vector float); VEC_NAND (ARG1, ARG2) Purpose: Performs a bitwise NAND of the given vectors. Result value: The result is the bitwise NAND of ARG1 and ARG2. vector bool char vec_nand (vector bool char, vector bool char); vector signed char vec_nand (vector signed char, vector signed char); vector unsigned char vec_nand (vector unsigned char, vector unsigned char); vector bool int vec_nand (vector bool int, vector bool int); vector signed int vec_nand (vector signed int, vector signed int); vector unsigned int vec_nand (vector unsigned int, vector unsigned int); vector bool long long vec_nand (vector bool long long, vector bool long long); vector signed long long vec_nand (vector signed long long, vector signed long long); vector unsigned long long vec_nand (vector unsigned long long, vector unsigned long long); vector bool short vec_nand (vector bool short, vector bool short); vector signed short vec_nand (vector signed short, vector signed short); vector unsigned short vec_nand (vector unsigned short, vector unsigned short); vector double vec_nand (vector double, vector double); vector float vec_nand (vector float, vector float); VEC_NEARBYINT (ARG1) Purpose: Returns a vector containing the floating-point integral values nearest to the values of the corresponding elements of the given vector. Result value: Each element of the result contains the nearest representable floating-point integral value to the value of the corresponding element of ARG1. When an input element value is exactly between two integer values, the result value with the largest absolute value is selected. vector double vec_nearbyint (vector double); vector float vec_nearbyint (vector float); VEC_NEG (ARG1) Purpose: Returns a vector containing the negated values of the contents of the given vector. Result value: The value of each element of the result is the negated value of the corresponding element of ARG1. For integer vectors, the arithmetic is modular. vector signed char vec_neg (vector signed char); vector signed int vec_neg (vector signed int); vector signed long long vec_neg (vector signed long long); vector signed short vec_neg (vector signed short); vector double vec_neg (vector double); vector float vec_neg (vector float); VEC_NMADD (ARG1, ARG2, ARG3) Purpose: Returns a vector containing the results of performing a negative multiply-add operation on the given vectors. Result value: The value of each element of the result is the product of the corresponding elements of ARG1 and ARG2, added to the corresponding elements of ARG3, then multiplied by –1.0. vector double vec_nmadd (vector double, vector double, vector double); vector float vec_nmadd (vector float, vector float, vector float); VEC_NMSUB (ARG1, ARG2, ARG3) Purpose: Returns a vector containing the results of performing a negative multiply-subtract operation on the given vectors. Result value: The value of each element of the result is the product of the corresponding elements of ARG1 and ARG2, subtracted from the corresponding element of ARG3, and then multiplied by –1.0. vector double vec_nmsub (vector double, vector double, vector double); vector float vec_nmsub (vector float, vector float, vector float); VEC_NOR (ARG1, ARG2) Purpose: Performs a bitwise NOR of the given vectors. Result value: The result is the bitwise NOR of ARG1 and ARG2. vector bool char vec_nor (vector bool char, vector bool char); vector signed char vec_nor (vector signed char, vector signed char); vector unsigned char vec_nor (vector unsigned char, vector unsigned char); vector bool int vec_nor (vector bool int, vector bool int); vector signed int vec_nor (vector signed int, vector signed int); vector unsigned int vec_nor (vector unsigned int, vector unsigned int); vector bool long long vec_nor (vector bool long long, vector bool long long); Phased in. vector signed long long vec_nor (vector signed long long, vector signed long long); Phased in. vector unsigned long long vec_nor (vector unsigned long long, vector unsigned long long); vector bool short vec_nor (vector bool short, vector bool short); vector signed short vec_nor (vector signed short, vector signed short); vector unsigned short vec_nor (vector unsigned short, vector unsigned short); vector double vec_nor (vector double, vector double); vector float vec_nor (vector float, vector float); VEC_OR (ARG1, ARG2) Purpose: Performs a bitwise OR of the given vectors. Result value: The result is the bitwise OR of ARG1 and ARG2. vector bool char vec_or (vector bool char, vector bool char); vector signed char vec_or (vector signed char, vector signed char); vector unsigned char vec_or (vector unsigned char, vector unsigned char); vector bool int vec_or (vector bool int, vector bool int); vector signed int vec_or (vector signed int, vector signed int); vector unsigned int vec_or (vector unsigned int, vector unsigned int); vector bool long long vec_or (vector bool long long, vector bool long long); Phased in. vector signed long long vec_or (vector signed long long, vector signed long long); Phased in. vector unsigned long long vec_or (vector unsigned long long, vector unsigned long long); vector bool short vec_or (vector bool short, vector bool short); vector signed short vec_or (vector signed short, vector signed short); vector unsigned short vec_or (vector unsigned short, vector unsigned short); vector double vec_or (vector bool long long, vector double); vector double vec_or (vector double, vector bool long long); vector double vec_or (vector double, vector double); vector float vec_or (vector bool int, vector float); vector float vec_or (vector float, vector bool int); vector float vec_or (vector float, vector float); VEC_ORC (ARG1, ARG2) Purpose: Performs a bitwise OR of the first vector with the negated second vector. Result value: The result is the bitwise OR of ARG1 and the bitwise negation of ARG2. vector bool char vec_orc (vector bool char, vector bool char); vector signed char vec_orc (vector signed char, vector signed char); vector unsigned char vec_orc (vector unsigned char, vector unsigned char); vector bool int vec_orc (vector bool int, vector bool int); vector signed int vec_orc (vector signed int, vector signed int); vector unsigned int vec_orc (vector unsigned int, vector unsigned int); vector bool long long vec_orc (vector bool long long, vector bool long long); vector signed long long vec_orc (vector signed long long, vector signed long long); vector unsigned long long vec_orc (vector unsigned long long, vector unsigned long long); vector bool short vec_orc (vector bool short, vector bool short); vector signed short vec_orc (vector signed short, vector signed short); vector unsigned short vec_orc (vector unsigned short, vector unsigned short); vector double vec_orc (vector double, vector double); vector float vec_orc (vector float, vector float); VEC_PACK (ARG1, ARG2) Purpose: Packs information from each element of two vectors into the result vector. Result value: For integer types, theThe value of each element of the result vector is taken from the low-order half of the corresponding element of the result of concatenating ARG1 and ARG2. For floating-point types, the value of each element of the result vector is the corresponding element of the result of concatenating ARG1 and ARG2, rounded to the result type. vector bool char vec_pack (vector bool short, vector bool short); vector signed char vec_pack (vector signed short, vector signed short); vector unsigned char vec_pack (vector unsigned short, vector unsigned short); vector bool int vec_pack (vector bool long long, vector bool long long); vector signed int vec_pack (vector signed long long, vector signed long long); vector unsigned int vec_pack (vector unsigned long long, vector unsigned long long); vector bool short vec_pack (vector bool int, vector bool int); vector signed short vec_pack (vector signed int, vector signed int); vector unsigned short vec_pack (vector unsigned int, vector unsigned int); vector float vec_pack (vector double, vector double); POWER ISA 3.0 Phased in. vector _Float16 vec_pack (vector float, vector float); VEC_PACK_TO_SHORT_FP32 (ARG1, ARG2) POWER ISA 3.0 Purpose: Packs eight single-precision 32-bit floating-point numbers into a vector of eight 16-bit floating-point numbers. Result value: The value is a vector consisting of eight 16-bit elements, each representing a 16-bit floating-point number that was created by converting the corresponding single-precision value to half-precision. POWER ISA 3.0 vector unsigned short vec_pack_to_short_fp32 (vector float, vector float); VEC_PACKPX (ARG1, ARG2) Purpose: Packs information from each element of two vectors into the result vector. Result value: The value of each element of the result vector is taken from the corresponding element of the result of concatenating ARG1 and ARG2 as follows: The least-significant bit of the high-order byte is stored into the first bit of the result element. The least-significant 5 bits of each of the remaining bytes are stored into the remaining portion of the result element. vector pixel vec_packpx (vector unsigned int, vector unsigned int); VEC_PACKS (ARG1, ARG2) Purpose: Packs information from each element of two vectors into the result vector, using saturated values. Result value: The value of each element of the result vector is the saturated value of the corresponding element of the result of concatenating ARG1 and ARG2. vector signed char vec_packs (vector signed short, vector signed short); vector unsigned char vec_packs (vector unsigned short, vector unsigned short); vector signed int vec_packs (vector signed long long, vector signed long long); vector unsigned int vec_packs (vector unsigned long long, vector unsigned long long); vector signed short vec_packs (vector signed int, vector signed int); vector unsigned short vec_packs (vector unsigned int, vector unsigned int); VEC_PACKSU (ARG1, ARG2) Purpose: Packs information from each element of two vectors into the result vector, using unsigned saturated values. Result value: The value of each element of the result vector is the saturated value of the corresponding element of the result of concatenating ARG1 and ARG2. vector unsigned char vec_packsu (vector signed short, vector signed short); vector unsigned char vec_packsu (vector unsigned short, vector unsigned short); vector unsigned int vec_packsu (vector signed long long, vector signed long long); Phased in. vector unsigned int vec_packsu (vector unsigned long long, vector unsigned long long); vector unsigned short vec_packsu (vector signed int, vector signed int); vector unsigned short vec_packsu (vector unsigned int, vector unsigned int); VEC_PARITY_LSBB (ARG1) POWER ISA 3.0 Purpose: Compute parity on the least-significant bit of each byte. Result value: Returns a vector with each element containing the parity of the low-order bit of each of the bytes in that element. POWER ISA 3.0 vector unsigned int vec_parity_lsbb (vector signed int); POWER ISA 3.0 vector unsigned int vec_parity_lsbb (vector unsigned int); POWER ISA 3.0 vector unsigned __int128 vec_parity_lsbb (vector signed __int128); POWER ISA 3.0 vector unsigned __int128 vec_parity_lsbb (vector unsigned __int128); POWER ISA 3.0 vector unsigned long long vec_parity_lsbb (vector signed long long); POWER ISA 3.0 vector unsigned long long vec_parity_lsbb (vector unsigned long long); VEC_PERM (ARG1, ARG2, ARG3) Purpose: Returns a vector that contains some elements of two vectors, in the order specified by a third vector. Result value: Each byte of the result is selected by using the least-significant 5 bits of the corresponding byte of ARG3 as an index into the concatenated bytes of ARG1 and ARG2. vector bool char vec_perm (vector bool char, vector bool char, vector unsigned char); vector signed char vec_perm (vector signed char, vector signed char, vector unsigned char); vector unsigned char vec_perm (vector unsigned char, vector unsigned char, vector unsigned char); vector bool int vec_perm (vector bool int, vector bool int, vector unsigned char); vector signed int vec_perm (vector signed int, vector signed int, vector unsigned char); vector unsigned int vec_perm (vector unsigned int, vector unsigned int, vector unsigned char); Phased in. vector bool long long vec_perm (vector bool long long, vector bool long long, vector unsigned char); vector signed long long vec_perm (vector signed long long, vector signed long long, vector unsigned char); Phased in. vector unsigned long long vec_perm (vector unsigned long long, vector unsigned long long, vector unsigned char); vector pixel vec_perm (vector pixel, vector pixel, vector unsigned char); vector bool short vec_perm (vector bool short, vector bool short, vector unsigned char); vector signed short vec_perm (vector signed short, vector signed short, vector unsigned char); vector unsigned short vec_perm (vector unsigned short, vector unsigned short, vector unsigned char); vector double vec_perm (vector double, vector double, vector unsigned char); vector float vec_perm (vector float, vector float, vector unsigned char); POWER ISA 3.0 Phased in. vector _Float16 vec_perm (vector _Float16, vector _Float16, vector unsigned char); VEC_PERMXOR (ARG1, ARG2, ARG3) Purpose: Applies a permute and exclusive-OR operation on two vectors of byte elements. Result value: For each i (0 ≤ i < 16), let index1 be bits 0–3 and index2 be bits 4–7 of byte element i of mask ARG3. Byte element i of the result is set to the exclusive-OR of byte elements index1 of ARG1 and index2 of ARG2. Phased in. vector bool char vec_permxor (vector bool char, vector bool char, vector bool char); Phased in. vector unsigned char vec_permxor (vector signed char, vector signed char, vector signed char); Phased in. vector unsigned char vec_permxor (vector unsigned char, vector unsigned char, vector unsigned char); VEC_POPCNT (ARG1) Purpose: Returns a vector containing the number of bits set in each element of the input vector. Result value: The value of each element of the result is the number of bits set in the corresponding input element. vector unsigned char vec_popcnt (vector signed char); vector unsigned char vec_popcnt (vector unsigned char); vector unsigned int vec_popcnt (vector signed int); vector unsigned int vec_popcnt (vector unsigned int); vector unsigned long long vec_popcnt (vector signed long long); vector unsigned long long vec_popcnt (vector unsigned long long); vector unsigned short vec_popcnt (vector signed short); vector unsigned short vec_popcnt (vector unsigned short); VEC_RE (ARG1) Purpose: Returns a vector containing estimates of the reciprocals of the corresponding elements of the given vector. Result value: Each element of the result contains the estimated value of the reciprocal of the corresponding element of ARG1. vector float vec_re (vector float); vector double vec_re (vector double); VEC_RECIPDIV (ARG1, ARG2) Purpose: Returns a vector containing approximations of the division of the corresponding elements of ARG1 by the corresponding elements of ARG2. This implementation provides an implementation-dependent precision, which is commonly within 2 ulps for most of the numeric range expressible by the input operands. This built-in function does not correspond to a single IEEE operation and does not provide the overflow, underflow, and NaN propagation characteristics specified for IEEE division. (Precision may be a function of both the specified target processor model during compilation and the actual processor on which a program is executed.) Result value: Each element of the result vector contains a refined approximation of the division of the corresponding element of ARG1 by the corresponding element of ARG2. vector double vec_recipdiv (vector double, vector double); vector float vec_recipdiv (vector float, vector float); VEC_REVB (ARG1) Purpose: Reverse the bytes of each vector element of a vector. Result value: Returns a vector where each vector element contains the corresponding byte-reversed vector element of the input vector. vector bool char vec_revb (vector bool char); vector signed char vec_revb (vector signed char); vector unsigned char vec_revb (vector unsigned char); vector bool int vec_revb (vector bool int); vector signed int vec_revb (vector signed int); vector unsigned int vec_revb (vector unsigned int); vector signed __int128 vec_revb (vector signed __int128); vector unsigned __int128 vec_revb (vector unsigned __int128); vector bool long long vec_revb (vector bool long long); vector signed long long vec_revb (vector signed long long); vector unsigned long long vec_revb (vector unsigned long long); vector bool short vec_revb (vector bool short); vector signed short vec_revb (vector signed short); vector unsigned short vec_revb (vector unsigned short); vector double vec_revb (vector double); vector float vec_revb (vector float); POWER ISA 3.0 Phased in. vector _Float16 vec_revb (vector _Float16); VEC_REVE (ARG1) Purpose: Reverse the elements of a vector. Result value: Returns a vector with the elements of the input vector in reversed order. vector bool char vec_reve (vector bool char); vector signed char vec_reve (vector signed char); vector unsigned char vec_reve (vector unsigned char); vector bool int vec_reve (vector bool int); vector signed int vec_reve (vector signed int); vector unsigned int vec_reve (vector unsigned int); vector bool long long vec_reve (vector bool long long); vector signed long long vec_reve (vector signed long long); vector unsigned long long vec_reve (vector unsigned long long); vector bool short vec_reve (vector bool short); vector signed short vec_reve (vector signed short); vector unsigned short vec_reve (vector unsigned short); vector double vec_reve (vector double); vector float vec_reve (vector float); POWER ISA 3.0 Phased in. vector _Float16 vec_reve (vector _Float16); VEC_RINT (ARG1) Purpose: Returns a vector containing the floating-point integral values nearest to the values of the corresponding elements of the given vector. Result value: Each element of the result contains the nearest representable floating-point integral value to the value of the corresponding element of ARG1. When an input element value is exactly between two integer values, the result value is selected based on the rounding mode specified by the Floating-Point Rounding Control field (RN) of the FPSCR register. vector double vec_rint (vector double); vector float vec_rint (vector float); VEC_RL(ARG1, ARG2) Purpose: Rotates each element of a vector left by a given number of bits. Result value: Each element of the result is obtained by rotating the corresponding element of ARG1 left by the number of bits specified by the corresponding element of ARG2. vector signed char vec_rl (vector signed char, vector unsigned char); vector unsigned char vec_rl (vector unsigned char, vector unsigned char); vector signed int vec_rl (vector signed int, vector unsigned int); vector unsigned int vec_rl (vector unsigned int, vector unsigned int); vector signed long long vec_rl (vector signed long long, vector unsigned long long); vector unsigned long long vec_rl (vector unsigned long long, vector unsigned long long); vector signed short vec_rl (vector signed short, vector unsigned short); vector unsigned short vec_rl (vector unsigned short, vector unsigned short); VEC_RLMI (ARG1, ARG2, ARG3) POWER ISA 3.0 Purpose: Rotates each element of a vector left and inserts each element under a mask. Result value: The result is obtained by rotating each element of vector ARG1 left and inserting it under mask into ARG2. ARG3 bits 11:15 contain the mask beginning, bits 19:23 contain the mask end, and bits 27:31 contain the shift count. POWER ISA 3.0 vector unsigned int vec_rlmi (vector unsigned int, vector unsigned int, vector unsigned int); POWER ISA 3.0 vector unsigned long long vec_rlmi (vector unsigned long long, vector unsigned long long, vector unsigned long long); VEC_RLNM (ARG1, ARG2, ARG3) POWER ISA 3.0 Purpose: Rotates each element of a vector left; then intersects (AND) it with a mask. Result value: Each element of vector ARG1 is rotated left; then intersected (AND) with a mask specified by ARG3. ARG3 contains the mask begin, mask end, and shift count for each element. The shift count is in the low-order byte, the mask end is in the next higher byte, and the mask begin is in the next higher byte. POWER ISA 3.0 vector unsigned int vec_rlnm (vector unsigned int, vector unsigned int, vector unsigned int); POWER ISA 3.0 vector unsigned long long vec_rlnm (vector unsigned long long, vector unsigned long long, vector unsigned long long); VEC_ROUND (ARG1) Purpose: Returns a vector containing the rounded values of the corresponding elements of the given vector. Result value: Each element of the result contains the value of the corresponding element of ARG1, rounded to the nearest representable floating-point integer, using IEEE round-to-nearest rounding. This function might not follow the strict operation definition of the resolution of a tie during a round if the -qstrict=nooperationprecision compiler option is specified. Phased in. vector double vec_round (vector double); vector float vec_round (vector float); VEC_RSQRT (ARG1) Purpose: Returns a vector containing a refined approximation of the reciprocal square roots of the corresponding elements of the given vector. This function provides an implementation-dependent greater precision than VEC_RSQRTE. Result value: Each element of the result contains a refined approximation of the reciprocal square root of the corresponding element of ARG1. vector double vec_rsqrt (vector double); vector float vec_rsqrt (vector float); VEC_RSQRTE (ARG1) Purpose: Returns a vector containing estimates of the reciprocal square roots of the corresponding elements of the given vector. Result value: Each element of the result contains the estimated value of the reciprocal square root of the corresponding element of ARG1. vector double vec_rsqrte (vector double); vector float vec_rsqrte (vector float); VEC_SEL (ARG1, ARG2, ARG3) Purpose: Returns a vector containing the value of either ARG1 or ARG2 depending on the value of ARG3. Result value: Each bit of the result vector has the value of the corresponding bit of ARG1 if the corresponding bit of ARG3 is 0. Otherwise, each bit of the result vector has the value of the corresponding bit of ARG2. vector bool char vec_sel (vector bool char, vector bool char, vector bool char); vector bool char vec_sel (vector bool char, vector bool char, vector unsigned char); vector signed char vec_sel (vector signed char, vector signed char, vector bool char); vector signed char vec_sel (vector signed char, vector signed char, vector unsigned char); vector unsigned char vec_sel (vector unsigned char, vector unsigned char, vector bool char); vector unsigned char vec_sel (vector unsigned char, vector unsigned char, vector unsigned char); vector bool int vec_sel (vector bool int, vector bool int, vector bool int); vector bool int vec_sel (vector bool int, vector bool int, vector unsigned int); vector signed int vec_sel (vector signed int, vector signed int, vector bool int); vector signed int vec_sel (vector signed int, vector signed int, vector unsigned int); vector unsigned int vec_sel (vector unsigned int, vector unsigned int, vector bool int); vector unsigned int vec_sel (vector unsigned int, vector unsigned int, vector unsigned int); vector bool long long vec_sel (vector bool long long, vector bool long long, vector bool long long); vector bool long long vec_sel (vector bool long long, vector bool long long, vector unsigned long long); vector signed long long vec_sel (vector signed long long, vector signed long long, vector bool long long); Phased in. vector signed long long vec_sel (vector signed long long, vector signed long long, vector unsigned long long); Phased in. vector unsigned long long vec_sel (vector unsigned long long, vector unsigned long long, vector bool long long); Phased in. vector unsigned long long vec_sel (vector unsigned long long, vector unsigned long long, vector unsigned long long); vector bool short vec_sel (vector bool short, vector bool short, vector bool short); vector bool short vec_sel (vector bool short, vector bool short, vector unsigned short); vector signed short vec_sel (vector signed short, vector signed short, vector bool short); vector signed short vec_sel (vector signed short, vector signed short, vector unsigned short); vector unsigned short vec_sel (vector unsigned short, vector unsigned short, vector bool short); vector unsigned short vec_sel (vector unsigned short, vector unsigned short, vector unsigned short); vector double vec_sel (vector double, vector double, vector bool long long); vector double vec_sel (vector double, vector double, vector unsigned long long); vector float vec_sel (vector float, vector float, vector bool int); vector float vec_sel (vector float, vector float, vector unsigned int); POWER ISA 3.0 Phased in. vector _Float16 vec_sel (vector _Float16, vector _Float16, vector bool short); POWER ISA 3.0 Phased in. vector _Float16 vec_sel (vector _Float16, vector _Float16, vector unsigned short); VEC_SIGNED (ARG1) Purpose: Converts a vector of floating-point numbers to a vector of signed integers. Result value: Target elements are obtained by truncatingconverting the respective source elements to signed integers. vector signed int vec_signed (vector float); vector signed long long vec_signed (vector double); VEC_SIGNED2 (ARG1, ARG2) Purpose: Converts a vector of floating-point numbers to vector of signed integers. Result value: Target elements are obtained by truncatingconverting the source elements to the signed integers as follows: Target elements 0 and 1 from source 0 Target elements 2 and 3 from source 1 vector signed int vec_signed2 (vector double, vector double); VEC_SIGNEDE (ARG1) Purpose: Converts an input vector to a vector of signed integers. Result value: The even target elements are obtained by truncatingconverting the source elements to signed integers as follows: Target elements 0 and 2 contain the converted values of the input vector. vector signed int vec_signede (vector double); VEC_SIGNEDO (ARG1) Purpose: Converts an input vector to a vector of signed integers. Result value: The odd target elements are obtained by truncatingconverting the source elements to signed integers as follows: Target elements 1 and 3 contain the converted values of the input vector. vector signed int vec_signedo (vector double); VEC_SL (ARG1, ARG2) Purpose: Performs a left shift for each element of a vector. Result value: Each element of the result vector is the result of left shifting the corresponding element of ARG1 by the number of bits specified by the value of the corresponding element of ARG2, modulo the number of bits in the element. The bits that are shifted out are replaced by zeros. vector signed char vec_sl (vector signed char, vector unsigned char); vector unsigned char vec_sl (vector unsigned char, vector unsigned char); vector signed int vec_sl (vector signed int, vector unsigned int); vector unsigned int vec_sl (vector unsigned int, vector unsigned int); vector signed long long vec_sl (vector signed long long, vector unsigned long long); vector unsigned long long vec_sl (vector unsigned long long, vector unsigned long long); vector signed short vec_sl (vector signed short, vector unsigned short); vector unsigned short vec_sl (vector unsigned short, vector unsigned short); VEC_SLD (ARG1, ARG2, ARG3) Purpose: Left shifts a double vector (that is, two concatenated vectors) by a given number of bytes. For vec_sld being performed on the vector bool and floating-point types, the result is undefined, when the specified shift count is not a multiple of the element size. Result value: The result is the most-significant 16 bytes obtained by concatenating ARG1 and ARG2 and shifting left by the number of bytes specified by ARG3, which should be in the range 0–15. vector bool char vec_sld (vector bool char, vector bool char, const int); vector signed char vec_sld (vector signed char, vector signed char, const int); vector unsigned char vec_sld (vector unsigned char, vector unsigned char, const int); vector bool int vec_sld (vector bool int, vector bool int, const int); vector signed int vec_sld (vector signed int, vector signed int, const int); vector unsigned int vec_sld (vector unsigned int, vector unsigned int, const int); Phased in. vector bool long long vec_sld (vector bool long long, vector bool long long, const int); Phased in. vector signed long long vec_sld (vector signed long long, vector signed long long, const int); Phased in. vector unsigned long long vec_sld (vector unsigned long long, vector unsigned long long, const int); vector pixel vec_sld (vector pixel, vector pixel, const int); vector bool short vec_sld (vector bool short, vector bool short, const int); vector signed short vec_sld (vector signed short, vector signed short, const int); vector unsigned short vec_sld (vector unsigned short, vector unsigned short, const int); Phased in. vector double vec_sld (vector double, vector double, const int); vector float vec_sld (vector float, vector float, const int); VEC_SLDW (ARG1, ARG2, ARG3) Purpose: Returns a vector obtained by shifting left the concatenated input vectors by the number of specified words. Result value: The value of each element is set to the value of an input element of the concatenated vectors ARG1 and ARG2, with the word offset to its right1 specified by ARG3, which should be in the range 0–3. 1A shift left picks values from the right. vector signed char vec_sldw (vector signed char, vector signed char, const int); vector unsigned char vec_sldw (vector unsigned char, vector unsigned char, const int); vector signed int vec_sldw (vector signed int, vector signed int, const int); vector unsigned int vec_sldw (vector unsigned int, vector unsigned int, const int); vector signed long long vec_sldw (vector signed long long, vector signed long long, const int); vector unsigned long long vec_sldw (vector unsigned long long, vector unsigned long long, const int); vector signed short vec_sldw (vector signed short, vector signed short, const int); vector unsigned short vec_sldw (vector unsigned short, vector unsigned short, const int); VEC_SLL (ARG1, ARG2) Purpose: Left shifts a vector by a given number of bits. Result value: The result is the contents of ARG1, shifted left by the number of bits specified by the three least-significant bits of ARG2. The bits that are shifted out are replaced by zeros. The shift count must have been replicated into all bytes of the shift count specification. vector signed char vec_sll (vector signed char, vector unsigned char); vector unsigned char vec_sll (vector unsigned char, vector unsigned char); vector signed int vec_sll (vector signed int, vector unsigned char); vector unsigned int vec_sll (vector unsigned int, vector unsigned char); Phased in. vector signed long long vec_sll (vector signed long long, vector unsigned char); Phased in. vector unsigned long long vec_sll (vector unsigned long long, vector unsigned char); vector pixel vec_sll (vector pixel, vector unsigned char); vector signed short vec_sll (vector signed short, vector unsigned char); vector unsigned short vec_sll (vector unsigned short, vector unsigned char); VEC_SLO (ARG1, ARG2) Purpose: Left shifts a vector by a given number of bytes (octets). Result value: The result is the contents of ARG1, shifted left by the number of bytes specified by the most-significant nibble of the least-significant byte1 of ARG2. The bits that are shifted out are replaced by zeros. 1That is, by little-endian bits 7–4 or big-endian bits 121–124. vector signed char vec_slo (vector signed char, vector signed char); vector signed char vec_slo (vector signed char, vector unsigned char); vector unsigned char vec_slo (vector unsigned char, vector signed char); vector unsigned char vec_slo (vector unsigned char, vector unsigned char); vector signed int vec_slo (vector signed int, vector signed char); vector signed int vec_slo (vector signed int, vector unsigned char); vector unsigned int vec_slo (vector unsigned int, vector signed char); vector unsigned int vec_slo (vector unsigned int, vector unsigned char); vector signed long long vec_slo (vector signed long long, vector signed char); vector signed long long vec_slo (vector signed long long, vector unsigned char); vector unsigned long long vec_slo (vector unsigned long long, vector signed char); vector unsigned long long vec_slo (vector unsigned long long, vector unsigned char); vector pixel vec_slo (vector pixel, vector signed char); vector pixel vec_slo (vector pixel, vector unsigned char); vector signed short vec_slo (vector signed short, vector signed char); vector signed short vec_slo (vector signed short, vector unsigned char); vector unsigned short vec_slo (vector unsigned short, vector signed char); vector unsigned short vec_slo (vector unsigned short, vector unsigned char); vector float vec_slo (vector float, vector signed char); vector float vec_slo (vector float, vector unsigned char); VEC_SLV (ARG1, ARG2) POWER ISA 3.0 Purpose: Left-shifts a vector by a varying number of bits by element. Result value: For each integer 0i14, let Xi be the halfword formed by concatenating elements i and i+1 of ARG1. Let X15 be the halfword formed by concatenating element 15 of ARG1 with a zero byte. Let Si be the value in the three least-significant bits of element i of ARG2. Then, element i of the result vector contains the value formed from bits Si through Si + 7 of Xi. POWER ISA 3.0 vector unsigned char vec_slv (vector unsigned char, vector unsigned char); VEC_SPLAT (ARG1, ARG2) Purpose: Returns a vector that has all of its elements set to a given value. Result value: The value of each element of the result is the value of the element of ARG1 specified by ARG2, which should be an element number less than the number of elements supported for the respective ARG1 type. vector bool char vec_splat (vector bool char, const int); vector signed char vec_splat (vector signed char, const int); vector unsigned char vec_splat (vector unsigned char, const int); vector bool int vec_splat (vector bool int, const int); vector signed int vec_splat (vector signed int, const int); vector unsigned int vec_splat (vector unsigned int, const int); Phased in. vector bool long long vec_splat (vector bool long long, const int); vector signed long long vec_splat (vector signed long long, const int); vector unsigned long long vec_splat (vector unsigned long long, const int); vector pixel vec_splat (vector pixel, const int); vector bool short vec_splat (vector bool short, const int); vector signed short vec_splat (vector signed short, const int); vector unsigned short vec_splat (vector unsigned short, const int); Phased in. vector double vec_splat (vector double, const int); vector float vec_splat (vector float, const int); POWER ISA 3.0 Phased in. vector _Float16 vec_splat (vector _Float16, const int); VEC_SPLAT_S8 (ARG1) Purpose: Returns a vector with all elements equal to the given value. Result value: The bit pattern of ARG1 is interpreted as a signed value. Each element of the result is given this value. vector signed char vec_splat_s8 (const int); VEC_SPLAT_S16 (ARG1) Purpose: Returns a vector with all elements equal to the given value. Result value: Each element of the result has the value of ARG1. vector signed short vec_splat_s16 (const int); VEC_SPLAT_S32 (ARG1) Purpose: Returns a vector with all elements equal to the given value. Result value: Each element of the result has the value of ARG1. vector signed int vec_splat_s32 (const int); VEC_SPLAT_U8 (ARG1) Purpose: Returns a vector with all elements equal to the given value. Result value: The bit pattern of ARG1 is interpreted as an unsigned value. Each element of the result is given this value. vector unsigned char vec_splat_u8 (const int); VEC_SPLAT_U16 (ARG1) Purpose: Returns a vector with all elements equal to the given value. Result value: The bit pattern of ARG1 is interpreted as an unsigned value. Each element of the result is given this value. vector unsigned short vec_splat_u16 (const int); VEC_SPLAT_U32 (ARG1) Purpose: Returns a vector with all elements equal to the given value. Result value: The bit pattern of ARG1 is interpreted as an unsigned value. Each element of the result is given this value. vector unsigned int vec_splat_u32 (const int); VEC_SPLATS (ARG1) Purpose: Returns a vector with the value of each element set to ARG1. Result value: Each element of the result is set to the value of the scalar input parameter. vector signed char vec_splats (signed char); vector unsigned char vec_splats (unsigned char); vector signed int vec_splats (signed int); vector unsigned int vec_splats (unsigned int); vector signed __int128 vec_splats (signed __int128); vector unsigned __int128 vec_splats (unsigned __int128); vector signed long long vec_splats (signed long long); vector unsigned long long vec_splats (unsigned long long); vector signed short vec_splats (signed short); vector unsigned short vec_splats (unsigned short); vector double vec_splats (double); vector float vec_splats (float); POWER ISA 3.0 Phased in. vector _Float16 vec_splats (_Float16); VEC_SQRT (ARG1) Purpose: Returns a vector containing the square root of each element in the given vector. Result value: Each element of the result vector is the square root of the corresponding element of ARG1. vector double vec_sqrt (vector double); vector float vec_sqrt (vector float); VEC_SR (ARG1, ARG2) Purpose: Performs a logical right shift for each element of a vector. Result value: Each element of the result vector is the result of logically right shifting the corresponding element of ARG1 by the number of bits specified by the value of the corresponding element of ARG2, modulo the number of bits in the element. The bits that are shifted out are replaced by zeros. vector signed char vec_sr (vector signed char, vector unsigned char); vector unsigned char vec_sr (vector unsigned char, vector unsigned char); vector signed int vec_sr (vector signed int, vector unsigned int); vector unsigned int vec_sr (vector unsigned int, vector unsigned int); vector signed long long vec_sr (vector signed long long, vector unsigned long long); vector unsigned long long vec_sr (vector unsigned long long, vector unsigned long long); vector signed short vec_sr (vector signed short, vector unsigned short); vector unsigned short vec_sr (vector unsigned short, vector unsigned short); VEC_SRA (ARG1, ARG2) Purpose: Performs an algebraic right shift for each element of a vector. Result value: Each element of the result vector is the result of algebraically right shifting the corresponding element of ARG1 by the number of bits specified by the value of the corresponding element of ARG2, modulo the number of bits in the element. The bits that are shifted out are replaced by copies of the most-significant bit of the element of ARG1. vector signed char vec_sra (vector signed char, vector unsigned char); vector unsigned char vec_sra (vector unsigned char, vector unsigned char); vector signed int vec_sra (vector signed int, vector unsigned int); vector unsigned int vec_sra (vector unsigned int, vector unsigned int); vector signed long long vec_sra (vector signed long long, vector unsigned long long); vector unsigned long long vec_sra (vector unsigned long long, vector unsigned long long); vector signed short vec_sra (vector signed short, vector unsigned short); vector unsigned short vec_sra (vector unsigned short, vector unsigned short); VEC_SRL (ARG1, ARG2) Purpose: Right shifts a vector by a given number of bits. Result value: The result is the contents of ARG1, shifted right by the number of bits specified by the 3 least-significant bits of ARG2. The bits that are shifted out are replaced by zeros. The shift count must have been replicated into all bytes of the shift count specification. vector signed char vec_srl (vector signed char, vector unsigned char); vector unsigned char vec_srl (vector unsigned char, vector unsigned char); vector signed int vec_srl (vector signed int, vector unsigned char); vector unsigned int vec_srl (vector unsigned int, vector unsigned char); Phased in. vector signed long long vec_srl (vector signed long long, vector unsigned char); Phased in. vector unsigned long long vec_srl (vector unsigned long long, vector unsigned char); vector pixel vec_srl (vector pixel, vector unsigned char); vector signed short vec_srl (vector signed short, vector unsigned char); vector unsigned short vec_srl (vector unsigned short, vector unsigned char); VEC_SRO (ARG1, ARG2) Purpose: Right shifts a vector by a given number of bytes (octets). Result value: The result is the contents of ARG1, shifted right by the number of bytes specified by bits 121–124 of ARG2. The bits that are shifted out are replaced by zeros. vector signed char vec_sro (vector signed char, vector signed char); vector signed char vec_sro (vector signed char, vector unsigned char); vector unsigned char vec_sro (vector unsigned char, vector signed char); vector unsigned char vec_sro (vector unsigned char, vector unsigned char); vector signed int vec_sro (vector signed int, vector signed char); vector signed int vec_sro (vector signed int, vector unsigned char); vector unsigned int vec_sro (vector unsigned int, vector signed char); vector unsigned int vec_sro (vector unsigned int, vector unsigned char); Phased in. vector signed long long vec_sro (vector signed long long, vector signed char); Phased in. vector signed long long vec_sro (vector signed long long, vector unsigned char); Phased in. vector unsigned long long vec_sro (vector unsigned long long, vector signed char); Phased in. vector unsigned long long vec_sro (vector unsigned long long, vector unsigned char); vector pixel vec_sro (vector pixel, vector signed char); vector pixel vec_sro (vector pixel, vector unsigned char); vector signed short vec_sro (vector signed short, vector signed char); vector signed short vec_sro (vector signed short, vector unsigned char); vector unsigned short vec_sro (vector unsigned short, vector signed char); vector unsigned short vec_sro (vector unsigned short, vector unsigned char); vector float vec_sro (vector float, vector signed char); vector float vec_sro (vector float, vector unsigned char); VEC_SRV (ARG1, ARG2) POWER ISA 3.0 Purpose: Right-shifts a vector by a varying number of bits by element. Result value: For each integer 1 i 15, let Xi be the halfword formed by concatenating elements i and i + 1 of ARG1. Let X0 be the halfword formed by concatenating a zero byte with element 0 of ARG1. Let Si be the value in the three least-significant bits of element i of ARG2. Then element i of the result vector contains the value formed from bits 8 – Si through 15 – Si. POWER ISA 3.0 vector unsigned char vec_srv (vector unsigned char, vector unsigned char); VEC_SUB (ARG1, ARG2) Purpose: Returns a vector containing the result of subtracting each element of ARG2 from the corresponding element of ARG1. This function emulates the operation on long long vectors. Result value: The value of each element of the result is the result of subtracting the value of the corresponding element of ARG2 from the value of the corresponding element of ARG1. The arithmetic is modular for integer vectors. vector signed char vec_sub (vector signed char, vector signed char); vector unsigned char vec_sub (vector unsigned char, vector unsigned char); vector signed int vec_sub (vector signed int, vector signed int); vector unsigned int vec_sub (vector unsigned int, vector unsigned int); vector signed __int128 vec_sub (vector signed __int128, vector signed __int128); vector unsigned __int128 vec_sub (vector unsigned __int128, vector unsigned __int128); vector signed long long vec_sub (vector signed long long, vector signed long long); vector unsigned long long vec_sub (vector unsigned long long, vector unsigned long long); vector signed short vec_sub (vector signed short, vector signed short); vector unsigned short vec_sub (vector unsigned short, vector unsigned short); vector double vec_sub (vector double, vector double); vector float vec_sub (vector float, vector float); VEC_SUBC (ARG1, ARG2) Purpose: Returns a vector containing the carry produced by subtracting each set of corresponding elements of the given vectors. Result value: The value of each element of the result is the value of the carry produced by subtracting the value of the corresponding element of ARG2 from the value of the corresponding element of ARG1. The value is 0 if a borrow occurred, or 1 if no borrow occurred. vector signed int vec_subc (vector signed int, vector signed int); vector unsigned int vec_subc (vector unsigned int, vector unsigned int); vector signed __int128 vec_subc (vector signed __int128, vector signed __int128); vector unsigned __int128 vec_subc (vector unsigned __int128, vector unsigned __int128); VEC_SUBE (ARG1, ARG2, ARG3) Purpose: Returns a vector containing the result of adding each set of corresponding elements of ARG1 and ARG2 with a carry (having either values of 0 or 1) specified as the ARG3 vector. Result value: The value of each element of the result is produced by adding the corresponding elements of ARG1 and ARG2 and a carry specified in ARG3 (1 if there is a carry, 0 otherwise). vector signed int vec_sube (vector signed int, vector signed int, vector signed int); vector unsigned int vec_sube (vector unsigned int, vector unsigned int, vector unsigned int); vector signed __int128 vec_sube (vector signed __int128, vector signed __int128, vector signed __int128); vector unsigned __int128 vec_sube (vector unsigned __int128, vector unsigned __int128, vector unsigned __int128); VEC_SUBEC (ARG1, ARG2, ARG3) Purpose: Returns a vector containing the carry produced by adding each set of corresponding elements of ARG1 and ARG2 with a carry (having either values of 0 or 1) specified in ARG3 vector. Result value: The value of each element of the result is the carry produced by adding the corresponding elements of ARG1 and ARG2 and a carry specified in ARG3 (1 if there is a carry, 0 otherwise). vector signed int vec_subec (vector signed int, vector signed int, vector signed int); vector unsigned int vec_subec (vector unsigned int, vector unsigned int, vector unsigned int); vector signed __int128 vec_subec (vector signed __int128, vector signed __int128, vector signed __int128); vector unsigned __int128 vec_subec (vector unsigned __int128, vector unsigned __int128, vector unsigned __int128); VEC_SUBS (ARG1, ARG2) Purpose: Returns a vector containing the saturated differences of each set of corresponding elements of the given vectors. Result value: The value of each element of the result is the saturated result of subtracting the value of the corresponding element of ARG2 from the value of the corresponding element of ARG1. vector signed char vec_subs (vector signed char, vector signed char); vector unsigned char vec_subs (vector unsigned char, vector unsigned char); vector signed int vec_subs (vector signed int, vector signed int); vector unsigned int vec_subs (vector unsigned int, vector unsigned int); vector signed short vec_subs (vector signed short, vector signed short); vector unsigned short vec_subs (vector unsigned short, vector unsigned short); VEC_SUM2S (ARG1, ARG2) Purpose: Returns a vector containing the results of performing a sum-across-doublewords vector operation on the given vectors. Result value: The first and third element of the result are 0. The second element of the result contains the saturated sum of the first and second elements of ARG1 and the second element of ARG2. The fourth element of the result contains the saturated sum of the third and fourth elements of ARG1 and the fourth element of ARG2. vector signed int vec_sum2s (vector signed int, vector signed int); VEC_SUM4S (ARG1, ARG2) Purpose: Returns a vector containing the results of performing a sum-across-words vector operation on the given vectors. Result value: Assume that the elements of each vector are numbered beginning with 0. If ARG1 is a vector signed char vector or a vector unsigned char vector, then let m be 4. Otherwise, let m be 2. For each element n of the result vector, the value is obtained by adding elements mn through mn + m – 1 of ARG1 and element n of ARG2 using saturated addition. vector signed int vec_sum4s (vector signed char, vector signed int); vector signed int vec_sum4s (vector signed short, vector signed int); vector unsigned int vec_sum4s (vector unsigned char, vector unsigned int); VEC_SUMS (ARG1, ARG2) Purpose: Returns a vector containing the results of performing a sum across vector operation on the given vectors. Result value: The first three elements of the result are 0. The fourth element is the saturated sum of all the elements of ARG1 and the fourth element of ARG2. vector signed int vec_sums (vector signed int, vector signed int); VEC_TEST_DATA_CLASS (ARG1, ARG2) POWER ISA 3.0 Purpose: Determines the data class for each floating-point element. Result value: Each element is set to all ones if the corresponding element of ARG1 matches one of the possible data types selected by ARG2. If not, each element is set to all zeros. ARG2 can select one of the data types defined in . POWER ISA 3.0 vector bool int vec_test_data_class (vector float, const int); POWER ISA 3.0 vector bool long long vec_test_data_class (vector double, const int); VEC_TRUNC (ARG1) Purpose: Returns a vector containing the truncated values of the corresponding elements of the given vector. Result value: Each element of the result contains the value of the corresponding element of ARG1, truncated to an integral value. vector double vec_trunc (vector double); vector float vec_trunc (vector float); VEC_UNPACKH (ARG1) Purpose: Unpacks the most-significant (“high”) half of a vector into a vector with larger elements. Result value: If ARG1 is an integer vector, the value of each element of the result is the value of the corresponding element of the most-significant half of ARG1. If ARG1 is a floating-point vector, the value of each element of the result is the value of the corresponding element of the most-significant half of ARG1, widened to the result precision. If ARG1 is a pixel vector, the value of each element of the result is taken from the corresponding element of the most-significant half of ARG1 as follows: All bits in the first byte of the element of the result are set to the value of the first bit of the element of ARG1. The least-significant 5 bits of the second byte of the element of the result are set to the value of the next 5 bits in the element of ARG1. The least-significant 5 bits of the third byte of the element of the result are set to the value of the next 5 bits in the element of ARG1. The least-significant 5 bits of the fourth byte of the element of the result are set to the value of the next 5 bits in the element of ARG1. vector bool int vec_unpackh (vector bool short); vector signed int vec_unpackh (vector signed short); vector unsigned int vec_unpackh (vector pixel); vector bool long long vec_unpackh (vector bool int); vector signed long long vec_unpackh (vector signed int); vector bool short vec_unpackh (vector bool char); vector signed short vec_unpackh (vector signed char); Phased in. vector double vec_unpackh (vector float); POWER ISA 3.0 Phased in. vector float vec_unpackh (vector _Float16); VEC_UNPACKL (ARG1) Purpose: Unpacks the least-significant (“low”) half of a vector into a vector with larger elements. Result value: If ARG1 is an integer vector, the value of each element of the result is the value of the corresponding element of the least-significant half of ARG1. If ARG1 is a floating-point vector, the value of each element of the result is the value of the corresponding element of the least-significant half of ARG, widened to the result precision. If ARG1 is a pixel vector, the value of each element of the result is taken from the corresponding element of the least-significant half of ARG1 as follows: All bits in the first byte of the element of the result are set to the value of the first bit of the element of ARG1. The least-significant 5 bits of the second byte of the element of the result are set to the value of the next 5 bits in the element of ARG1. The least-significant 5 bits of the third byte of the element of the result are set to the value of the next 5 bits in the element of ARG1. The least-significant 5 bits of the fourth byte of the element of the result are set to the value of the next 5 bits in the element of ARG1. vector bool int vec_unpackl (vector bool short); vector signed int vec_unpackl (vector signed short); vector unsigned int vec_unpackl (vector pixel); vector bool long long vec_unpackl (vector bool int); vector signed long long vec_unpackl (vector signed int); vector bool short vec_unpackl (vector bool char); vector signed short vec_unpackl (vector signed char); Phased in. vector double vec_unpackl (vector float); POWER ISA 3.0 Phased in. vector float vec_unpackl (vector _Float16); VEC_UNSIGNED (ARG1) Purpose: Converts a vector of double-precision numbers to a vector of unsigned integers. Result value: Target elements are obtained by truncatingconverting the respective source elements to unsigned integers. vector unsigned int vec_unsigned (vector float); vector unsigned long long vec_unsigned (vector double); VEC_UNSIGNED2 (ARG1, ARG2) Purpose: Converts a vector of double-precision numbers to a vector of unsigned integers. Result value: Target elements are obtained by truncatingconverting the source elements to the unsigned integers as follows: Target elements 0 and 1 from source 0 Target elements 2 and 3 from source 1 vector unsigned int vec_unsigned2 (vector double, vector double); VEC_UNSIGNEDE (ARG1) Purpose: Converts an input vector to a vector of unsigned integers. Result value: The even target elements are obtained by truncatingconverting the source elements to unsigned integers as follows: Target elements 0 and 2 contain the converted values of the input vector. vector unsigned int vec_unsignede (vector double); VEC_UNSIGNEDO (ARG1) Purpose: Converts an input vector to a vector of unsigned integers. Result value: The odd target elements are obtained by truncatingconverting the source elements to unsigned integers as follows: Target elements 1 and 3 contain the converted values of the input vector. vector unsigned int vec_unsignedo (vector double); VEC_XL (ARG1, ARG2) Purpose: Loads a 16-byte vector from the memory address specified by the displacement and the pointer. Result value: This function adds the displacement and the pointer R-value to obtain the address for the load operation. For languages that support built-in methods for pointer dereferencing, such as the C/C++ pointer dereference * and array access [ ] operators, use of the native operators is encouraged and use of the vec_xl intrinsic is discouraged. vector signed char vec_xl (signed long long, signed char *); vector unsigned char vec_xl (signed long long, unsigned char *); vector signed int vec_xl (signed long long, signed int *); vector unsigned int vec_xl (signed long long, unsigned int *); vector signed __int128 vec_xl (signed long long, signed __int128 *); vector unsigned __int128 vec_xl (signed long long, unsigned __int128 *); vector signed signed long long vec_xl (signed long long, signed long long *); vector unsigned long long vec_xl (signed long long, unsigned long long *); vector signed short vec_xl (signed long long, signed short *); vector unsigned short vec_xl (signed long long, unsigned short *); vector double vec_xl (signed long long, double *); vector float vec_xl (signed long long, float *); POWER ISA 3.0 Phased in. vector _Float16 vec_xl (signed long long, _Float16 *); VEC_XL_BE (ARG1. ARG2) Purpose: In little-endian environments, loads the elements of the 16-byte vector ARG1 starting with the highest-numbered element at the memory address specified by the displacement ARG1 and the pointer ARG2. In big-endian environments, this operator performs the same operation as VEC_XL. Result value: In little-endian mode, loads the elements of the vector in sequential order, with the highest-numbered element loaded from the lowest data address and the lowest-numbered element of the vector at the highest address. All elements are loaded in little-endian data format. This function adds the displacement and the pointer R-value to obtain the address for the load operation. It does not truncate the affected address to a multiple of 16 bytes. vector signed char vec_xl_be (signed long long, signed char *); vector unsigned char vec_xl_be (signed long long, unsigned char *); vector signed int vec_xl_be (signed long long, signed int *); vector unsigned int vec_xl_be (signed long long, unsigned int *); vector signed __int128 vec_xl_be (signed long long, signed __int128 *); vector unsigned __int128 vec_xl_be (signed long long, unsigned __int128 *); vector signed long long vec_xl_be (signed long long, signed long long *); vector unsigned long long vec_xl_be (signed long long, unsigned long long *); vector signed short vec_xl_be (signed long long, signed short *); vector unsigned short vec_xl_be (signed long long, unsigned short *); vector double vec_xl_be (signed long long, double *); vector float vec_xl_be (signed long long, float *); POWER ISA 3.0 Phased in. vector _Float16 vec_xl_be (signed long long, _Float16 *); VEC_XL_LEN (ARG1, ARG2) POWER ISA 3.0 Purpose: Loads a vector of a specified byte length. Result value: Loads the number of bytes specified by ARG2 from the address specified in ARG1. Initializes elements in order from the byte stream (as defined by the endianness of the operating environment). Any bytes of elements that cannot be initialized from the number of loaded bytes have a zero value. At least 0 and at most 16 bytes will be loaded. The length is specified by the least-significant byte of ARG2, as min (mod (ARG2, 256), 16). The behavior is undefined if the length argument is outside of the range 0–255, or if it is not a multiple of the vector element size. POWER ISA 3.0 vector signed char vec_xl_len (signed char *, size_t); POWER ISA 3.0 vector unsigned char vec_xl_len (unsigned char *, size_t); POWER ISA 3.0 vector signed int vec_xl_len (signed int *, size_t); POWER ISA 3.0 vector unsigned int vec_xl_len (unsigned int *, size_t); POWER ISA 3.0 vector signed __int128 vec_xl_len (signed __int128 *, size_t); POWER ISA 3.0 vector unsigned __int128 vec_xl_len (unsigned __int128 *, size_t); POWER ISA 3.0 vector signed long long vec_xl_len (signed long long *, size_t); POWER ISA 3.0 vector unsigned long long vec_xl_len (unsigned long long *, size_t); POWER ISA 3.0 vector signed short vec_xl_len (signed short *, size_t); POWER ISA 3.0 vector unsigned short vec_xl_len (unsigned short *, size_t); POWER ISA 3.0 vector double vec_xl_len (double *, size_t); POWER ISA 3.0 vector float vec_xl_len (float *, size_t); POWER ISA 3.0 vector _Float16 vec_xl_len (_Float16 *, size_t); VEC_XL_LEN_R (ARG1, ARG2) POWER ISA 3.0 Purpose Loads a vector of a specified byte length, right-justified. Result value: Loads the number of bytes specified by ARG2 from the address specified in ARG1, right justified with the first byte to the left and the last to the right. Initializes elements in order from the byte stream (as defined by the endianness of the operating environment). Any bytes of elements that cannot be initialized from the number of loaded bytes have a zero value. At least 0 and at most 16 bytes will be loaded. The length is specified by the least-significant byte of ARG2, as min (mod (ARG2, 256), 16). The behavior is undefined if the length argument is outside of the range 0–255, or if it is not a multiple of the vector element size. POWER ISA 3.0 vector unsigned char vec_xl_len_r (unsigned char *, size_t); VEC_XOR (ARG1, ARG2) Purpose: Performs a bitwise XOR of the given vectors. Result value: The result is the bitwise XOR of ARG1 and ARG2. vector bool char vec_xor (vector bool char, vector bool char); vector signed char vec_xor (vector signed char, vector signed char); vector unsigned char vec_xor (vector unsigned char, vector unsigned char); vector bool int vec_xor (vector bool int, vector bool int); vector signed int vec_xor (vector signed int, vector signed int); vector unsigned int vec_xor (vector unsigned int, vector unsigned int); vector bool long long vec_xor (vector bool long long, vector bool long long); Phased in. vector signed long long vec_xor (vector signed long long, vector signed long long); Phased in. vector unsigned long long vec_xor (vector unsigned long long, vector unsigned long long); vector bool short vec_xor (vector bool short, vector bool short); vector signed short vec_xor (vector signed short, vector signed short); vector unsigned short vec_xor (vector unsigned short, vector unsigned short); vector double vec_xor (vector double, vector double); vector float vec_xor (vector float, vector float); VEC_XST (ARG1, ARG2, ARG3) Purpose Stores the elements of the 16-byte vector to the effective address obtained by adding the displacement provided in the address provided. Result value: Stores the provided vector in memory. For languages that support built-in methods for pointer dereferencing, such as the C/C++ pointer dereference * and array access [ ] operators, use of the native operators is encouraged and use of the vec_xl intrinsic is discouraged. void vec_xst (vector signed char, signed long long, signed char *); void vec_xst (vector unsigned char, signed long long, unsigned char *); void vec_xst (vector signed int, signed long long, signed int *); void vec_xst (vector unsigned int, signed long long, unsigned int *); void vec_xst (vector signed __int128, signed long long, signed __int128 *); void vec_xst (vector unsigned __int128, signed long long, unsigned __int128 *); void vec_xst (vector signed long long, signed long long, signed long long *); void vec_xst (vector unsigned long long, signed long long, unsigned long long *); void vec_xst (vector signed short, signed long long, signed short *); void vec_xst (vector unsigned short, signed long long, unsigned short *); void vec_xst (vector double, signed long long, double *); void vec_xst (vector float, signed long long, float *); POWER ISA 3.0 Phased in. void vec_xst (vector _Float16, signed long long, _Float16 *); VEC_XST_BE (ARG1, ARG2, ARG3) Purpose: In little-endian environments, stores the elements of the 16-byte vector ARG1 starting with the highest-numbered element at the memory address specified by the displacement ARG1 and the pointer ARG2. In big-endian environments, this operator performs the same operation as VEC_XST. Result value: In little-endian mode, stores the elements of the vector in sequential order, with the highest-numbered element stored at the lowest data address and the lowest-numbered element of the vector at the highest address. All elements are stored in little-endian data format. This function adds the displacement and the pointer R-value to obtain the address for the store operation. It does not truncate the affected address to a multiple of 16 bytes. void vec_xst_be (vector signed char, signed long long, signed char *); void vec_xst_be (vector unsigned char, signed long long, unsigned char *); void vec_xst_be (vector signed int, signed long long, signed int *); void vec_xst_be (vector unsigned int, signed long long, unsigned int *); void vec_xst_be (vector signed __int128, signed long long, signed __int128 *); void vec_xst_be (vector unsigned __int128, signed long long, unsigned __int128 *); void vec_xst_be (vector signed long long, signed long long, signed long long *); void vec_xst_be (vector unsigned long long, signed long long, unsigned long long *); void vec_xst_be (vector signed short, signed long long, signed short *); void vec_xst_be (vector unsigned short, signed long long, unsigned short *); void vec_xst_be (vector double, signed long long, double *); void vec_xst_be (vector float, signed long long, float *); POWER ISA 3.0 Phased in. void vec_xst_be (vector _Float16, signed long long, _Float16 *); VEC_XST_LEN (ARG1, ARG2, ARG3) POWER ISA 3.0 Purpose: Stores a vector of a specified byte length. Result value: Stores the number of bytes specified by ARG3 of the vector ARG1 to the address specified in ARG2. The bytes are obtained starting from the lowest-numbered byte of the lowest-numbered element (as defined by the endianness of the operating environment). All bytes of an element are accessed before proceeding to the next higher element. At least 0 and at most 16 bytes will be stored. The length is specified by the least-significant byte of ARG3, as min (mod (ARG3, 256), 16). The behavior is undefined if the length argument is outside of the range 0–255, or if it is not a multiple of the vector element size. POWER ISA 3.0 void vec_xst_len (vector signed char, signed char *, size_t); POWER ISA 3.0 void vec_xst_len (vector unsigned char, unsigned char *, size_t); POWER ISA 3.0 void vec_xst_len (vector signed int, signed int *, size_t); POWER ISA 3.0 void vec_xst_len (vector unsigned int, unsigned int *, size_t); POWER ISA 3.0 void vec_xst_len (vector signed __int128, signed __int128 *, size_t); POWER ISA 3.0 void vec_xst_len (vector unsigned __int128, unsigned __int128 *, size_t); POWER ISA 3.0 void vec_xst_len (vector signed long long, signed long long *, size_t); POWER ISA 3.0 void vec_xst_len (vector unsigned long long, unsigned long long *, size_t); POWER ISA 3.0 void vec_xst_len (vector signed short, signed short *, size_t); POWER ISA 3.0 void vec_xst_len (vector unsigned short, unsigned short *, size_t); POWER ISA 3.0 void vec_xst_len (vector double, double *, size_t); POWER ISA 3.0 void vec_xst_len (vector float, float *, size_t); POWER ISA 3.0 void vec_xst_len (vector _Float16, _Float16 *, size_t); VEC_XST_LEN_R (ARG1, ARG2, ARG3) POWER ISA 3.0 Purpose: Stores a right-justified vector of a specified byte length. Result value: Stores the number of bytes specified by ARG3 of the right-justified vector ARG1 to the address specified by ARG2. At least 0 and at most 16 bytes will be stored. The length is specified by the least-significant byte of ARG3, as min (mod (ARG2, 256), 16). The behavior is undefined if the length argument is outside of the range 0–255, or if it is not a multiple of the vector element size. POWER ISA 3.0 void vec_xst_len_r (vector unsigned char, unsigned char *, size_t);
Built-In Vector Predicate Functions defines vector predicates that compare all elements of two vectors and return 1 for TRUE or 0 for FALSE if any or all of the elements meet the specified condition. As in , functions are listed alphabetically; supported prototypes are provided for each function. Prototypes are grouped by integer and floating-point types. Within each group, types are sorted alphabetically, first by type name and then by modifier. Prototypes are first sorted by the built-in result type, which is the output argument. Then, prototypes are sorted by the input arguments; ARG1, ARG2, and ARG3; in order. See for the format of the prototypes. Built-in Vector Predicate Functions Group Description of Built-In Vector Predicate Functions (with Prototypes) VEC_ALL_EQ (ARG1, ARG2) Purpose: Tests whether all sets of corresponding elements of the given vectors are equal. Result value: The result is 1 if each element of ARG1 is equal to the corresponding element of ARG2. Otherwise, the result is 0. int vec_all_eq (vector bool char, vector bool char); int vec_all_eq (vector signed char, vector signed char); int vec_all_eq (vector unsigned char, vector unsigned char); int vec_all_eq (vector bool int, vector bool int); int vec_all_eq (vector signed int, vector signed int); int vec_all_eq (vector unsigned int, vector unsigned int); int vec_all_eq (vector bool long long, vector bool long long); int vec_all_eq (vector signed long long, vector signed long long); int vec_all_eq (vector unsigned long long, vector unsigned long long); int vec_all_eq (vector pixel, vector pixel); int vec_all_eq (vector bool short, vector bool short); int vec_all_eq (vector signed short, vector signed short); int vec_all_eq (vector unsigned short, vector unsigned short); int vec_all_eq (vector double, vector double); int vec_all_eq (vector float, vector float); VEC_ALL_GE (ARG1, ARG2) Purpose: Tests whether all elements of the first argument are greater than or equal to the corresponding elements of the second argument. Result value: The result is 1 if all elements of ARG1 are greater than or equal to the corresponding elements of ARG2. Otherwise, the result is 0. int vec_all_ge (vector signed char, vector signed char); int vec_all_ge (vector unsigned char, vector unsigned char); int vec_all_ge (vector signed int, vector signed int); int vec_all_ge (vector unsigned int, vector unsigned int); int vec_all_ge (vector signed long long, vector signed long long); int vec_all_ge (vector unsigned long long, vector unsigned long long); int vec_all_ge (vector signed short, vector signed short); int vec_all_ge (vector unsigned short, vector unsigned short); int vec_all_ge (vector double, vector double); int vec_all_ge (vector float, vector float); VEC_ALL_GT (ARG1, ARG2) Purpose: Tests whether all elements of the first argument are greater than the corresponding elements of the second argument. Result value: The result is 1 if all elements of ARG1 are greater than the corresponding elements of ARG2. Otherwise, the result is 0. int vec_all_gt (vector signed char, vector signed char); int vec_all_gt (vector unsigned char, vector unsigned char); int vec_all_gt (vector signed int, vector signed int); int vec_all_gt (vector unsigned int, vector unsigned int); int vec_all_gt (vector signed long long, vector signed long long); int vec_all_gt (vector unsigned long long, vector unsigned long long); int vec_all_gt (vector signed short, vector signed short); int vec_all_gt (vector unsigned short, vector unsigned short); int vec_all_gt (vector double, vector double); int vec_all_gt (vector float, vector float); VEC_ALL_IN (ARG1, ARG2) Purpose: Tests whether each element of a given vector is within a given range. Result value: The result is 1 if all elements of ARG1 have values less than or equal to the value of the corresponding element of ARG2, and greater than or equal to the negative of the value of the corresponding element of ARG2. Otherwise, the result is 0. int vec_all_in (vector float, vector float); VEC_ALL_LE (ARG1, ARG2) Purpose: Tests whether all elements of the first argument are less than or equal to the corresponding elements of the second argument. Result value: The result is 1 if all elements of ARG1 are less than or equal to the corresponding elements of ARG2. Otherwise, the result is 0. int vec_all_le (vector signed char, vector signed char); int vec_all_le (vector unsigned char, vector unsigned char); int vec_all_le (vector signed int, vector signed int); int vec_all_le (vector unsigned int, vector unsigned int); int vec_all_le (vector signed long long, vector signed long long); int vec_all_le (vector unsigned long long, vector unsigned long long); int vec_all_le (vector signed short, vector signed short); int vec_all_le (vector unsigned short, vector unsigned short); int vec_all_le (vector double, vector double); int vec_all_le (vector float, vector float); VEC_ALL_LT (ARG1, ARG2) Purpose: Tests whether all elements of the first argument are less than the corresponding elements of the second argument. Result value: The result is 1 if all elements of ARG1 are less than the corresponding elements of ARG2. Otherwise, the result is 0. int vec_all_lt (vector signed char, vector signed char); int vec_all_lt (vector unsigned char, vector unsigned char); int vec_all_lt (vector signed int, vector signed int); int vec_all_lt (vector unsigned int, vector unsigned int); int vec_all_lt (vector signed long long, vector signed long long); Phased in.This optional function is being phased in, and it might not be available on all implementations. Phased-in interfaces are optional for the current generation of compliant systems. int vec_all_lt (vector unsigned long long, vector unsigned long long); int vec_all_lt (vector signed short, vector signed short); int vec_all_lt (vector unsigned short, vector unsigned short); int vec_all_lt (vector double, vector double); int vec_all_lt (vector float, vector float); VEC_ALL_NAN (ARG1) Purpose: Tests whether each element of the given vector is a not-a-number (NaN). Result value: The result is 1 if each element of ARG1 is a NaN. Otherwise, the result is 0. int vec_all_nan (vector double); int vec_all_nan (vector float); VEC_ALL_NE (ARG1, ARG2) Purpose: Tests whether all sets of corresponding elements of the given vectors are not equal. Result value: The result is 1 if each element of ARG1 is not equal to the corresponding element of ARG2. Otherwise, the result is 0. int vec_all_ne (vector bool char, vector bool char); int vec_all_ne (vector signed char, vector signed char); int vec_all_ne (vector unsigned char, vector unsigned char); int vec_all_ne (vector bool int, vector bool int); int vec_all_ne (vector signed int, vector signed int); int vec_all_ne (vector unsigned int, vector unsigned int); int vec_all_ne (vector bool long long, vector bool long long); int vec_all_ne (vector signed long long, vector signed long long); int vec_all_ne (vector unsigned long long, vector unsigned long long); int vec_all_ne (vector pixel, vector pixel); int vec_all_ne (vector bool short, vector bool short); int vec_all_ne (vector signed short, vector signed short); int vec_all_ne (vector unsigned short, vector unsigned short); int vec_all_ne (vector double, vector double); int vec_all_ne (vector float, vector float); VEC_ALL_NGE (ARG1, ARG2) Purpose: Tests whether each element of the first argument is not greater than or equal to the corresponding element of the second argument. Result value: The result is 1 if each element of ARG1 is not greater than or equal to the corresponding element of ARG2. Otherwise, the result is 0. int vec_all_nge (vector double, vector double); int vec_all_nge (vector float, vector float); VEC_ALL_NGT (ARG1, ARG2) Purpose: Tests whether each element of the first argument is not greater than the corresponding element of the second argument. Result value: The result is 1 if each element of ARG1 is not greater than the corresponding element of ARG2. Otherwise, the result is 0. int vec_all_ngt (vector double, vector double); int vec_all_ngt (vector float, vector float); VEC_ALL_NLE (ARG1, ARG2) Purpose: Tests whether each element of the first argument is not less than or equal to the corresponding element of the second argument. Result value: The result is 1 if each element of ARG1 is not less than or equal to the corresponding element of ARG2. Otherwise, the result is 0. int vec_all_nle (vector double, vector double); int vec_all_nle (vector float, vector float); VEC_ALL_NLT (ARG1, ARG2) Purpose: Tests whether each element of the first argument is not less than the corresponding element of the second argument. Result value: The result is 1 if each element of ARG1 is not less than the corresponding element of ARG2. Otherwise, the result is 0. int vec_all_nlt (vector double, vector double); int vec_all_nlt (vector float, vector float); VEC_ALL_NUMERIC (ARG1) Purpose: Tests whether each element of the given vector is numeric (not a NaN). Result value: The result is 1 if each element of ARG1 is numeric (not a NaN). Otherwise, the result is 0. int vec_all_numeric (vector double); int vec_all_numeric (vector float); VEC_ANY_EQ (ARG1, ARG2) Purpose: Tests whether any set of corresponding elements of the given vectors is equal. Result value: The result is 1 if any element of ARG1 is equal to the corresponding element of ARG2. Otherwise, the result is 0. int vec_any_eq (vector bool char, vector bool char); int vec_any_eq (vector signed char, vector signed char); int vec_any_eq (vector unsigned char, vector unsigned char); int vec_any_eq (vector bool int, vector bool int); int vec_any_eq (vector signed int, vector signed int); int vec_any_eq (vector unsigned int, vector unsigned int); int vec_any_eq (vector bool long long, vector bool long long); int vec_any_eq (vector signed long long, vector signed long long); int vec_any_eq (vector unsigned long long, vector unsigned long long); int vec_any_eq (vector pixel, vector pixel); int vec_any_eq (vector bool short, vector bool short); int vec_any_eq (vector signed short, vector signed short); int vec_any_eq (vector unsigned short, vector unsigned short); int vec_any_eq (vector double, vector double); int vec_any_eq (vector float, vector float); VEC_ANY_GE (ARG1, ARG2) Purpose: Tests whether any element of the first argument is greater than or equal to the corresponding element of the second argument. Result value: The result is 1 if any element of ARG1 is greater than or equal to the corresponding element of ARG2. Otherwise, the result is 0. int vec_any_ge (vector signed char, vector signed char); int vec_any_ge (vector unsigned char, vector unsigned char); int vec_any_ge (vector signed int, vector signed int); int vec_any_ge (vector unsigned int, vector unsigned int); int vec_any_ge (vector signed long long, vector signed long long); int vec_any_ge (vector unsigned long long, vector unsigned long long); int vec_any_ge (vector signed short, vector signed short); int vec_any_ge (vector unsigned short, vector unsigned short); int vec_any_ge (vector double, vector double); int vec_any_ge (vector float, vector float); VEC_ANY_GT (ARG1, ARG2) Purpose: Tests whether any element of the first argument is greater than the corresponding element of the second argument. Result value: The result is 1 if any element of ARG1 is greater than the corresponding element of ARG2. Otherwise, the result is 0. int vec_any_gt (vector signed char, vector signed char); int vec_any_gt (vector unsigned char, vector unsigned char); int vec_any_gt (vector signed int, vector signed int); int vec_any_gt (vector unsigned int, vector unsigned int); int vec_any_gt (vector signed long long, vector signed long long); int vec_any_gt (vector unsigned long long, vector unsigned long long); int vec_any_gt (vector signed short, vector signed short); int vec_any_gt (vector unsigned short, vector unsigned short); int vec_any_gt (vector double, vector double); int vec_any_gt (vector float, vector float); VEC_ANY_LE (ARG1, ARG2) Purpose: Tests whether any element of the first argument is less than or equal to the corresponding element of the second argument. Result value: The result is 1 if any element of ARG1 is less than or equal to the corresponding element of ARG2. Otherwise, the result is 0. int vec_any_le (vector signed char, vector signed char); int vec_any_le (vector unsigned char, vector unsigned char); int vec_any_le (vector signed int, vector signed int); int vec_any_le (vector unsigned int, vector unsigned int); int vec_any_le (vector signed long long, vector signed long long); int vec_any_le (vector unsigned long long, vector unsigned long long); int vec_any_le (vector signed short, vector signed short); int vec_any_le (vector unsigned short, vector unsigned short); int vec_any_le (vector double, vector double); int vec_any_le (vector float, vector float); VEC_ANY_LT (ARG1, ARG2) Purpose: Tests whether any element of the first argument is less than the corresponding element of the second argument. Result value: The result is 1 if any element of ARG1 is less than the corresponding element of ARG2. Otherwise, the result is 0. int vec_any_lt (vector signed char, vector signed char); int vec_any_lt (vector unsigned char, vector unsigned char); int vec_any_lt (vector signed int, vector signed int); int vec_any_lt (vector unsigned int, vector unsigned int); int vec_any_lt (vector signed long long, vector signed long long); int vec_any_lt (vector unsigned long long, vector unsigned long long); int vec_any_lt (vector signed short, vector signed short); int vec_any_lt (vector unsigned short, vector unsigned short); int vec_any_lt (vector double, vector double); int vec_any_lt (vector float, vector float); VEC_ANY_NAN (ARG1) Purpose: Tests whether any element of the given vector is a NaN. Result value: The result is 1 if any element of ARG1 is a NaN. Otherwise, the result is 0. int vec_any_nan (vector double); int vec_any_nan (vector float); VEC_ANY_NE (ARG1, ARG2) Purpose: Tests whether any set of corresponding elements of the given vectors is not equal. Result value: The result is 1 if any element of ARG1 is not equal to the corresponding element of ARG2. Otherwise, the result is 0. int vec_any_ne (vector bool char, vector bool char); int vec_any_ne (vector signed char, vector signed char); int vec_any_ne (vector unsigned char, vector unsigned char); int vec_any_ne (vector bool int, vector bool int); int vec_any_ne (vector signed int, vector signed int); int vec_any_ne (vector unsigned int, vector unsigned int); int vec_any_ne (vector bool long long, vector bool long long); int vec_any_ne (vector signed long long, vector signed long long); int vec_any_ne (vector unsigned long long, vector unsigned long long); int vec_any_ne (vector pixel, vector pixel); int vec_any_ne (vector bool short, vector bool short); int vec_any_ne (vector signed short, vector signed short); int vec_any_ne (vector unsigned short, vector unsigned short); int vec_any_ne (vector double, vector double); int vec_any_ne (vector float, vector float); VEC_ANY_NGE (ARG1, ARG2) Purpose: Tests whether any element of the first argument is not greater than or equal to the corresponding element of the second argument. Result value: The result is 1 if any element of ARG1 is not greater than or equal to the corresponding element of ARG2. Otherwise, the result is 0. int vec_any_nge (vector double, vector double); int vec_any_nge (vector float, vector float); VEC_ANY_NGT (ARG1, ARG2) Purpose: Tests whether any element of the first argument is not greater than the corresponding element of the second argument. Result value: The result is 1 if any element of ARG1 is not greater than the corresponding element of ARG2. Otherwise, the result is 0. int vec_any_ngt (vector double, vector double); int vec_any_ngt (vector float, vector float); VEC_ANY_NLE (ARG1, ARG2) Purpose: Tests whether any element of the first argument is not less than or equal to the corresponding element of the second argument. Result value: The result is 1 if any element of ARG1 is not less than or equal to the corresponding element of ARG2. Otherwise, the result is 0. int vec_any_nle (vector double, vector double); int vec_any_nle (vector float, vector float); VEC_ANY_NLT (ARG1, ARG2) Purpose: Tests whether any element of the first argument is not less than the corresponding element of the second argument. Result value: The result is 1 if any element of ARG1 is not less than the corresponding element of ARG2. Otherwise, the result is 0. int vec_any_nlt (vector double, vector double); int vec_any_nlt (vector float, vector float); VEC_ANY_NUMERIC (ARG1) Purpose: Tests whether any element of the given vector is numeric (not a NaN). Result value: The result is 1 if any element of ARG1 is numeric (not a NaN). Otherwise, the result is 0. int vec_any_numeric (vector double); int vec_any_numeric (vector float); VEC_ANY_OUT (ARG1, ARG2) Purpose: Tests whether the value of any element of a given vector is outside of a given range. Result value: The result is 1 if the value of any element of ARG1 is greater than the value of the corresponding element of ARG2 or less than the negative of the value of the corresponding element of ARG2. Otherwise, the result is 0. int vec_any_out (vector float, vector float);
Coding Support The following built-in vector operators provide coding support. As suggested by the naming convention with the _be suffix, these operators always operate on the big-endian representation irrespective of the data layout of the execution environment. Thus, both input and output arguments have big-endian data representation, both with respect to the byte ordering of the base data types and the element ordering and numbering of each vector input and output. In accordance with these semantics, when an input or output vector for these operators is accessed, the vec_xl_be and vec_xst_be operators may be used to access vectors with big-endian element ordering regardless of the data layout of the execution environment. Alternatively, in a little-endian environment, big-endian element ordering may be established by using the vec_reve( ) vector operator. In a little-endian environment, big-endian byte order within each element may be established by using the vec_revb( ) vector operator.
Finite Field Arithmetic and Secure Hashing The vector operators listed in provide coding support for Secure Hashing and Finite Field Arithmetic, such as is used in the generation of common cyclic redundancy codes. Because these operators perform a similar operation on all vector elements, it is not necessary to establish a big-endian element order before invoking these operators. However, the byte order for bytes within each element must be established as big-endian. Thus, for example, a SHA computation in a little-endian environment may be performed by using the following sequence: le_result = vec_revb(vec_shasigma_be(vec_revb(le_input), 0, 0)); Built-In Vector Operators for Secure Hashing and Finite Field Arithmetic Group Description of Vector Built-In Operators (with Prototypes) VEC_PMSUM_BE (ARG1, ARG2) Purpose: Performs the exclusive-OR operation (implementing polynomial addition) on each even-odd pair of the polynomial-multiplication result of the corresponding elements. Result value: Each element i of the result vector is computed by an exclusive-OR operation of the polynomial multiplication of input elements 2 × i of ARG1 and ARG2 and input elements 2 × i + 1 of ARG1 and ARG2. Phased in. This optional function is being phased in and it might not be available on all implementations. vector unsigned int vec_pmsum_be (vector unsigned short, vector unsigned short); Phased in. vector unsigned __int128 vec_pmsum_be (vector unsigned long long, vector unsigned long long); Phased in. vector unsigned long long vec_pmsum_be (vector unsigned int, vector unsigned int); Phased in. vector unsigned short vec_pmsum_be (vector unsigned char, vector unsigned char); VEC_SHASIGMA_BE (ARG1, ARG2, ARG3) Purpose: Performs a Secure Hash computation in accordance with Federal Information Processing Standards FIPS-180-3. Result value: Each element of the result vector contains the SHA256 or SHA512 hash as follows. The result of the SHA-256 function is: σ0(x[i]), if ARG2 is 0 and bit i of the 4-bit ARG3 is 0. σ1(x[i]), if ARG2 is 0 and bit i of the 4-bit ARG3 is 1. ∑0(x[i]), if ARG2 is nonzero and bit i of the 4-bit ARG3 is 0. ∑1(x[i]), if ARG2 is nonzero and bit i of the 4-bit ARG3 is 1. The result of the SHA-512 function is: σ0(x[i]), if ARG2 is 0 and bit 2 × i of the 4-bit ARG3 is 0. σ1(x[i]), if ARG2 is 0 and bit 2 × i of the 4-bit ARG3 is 1. ∑0(x[i]), if ARG2 is nonzero and bit 2 × i of the 4-bit ARG3 is 0. ∑1(x[i]), if ARG2 is nonzero and bit 2 × i of the 4-bit ARG3 is 1. Phased in. vector unsigned int vec_shasigma_be (vector unsigned int, const int, const int); Phased in. vector unsigned long long vec_shasigma_be (vector unsigned long long, const int, const int);
Advanced Encryption Standard (FIPS-197) The vector operators listed in provide support for the Advanced Encryption Standard (FIPS-197). Because these operators operate on a byte sequence (represented as vector char), it is not necessary to establish a big-endian byte order within each element before invoking these operators. However, the element order for each vector must be established as big endian. Thus, for example, an SBOX computation in a little-endian environment may be performed by using the following sequence: le_result = vec_reve(vec_sbox(vec_reve(le_input), 0, 0)); Alternatively, the vec_xl_be and vec_xst_be operators may be used to access operands as follows: input = vec_xl_be(0, &le_input); result = vec_sbox(input); vec_xst_be(result,0, &le_result); Built-In Vector Operators for the Advanced Encryption Standard Group Description of Vector Built-In Operators (with Prototypes) VEC_SBOX_BE (ARG1) Purpose: Performs the SubBytes operation, as defined in Federal Information Processing Standards FIPS-197, on a state_array. Result value: Returns the result of the SubBytes operation, as defined in Federal Information Processing Standards FIPS-197, on the state array represented by ARG1. Phased in.This optional function is being phased in and it might not be available on all implementations vector unsigned char vec_sbox_be (vector unsigned char); VEC_CIPHER_BE (ARG1, ARG2) Purpose: Performs one round of the AES cipher operation on an intermediate state state_array by using a given round_key. Result value: Returns the resulting intermediate state, after one round of the AES cipher operation on an intermediate state state_array specified by ARG1, using the round_key specified by ARG2. Phased in. vector unsigned char vec_cipher_be (vector unsigned char, vector unsigned char); VEC_CIPHERLAST_BE (ARG1, ARG2) Purpose: Performs the final round of the AES cipher operation on an intermediate state state_array using the specified round_key. Result value: Returns the resulting final state, after the final round of the AES cipher operation on an intermediate state state_array specified by ARG1, using the round_key specified by ARG2. Phased in. vector unsigned char vec_cipherlast_be (vector unsigned char, vector unsigned char); VEC_NCIPHER_BE (ARG1, ARG2) Purpose: Performs one round of the AES inverse cipher operation on an intermediate state state_array using a given round_key. Result value: Returns the resulting intermediate state, after one round of the AES inverse cipher operation on an intermediate state state_array specified by ARG1, using the round_key specified by ARG2. Phased in. vector unsigned char vec_ncipher_be (vector unsigned char, vector unsigned char); VEC_NCIPHERLAST_BE (ARG1, ARG2) Purpose: Performs the final round of the AES inverse cipher operation on an intermediate state state_array using the specified round_key. Result value: Returns the resulting final state, after the final round of the AES inverse cipher operation on an intermediate state state_array specified by ARG1, using the round_key specified by ARG2. Phased in. vector unsigned char vec_ncipherlast_be (vector unsigned char, vector unsigned char);
VSCR Management Built-in Functions defines built-in functions for reading and writing the Vector Status and Control Register (VSCR). VSCR Management Functions Group Description of VSCR Management Functions (with Prototypes) VEC_MTVSCR (ARG1) Purpose: Copies the given value into the Vector Status and Control Register. The low-order 32 bits of ARG1 are copied into the VSCR. void vec_mtvscr (vector bool char); void vec_mtvscr (vector signed char); void vec_mtvscr (vector unsigned char); void vec_mtvscr (vector bool int); void vec_mtvscr (vector signed int); void vec_mtvscr (vector unsigned int); void vec_mtvscr (vector pixel); void vec_mtvscr (vector bool short); void vec_mtvscr (vector signed short); void vec_mtvscr (vector unsigned short); VEC_MFVSCR Purpose: Copies the contents of the Vector Status and Control Register into the result vector. Result value: The high-order 16 bits of the VSCR are copied into the seventh element of the result. The low-order 16 bits of the VSCR are copied into the eighth element of the result. All other elements are set to zero. vector unsigned short vec_mfvscr (void);
PowerSIMD API Named Constants This section defines constants for use by the PowerSIMD vector programming operators. They may be defined either as macros or as named constants.
Data Classes This section defines constants for use in conjunction with the vec_test_data_class operator. Constants Used with vec_test_data_class Constants #define __VEC_CLASS_FP_INFINITY_P (1<<5) #define __VEC_CLASS_FP_INFINITY_N (1<<4) #define __VEC_CLASS_FP_INFINITY (__VEC_CLASS_FP_INFINITY_P | __VEC_CLASS_FP_INFINITY _N) #define __VEC_CLASS_FP_ZERO_P (1<<3) #define __VEC_CLASS_FP_ZERO_N (1<<2) #define __VEC_CLASS_FP_ZERO (__VEC_CLASS_FP_ZERO_P | __VEC_CLASS_FP_ZERO_N) #define __VEC_CLASS_FP_SUBNORMAL_P (1 << 1) #define __VEC_CLASS_FP_SUBNORMAL_N (1 << 0) #define __VEC_CLASS_FP_SUBNORMAL (__VEC_CLASS_FP_SUBNORMAL_P | __VEC_CLASS_FP_SUBNORMAL_N) #define __VEC_CLASS_FP_NAN (1<<6) #define __VEC_CLASS_FP_NOT_NORMAL (__VEC_CLASS_FP_NAN | __VEC_CLASS_FP_SUBNORMAL | __VEC_CLASS_FP_ZERO | __VEC_CLASS_FP_INFINITY)
Compatibility Functions The following functions should be provided for compatibility with previous versions of the Power SIMD vector environment. Where possible (subject to being supported by all targeted implementations of the Power SIMD environment), the use of type-generic built-in names is recommended. The type-specific vector built-in types are provided for legacy code compatibility only. The functions are deprecated, and support may be discontinued in the future. It is recommended that programmers use the respective overloaded vector built-in functions in conjunction with the appropriate vector type. Functions Provided for Compatibility ISA Level Vector Built-In Function Prototypes vmx vector float vec_vaddfp (vector float, vector float); vmx vector signed char vec_vmaxsb (vector bool char, vector signed char); vmx vector signed char vec_vmaxsb (vector signed char, vector bool char); vmx vector signed char vec_vmaxsb (vector signed char, vector signed char); vsx2 vector signed long long vec_vmaxsd (vector signed long long, vector signed long long); vmx vector signed short vec_vmaxsh (vector bool short, vector signed short); vmx vector signed short vec_vmaxsh (vector signed short, vector bool short); vmx vector signed short vec_vmaxsh (vector signed short, vector signed short); vmx vector signed int vec_vmaxsw (vector bool int, vector signed int); vmx vector signed int vec_vmaxsw (vector signed int, vector bool int); vmx vector signed int vec_vmaxsw (vector signed int, vector signed int); vmx vector signed char vec_vaddsbs (vector bool char, vector signed char); vmx vector signed char vec_vaddsbs (vector signed char, vector bool char); vmx vector signed char vec_vaddsbs (vector signed char, vector signed char); vmx vector signed short vec_vaddshs (vector signed short, vector bool short); vmx vector signed short vec_vaddshs (vector bool short, vector signed short); vmx vector signed short vec_vaddshs (vector signed short, vector signed short); vmx vector signed int vec_vaddsws (vector bool int, vector signed int); vmx vector signed int vec_vaddsws (vector signed int, vector bool int); vmx vector signed int vec_vaddsws (vector signed int, vector signed int); vmx vector signed char vec_vaddubm (vector bool char, vector signed char); vmx vector signed char vec_vaddubm (vector signed char, vector bool char); vmx vector signed char vec_vaddubm (vector signed char, vector signed char); vmx vector unsigned char vec_vaddubm (vector bool char, vector unsigned char); vmx vector unsigned char vec_vaddubm (vector unsigned char, vector bool char); vmx vector unsigned char vec_vaddubm (vector unsigned char, vector unsigned char); vmx vector unsigned char vec_vaddubs (vector bool char, vector unsigned char); vmx vector unsigned char vec_vaddubs (vector unsigned char, vector bool char); vmx vector unsigned char vec_vaddubs (vector unsigned char, vector unsigned char); vsx2 vector signed long long vec_vaddudm (vector bool long long, vector signed long long); vsx2 vector signed long long vec_vaddudm (vector signed long long, vector bool long long); vsx2 vector signed long long vec_vaddudm (vector signed long long, vector signed long long); vsx2 vector unsigned long long vec_vaddudm (vector bool long long, vector unsigned long long); vsx2 vector unsigned long long vec_vaddudm (vector unsigned long long, vector bool long long); vsx2 vector unsigned long long vec_vaddudm (vector unsigned long long, vector unsigned long long); vmx vector signed short vec_vadduhm (vector bool short, vector signed short); vmx vector signed short vec_vadduhm (vector signed short, vector bool short); vmx vector signed short vec_vadduhm (vector signed short, vector signed short); vmx vector unsigned short vec_vadduhm (vector bool short, vector unsigned short); vmx vector unsigned short vec_vadduhm (vector unsigned short, vector bool short); vmx vector unsigned short vec_vadduhm (vector unsigned short, vector unsigned short); vmx vector unsigned short vec_vadduhs (vector bool short, vector unsigned short); vmx vector unsigned short vec_vadduhs (vector unsigned short, vector bool short); vmx vector unsigned short vec_vadduhs (vector unsigned short, vector unsigned short); vmx vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); vmx vector signed int vec_vadduwm (vector bool int, vector signed int); vmx vector signed int vec_vadduwm (vector signed int, vector bool int); vmx vector signed int vec_vadduwm (vector signed int, vector signed int); vmx vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); vmx vector unsigned int vec_vadduwm (vector unsigned int, vector unsigned int); vmx vector unsigned int vec_vadduws (vector bool int, vector unsigned int); vmx vector unsigned int vec_vadduws (vector unsigned int, vector bool int); vmx vector unsigned int vec_vadduws (vector unsigned int, vector unsigned int); vmx vector signed char vec_vavgsb (vector signed char, vector signed char); vmx vector signed short vec_vavgsh (vector signed short, vector signed short); vmx vector signed int vec_vavgsw (vector signed int, vector signed int); vmx vector unsigned char vec_vavgub (vector unsigned char, vector unsigned char); vmx vector unsigned short vec_vavguh (vector unsigned short, vector unsigned short); vmx vector unsigned int vec_vavguw (vector unsigned int, vector unsigned int); vsx2 vector signed char vec_vclzb (vector signed char); vsx2 vector unsigned char vec_vclzb (vector unsigned char); vsx2 vector signed long long vec_vclzd (vector signed long long); vsx2 vector unsigned long long vec_vclzd (vector unsigned long long); vsx2 vector unsigned short vec_vclzh (vector unsigned short); vsx2 vector short vec_vclzh (vector short); vsx2 vector unsigned int vec_vclzw (vector int); vsx2 vector int vec_vclzw (vector int); vmx vector float vec_vcfsx (vector signed int, const int); vmx vector float vec_vcfux (vector unsigned int, const int); vmx vector bool int vec_vcmpeqfp (vector float, vector float); vmx vector bool char vec_vcmpequb (vector signed char, vector signed char); vmx vector bool char vec_vcmpequb (vector unsigned char, vector unsigned char); vmx vector bool short vec_vcmpequh (vector signed short, vector signed short); vmx vector bool short vec_vcmpequh (vector unsigned short, vector unsigned short); vmx vector bool int vec_vcmpequw (vector signed int, vector signed int); vmx vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); vmx vector bool int vec_vcmpgtfp (vector float, vector float); vmx vector bool char vec_vcmpgtsb (vector signed char, vector signed char); vmx vector bool short vec_vcmpgtsh (vector signed short, vector signed short); vmx vector bool short vec_vcmpgtsh (vector signed short, vector signed short); vmx vector bool int vec_vcmpgtsw (vector signed int, vector signed int); vmx vector bool char vec_vcmpgtub (vector unsigned char, vector unsigned char); vmx vector bool short vec_vcmpgtuh (vector unsigned short, vector unsigned short); vmx vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); vmx vector float vec_vmaxfp (vector float, vector float); vmx vector unsigned char vec_vmaxub (vector bool char, vector unsigned char); vmx vector unsigned char vec_vmaxub (vector bool char, vector unsigned char); vmx vector unsigned char vec_vmaxub (vector unsigned char, vector bool char); vmx vector unsigned char vec_vmaxub (vector unsigned char, vector unsigned char); vsx2 vector unsigned long long vec_vmaxud (vector unsigned long long, unsigned vector long long); vmx vector unsigned short vec_vmaxuh (vector bool short, vector unsigned short); vmx vector unsigned short vec_vmaxuh (vector unsigned short, vector bool short); vmx vector unsigned short vec_vmaxuh (vector unsigned short, vector unsigned short); vmx vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); vmx vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); vmx vector unsigned int vec_vmaxuw (vector unsigned int, vector unsigned int); vmx vector float vec_vminfp (vector float, vector float); vmx vector signed char vec_vminsb (vector bool char, vector signed char); vmx vector signed char vec_vminsb (vector signed char, vector bool char); vmx vector signed char vec_vminsb (vector signed char, vector signed char); vsx2 vector signed long long vec_vminsd (vector signed long long, vector signed long long); vmx vector signed short vec_vminsh (vector bool short, vector signed short); vmx vector signed short vec_vminsh (vector signed short, vector bool short); vmx vector signed short vec_vminsh (vector signed short, vector signed short); vmx vector signed int vec_vminsw (vector bool int, vector signed int); vmx vector signed int vec_vminsw (vector signed int, vector bool int); vmx vector signed int vec_vminsw (vector signed int, vector signed int); vmx vector unsigned char vec_vminub (vector bool char, vector unsigned char); vmx vector unsigned char vec_vminub (vector unsigned char, vector bool char); vmx vector unsigned char vec_vminub (vector unsigned char, vector unsigned char); vsx2 vector unsigned long long vec_vminud (vector unsigned long long, vector unsigned long long); vmx vector unsigned short vec_vminuh (vector bool short, vector unsigned short); vmx vector unsigned short vec_vminuh (vector unsigned short, vector bool short); vmx vector unsigned short vec_vminuh (vector unsigned short, vector unsigned short); vmx vector unsigned int vec_vminuw (vector bool int, vector unsigned int); vmx vector unsigned int vec_vminuw (vector unsigned int, vector bool int); vmx vector unsigned int vec_vminuw (vector unsigned int, vector unsigned int); vmx vector float vec_vsubfp (vector float, vector float); vsx vector bool int vec_vcmpeqdp (vector double, vector double); vsx vector bool int vec_vcmpgtdp (vector double, vector double); vmx vector bool char vec_vmrghb (vector bool char, vector bool char); vmx vector signed char vec_vmrghb (vector signed char, vector signed char); vmx vector unsigned char vec_vmrghb (vector unsigned char, vector unsigned char); vmx vector bool short vec_vmrghh (vector bool short, vector bool short); vmx vector signed short vec_vmrghh (vector signed short, vector signed short); vmx vector unsigned short vec_vmrghh (vector unsigned short, vector unsigned short); vmx vector pixel vec_vmrghh (vector pixel, vector pixel); vmx vector bool int vec_vmrghw (vector bool int, vector bool int); vmx vector signed int vec_vmrghw (vector signed int, vector signed int); vmx vector unsigned int vec_vmrghw (vector unsigned int, vector unsigned int); vmx vector float vec_vmrghw (vector float, vector float); vmx vector bool char vec_vmrglb (vector bool char, vector bool char); vmx vector signed char vec_vmrglb (vector signed char, vector signed char); vmx vector unsigned char vec_vmrglb (vector unsigned char, vector unsigned char); vmx vector bool short vec_vmrglh (vector bool short, vector bool short); vmx vector signed short vec_vmrglh (vector signed short, vector signed short); vmx vector unsigned short vec_vmrglh (vector unsigned short, vector unsigned short); vmx vector pixel vec_vmrglh (vector pixel, vector pixel); vmx vector bool int vec_vmrglw (vector bool int, vector bool int); vmx vector signed int vec_vmrglw (vector signed int, vector signed int); vmx vector unsigned int vec_vmrglw (vector unsigned int, vector unsigned int); vmx vector float vec_vmrglw (vector float, vector float); vmx vector signed int vec_vmsummbm (vector signed char, vector unsigned char, vector signed int); vmx vector signed int vec_vmsumshm (vector signed short, vector signed short, vector signed int); vmx vector signed int vec_vmsumshs (vector signed short, vector signed short, vector signed int); vmx vector unsigned int vec_vmsumubm (vector unsigned char, vector unsigned char, vector unsigned int); vmx vector unsigned int vec_vmsumuhm (vector unsigned short, vector unsigned short, vector unsigned int); vmx vector unsigned int vec_vmsumuhs (vector unsigned short, vector unsigned short, vector unsigned int); vmx vector signed short vec_vmulesb (vector signed char, vector signed char); vmx vector signed int vec_vmulesh (vector signed short, vector signed short); vmx vector unsigned short vec_vmuleub (vector unsigned char, vector unsigned char); vmx vector unsigned int vec_vmuleuh (vector unsigned short, vector unsigned short); vmx vector signed short vec_vmulosb (vector signed char, vector signed char); vmx vector signed int vec_vmulosh (vector signed short, vector signed short); vmx vector unsigned short vec_vmuloub (vector unsigned char, vector unsigned char); vmx vector unsigned int vec_vmulouh (vector unsigned short, vector unsigned short); vsx2 vector unsigned int vec_vpksdss (vector unsigned long long, vector unsigned long long); vsx2 vector int vec_vpksdss (vector signed long long, vector signed long long); vmx vector signed char vec_vpkshss (vector signed short, vector signed short); vmx vector unsigned char vec_vpkshus (vector signed short, vector signed short); vmx vector signed short vec_vpkswss (vector signed int, vector signed int); vmx vector unsigned short vec_vpkswus (vector signed int, vector signed int); vsx2 vector bool int vec_vpkudum (vector bool long long, vector bool long long); vsx2 vector unsigned int vec_vpkudum (vector unsigned long long, vector unsigned long long); vsx2 vector int vec_vpkudum (vector signed long long, vector signed long long); vsx2 vector unsigned int vec_vpkudus (vector unsigned long long, vector unsigned long long); vmx vector bool char vec_vpkuhum (vector bool short, vector bool short); vmx vector signed char vec_vpkuhum (vector signed short, vector signed short); vmx vector unsigned char vec_vpkuhum (vector unsigned short, vector unsigned short); vmx vector unsigned char vec_vpkuhus (vector unsigned short, vector unsigned short); vmx vector bool short vec_vpkuwum (vector bool int, vector bool int); vmx vector signed short vec_vpkuwum (vector signed int, vector signed int); vmx vector unsigned short vec_vpkuwum (vector unsigned int, vector unsigned int); vmx vector unsigned short vec_vpkuwus (vector unsigned int, vector unsigned int); vsx2 vector signed char vec_vpopcnt (vector signed char); vsx2 vector unsigned char vec_vpopcnt (vector unsigned char); vsx2 vector unsigned int vec_vpopcnt (vector int); vsx2 vector signed long long vec_vpopcnt (vector signed long long); vsx2 vector unsigned long long vec_vpopcnt (vector unsigned long long); vsx2 vector unsigned short vec_vpopcnt (vector unsigned short); vsx2 vector int vec_vpopcnt (vector int); vsx2 vector short vec_vpopcnt (vector short); vsx2 vector signed char vec_vpopcntb (vector signed char); vsx2 vector unsigned char vec_vpopcntb (vector unsigned char); vsx2 vector signed long long vec_vpopcntd (vector signed long long); vsx2 vector unsigned long long vec_vpopcntd (vector unsigned long long); vsx2 vector unsigned short vec_vpopcnth (vector unsigned short); vsx2 vector short vec_vpopcnth (vector short); vsx2 vector unsigned int vec_vpopcntw (vector unsigned int); vsx2 vector int vec_vpopcntw (vector int); vmx vector signed char vec_vrlb (vector signed char, vector unsigned char); vmx vector unsigned char vec_vrlb (vector unsigned char, vector unsigned char); vsx2 vector signed long long vec_vrld (vector signed long long, vector unsigned long long); vsx2 vector unsigned long long vec_vrld (vector unsigned long long, vector unsigned long long); vmx vector signed short vec_vrlh (vector signed short, vector unsigned short); vmx vector unsigned short vec_vrlh (vector unsigned short, vector unsigned short); vmx vector signed int vec_vrlw (vector signed int, vector unsigned int); vmx vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); vmx vector signed char vec_vslb (vector signed char, vector unsigned char); vmx vector unsigned char vec_vslb (vector unsigned char, vector unsigned char); vsx2 vector signed long long vec_vsld (vector signed long long, vector unsigned long long); vsx2 vector signed long long vec_vsld (vector unsigned long long, vector unsigned long long); vmx vector signed short vec_vslh (vector signed short, vector unsigned short); vmx vector unsigned short vec_vslh (vector unsigned short, vector unsigned short); vmx vector signed int vec_vslw (vector signed int, vector unsigned int); vmx vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); vmx vector bool char vec_vspltb (vector bool char, const int); vmx vector signed char vec_vspltb (vector signed char, const int); vmx vector unsigned char vec_vspltb (vector unsigned char, const int); vmx vector bool short vec_vsplth (vector bool short, const int); vmx vector signed short vec_vsplth (vector signed short, const int); vmx vector unsigned short vec_vsplth (vector unsigned short, const int); vmx vector pixel vec_vsplth (vector pixel, const int); vmx vector bool int vec_vspltw (vector bool int, const int); vmx vector signed int vec_vspltw (vector signed int, const int); vmx vector unsigned int vec_vspltw (vector unsigned int, const int); vmx vector float vec_vspltw (vector float, const int); vmx vector signed char vec_vsrab (vector signed char, vector unsigned char); vmx vector unsigned char vec_vsrab (vector unsigned char, vector unsigned char); vsx2 vector signed long long vec_vsrad (vector signed long long, vector unsigned long long); vsx2 vector unsigned long long vec_vsrad (vector unsigned long long, vector unsigned long long); vmx vector signed short vec_vsrah (vector signed short, vector unsigned short); vmx vector unsigned short vec_vsrah (vector unsigned short, vector unsigned short); vmx vector signed int vec_vsraw (vector signed int, vector unsigned int); vmx vector unsigned int vec_vsraw (vector unsigned int, vector unsigned int); vmx vector signed char vec_vsrb (vector signed char, vector unsigned char); vmx vector unsigned char vec_vsrb (vector unsigned char, vector unsigned char); vsx2 vector signed long long vec_vsrd (vector signed long long, vector unsigned long long); vsx2 vector unsigned long long vec_vsrd (vector unsigned long long, vector unsigned long long); vmx vector signed short vec_vsrh (vector signed short, vector unsigned short); vmx vector unsigned short vec_vsrh (vector unsigned short, vector unsigned short); vmx vector signed int vec_vsrw (vector signed int, vector unsigned int); vmx vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); vmx vector signed char vec_vsubsbs (vector bool char, vector signed char); vmx vector signed char vec_vsubsbs (vector signed char, vector bool char); vmx vector signed char vec_vsubsbs (vector signed char, vector signed char); vmx vector signed short vec_vsubshs (vector bool short, vector signed short); vmx vector signed short vec_vsubshs (vector signed short, vector bool short); vmx vector signed short vec_vsubshs (vector signed short, vector signed short); vmx vector signed int vec_vsubsws (vector bool int, vector signed int); vmx vector signed int vec_vsubsws (vector signed int, vector bool int); vmx vector signed int vec_vsubsws (vector signed int, vector signed int); vmx vector signed char vec_vsububm (vector bool char, vector signed char); vmx vector signed char vec_vsububm (vector signed char, vector bool char); vmx vector signed char vec_vsububm (vector signed char, vector signed char); vmx vector unsigned char vec_vsububm (vector bool char, vector unsigned char); vmx vector unsigned char vec_vsububm (vector unsigned char, vector bool char); vmx vector unsigned char vec_vsububm (vector unsigned char, vector unsigned char); vmx vector unsigned char vec_vsububs (vector bool char, vector unsigned char); vmx vector unsigned char vec_vsububs (vector unsigned char, vector bool char); vmx vector unsigned char vec_vsububs (vector unsigned char, vector unsigned char); vsx2 vector signed long long vec_vsubudm (vector bool long long, vector signed long long); vsx2 vector signed long long vec_vsubudm (vector signed long long, vector bool long long); vsx2 vector signed long long vec_vsubudm (vector signed long long, vector signed long long); vsx2 vector unsigned long long vec_vsubudm (vector bool long long, vector unsigned long long); vsx2 vector unsigned long long vec_vsubudm (vector unsigned long long, vector bool long long); vsx2 vector unsigned long long vec_vsubudm (vector unsigned long long, vector unsigned long long); vmx vector signed short vec_vsubuhm (vector bool short, vector signed short); vmx vector signed short vec_vsubuhm (vector signed short, vector bool short); vmx vector signed short vec_vsubuhm (vector signed short, vector signed short); vmx vector unsigned short vec_vsubuhm (vector bool short, vector unsigned short); vmx vector unsigned short vec_vsubuhm (vector unsigned short, vector bool short); vmx vector unsigned short vec_vsubuhm (vector unsigned short, vector unsigned short); vmx vector unsigned short vec_vsubuhs (vector bool short, vector unsigned short); vmx vector unsigned short vec_vsubuhs (vector unsigned short, vector bool short); vmx vector unsigned short vec_vsubuhs (vector unsigned short, vector unsigned short); vmx vector signed int vec_vsubuwm (vector bool int, vector signed int); vmx vector signed int vec_vsubuwm (vector signed int, vector bool int); vmx vector signed int vec_vsubuwm (vector signed int, vector signed int); vmx vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); vmx vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); vmx vector unsigned int vec_vsubuwm (vector unsigned int, vector unsigned int); vmx vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); vmx vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); vmx vector unsigned int vec_vsubuws (vector unsigned int, vector unsigned int); vmx vector signed int vec_vsum4sbs (vector signed char, vector signed int); vmx vector signed int vec_vsum4shs (vector signed short, vector signed int); vmx vector unsigned int vec_vsum4ubs (vector unsigned char, vector unsigned int); vmx vector unsigned int vec_vupkhpx (vector pixel); vmx vector bool short vec_vupkhsb (vector bool char); vmx vector signed short vec_vupkhsb (vector signed char); vmx vector bool int vec_vupkhsh (vector bool short); vmx vector signed int vec_vupkhsh (vector signed short); vsx2 vector signed long long vec_vupkhsw (vector int); vsx2 vector unsigned long long vec_vupkhsw (vector unsigned int); vmx vector unsigned int vec_vupklpx (vector pixel); vmx vector bool short vec_vupklsb (vector bool char); vmx vector signed short vec_vupklsb (vector signed char); vmx vector bool int vec_vupklsh (vector bool short); vmx vector signed int vec_vupklsh (vector signed short); vsx2 vector signed long long vec_vupklsw (vector signed int); vsx2 vector unsigned long long vec_vupklsw (vector unsigned int);
Deprecated Functions lists the deprecated Power SIMD interfaces. lists the deprecated predicates. As in , functions are listed alphabetically; supported prototypes are provided for each function. Prototypes are grouped by integer and floating-point types. Within each group, types are sorted alphabetically, first by type name and then by modifier. Prototypes are first sorted by the built-in result type, which is the output argument. Then, prototypes are sorted by the input arguments; ARG1, ARG2, and ARG3; in order. See for the format of the prototypes. Developers should consult their compiler's documentation to determine which of these functions are provided because each compiler may implement a different subset (or none) of the functions specified in and . Deprecated Power SIMD Interfaces Group Description of Deprecated POWER SIMD Prototypes VEC_ADD (ARG1, ARG2) Purpose: Returns a vector containing the sums of each set of corresponding elements of the given vectors. Result value: The value of each element of the result is the sum of the corresponding elements of ARG1 and ARG2. For signed and unsigned integers, modular arithmetic is used. vector signed char vec_add (vector bool char, vector signed char); vector signed char vec_add (vector signed char, vector bool char); vector unsigned char vec_add (vector bool char, vector unsigned char); vector unsigned char vec_add (vector unsigned char, vector bool char); vector signed int vec_add (vector bool int, vector signed int); vector signed int vec_add (vector signed int, vector bool int); vector unsigned int vec_add (vector bool int, vector unsigned int); vector unsigned int vec_add (vector unsigned int, vector bool int); vector signed short vec_add (vector bool short, vector signed short); vector signed short vec_add (vector signed short, vector bool short); vector unsigned short vec_add (vector bool short, vector unsigned short); vector unsigned short vec_add (vector unsigned short, vector bool short); VEC_ADDS (ARG1, ARG2) Purpose: Returns a vector containing the saturated sums of each set of corresponding elements of the given vectors. Result value: The value of each element of the result is the saturated sum of the corresponding elements of ARG1 and ARG2. vector signed char vec_adds (vector bool char, vector signed char); vector signed char vec_adds (vector signed char, vector bool char); vector unsigned char vec_adds (vector bool char, vector unsigned char); vector unsigned char vec_adds (vector unsigned char, vector bool char); vector signed int vec_adds (vector bool int, vector signed int); vector signed int vec_adds (vector signed int, vector bool int); vector unsigned int vec_adds (vector bool int, vector unsigned int); vector unsigned int vec_adds (vector unsigned int, vector bool int); vector signed short vec_adds (vector bool short, vector signed short); vector signed short vec_adds (vector signed short, vector bool short); vector unsigned short vec_adds (vector bool short, vector unsigned short); vector unsigned short vec_adds (vector unsigned short, vector bool short); VEC_AND (ARG1, ARG2) Purpose: Performs a bitwise AND of the given vectors. Result value: The result is the bitwise AND of ARG1 and ARG2. vector signed char vec_and (vector bool char, vector signed char); vector signed char vec_and (vector signed char, vector bool char); vector unsigned char vec_and (vector bool char, vector unsigned char); vector unsigned char vec_and (vector unsigned char, vector bool char); vector signed int vec_and (vector bool int, vector signed int); vector signed int vec_and (vector signed int, vector bool int); vector unsigned int vec_and (vector bool int, vector unsigned int); vector unsigned int vec_and (vector unsigned int, vector bool int); Optional vector signed long long vec_and (vector bool long long, vector signed long long); Optional vector signed long long vec_and (vector signed long long, vector bool long long); Optional vector unsigned long long vec_and (vector bool long long, vector unsigned long long); Optional vector unsigned long long vec_and (vector unsigned long long, vector bool long long); vector signed short vec_and (vector bool short, vector signed short); vector signed short vec_and (vector signed short, vector bool short); vector unsigned short vec_and (vector bool short, vector unsigned short); vector unsigned short vec_and (vector unsigned short, vector bool short); vector double vec_and (vector bool long long, vector double); vector double vec_and (vector double, vector bool long long); vector float vec_and (vector bool int, vector float); vector float vec_and (vector float, vector bool int); VEC_ANDC (ARG1, ARG2) Purpose: Performs a bitwise AND of the first argument and the bitwise complement of the second argument. Result value: The result is the bitwise AND of ARG1 with the bitwise complement of ARG2. vector signed char vec_andc (vector bool char, vector signed char); vector signed char vec_andc (vector signed char, vector bool char); vector unsigned char vec_andc (vector bool char, vector unsigned char); vector unsigned char vec_andc (vector unsigned char, vector bool char); vector signed int vec_andc (vector bool int, vector signed int); vector signed int vec_andc (vector signed int, vector bool int); vector unsigned int vec_andc (vector bool int, vector unsigned int); vector unsigned int vec_andc (vector unsigned int, vector bool int); Optional vector signed long long vec_andc (vector bool long long, vector signed long long); Optional vector signed long long vec_andc (vector signed long long, vector bool long long); Optional vector unsigned long long vec_andc (vector bool long long, vector unsigned long long); Optional vector unsigned long long vec_andc (vector unsigned long long, vector bool long long); vector signed short vec_andc (vector bool short, vector signed short); vector signed short vec_andc (vector signed short, vector bool short); vector unsigned short vec_andc (vector bool short, vector unsigned short); vector unsigned short vec_andc (vector unsigned short, vector bool short); vector double vec_andc (vector bool long long, vector double); vector double vec_andc (vector double, vector bool long long); vector float vec_andc (vector bool int, vector float); vector float vec_andc (vector float, vector bool int); VEC_EQV (ARG1, ARG2) Purpose: Performs a bitwise XNOR of the given vectors. Result value: The result is the bitwise XNOR of ARG1 and ARG2. vector signed char vec_eqv (vector bool char, vector signed char); vector signed char vec_eqv (vector signed char, vector bool char); vector unsigned char vec_eqv (vector bool char, vector unsigned char); vector unsigned char vec_eqv (vector unsigned char, vector bool char); vector signed int vec_eqv (vector bool int, vector signed int); vector signed int vec_eqv (vector signed int, vector bool int); vector unsigned int vec_eqv (vector bool int, vector unsigned int); vector unsigned int vec_eqv (vector unsigned int, vector bool int); vector signed long long vec_eqv (vector bool long long, vector signed long long); vector signed long long vec_eqv (vector signed long long, vector bool long long); vector unsigned long long vec_eqv (vector bool long long, vector unsigned long long); vector unsigned long long vec_eqv (vector unsigned long long, vector bool long long); vector signed short vec_eqv (vector bool short, vector signed short); vector signed short vec_eqv (vector signed short, vector bool short); vector unsigned short vec_eqv (vector bool short, vector unsigned short); vector unsigned short vec_eqv (vector unsigned short, vector bool short); VEC_INSERT (ARG1, ARG2, ARG3) Purpose: Returns a copy of vector ARG2 with element ARG3 replaced by the value of ARG1. Result value: A copy of vector ARG2 with element ARG3 replaced by the value of ARG1. This function uses modular arithmetic on ARG3 to determine the element number. For example, if ARG3 is out of range, the compiler uses ARG3 modulo the number of elements in the vector to determine the element position. vector bool char vec_insert (unsigned char, vector bool char, signed int); vector bool int vec_insert (unsigned int, vector bool int, signed int); vector bool long long vec_insert (unsigned long long, vector bool long long, signed int); vector bool short vec_insert (unsigned short, vector bool short, signed int); VEC_MAX (ARG1, ARG2) Purpose Returns a vector containing the maximum value from each set of corresponding elements of the given vectors. Result value The value of each element of the result is the maximum of the values of the corresponding elements of ARG1 and ARG2. vector signed char vec_max (vector bool char, vector signed char); vector signed char vec_max (vector signed char, vector bool char); vector unsigned char vec_max (vector bool char, vector unsigned char); vector unsigned char vec_max (vector unsigned char, vector bool char); vector signed int vec_max (vector bool int, vector signed int); vector signed int vec_max (vector signed int, vector bool int); vector unsigned int vec_max (vector bool int, vector unsigned int); vector unsigned int vec_max (vector unsigned int, vector bool int); vector signed long long vec_max (vector bool long long, vector signed long long); vector signed long long vec_max (vector signed long long, vector bool long long); vector unsigned long long vec_max (vector bool long long, vector unsigned long long); vector unsigned long long vec_max (vector unsigned long long, vector bool long long); vector signed short vec_max (vector bool short, vector signed short); vector signed short vec_max (vector signed short, vector bool short); vector unsigned short vec_max (vector bool short, vector unsigned short); vector unsigned short vec_max (vector unsigned short, vector bool short); VEC_MERGEH (ARG1, ARG2) Purpose: Merges the most-significant halves of two vectors. Result value: Assume that the elements of each vector are numbered beginning with 0. The even-numbered elements of the result are taken, in order, from the elements in the most-significant 8 bytes of ARG1. The odd-numbered elements of the result are taken, in order, from the elements in the most-significant 8 bytes of ARG2. Optional vector signed long long vec_mergeh (vector bool long long, vector signed long long); Optional vector signed long long vec_mergeh (vector signed long long, vector bool long long); Optional vector unsigned long long vec_mergeh (vector bool long long, vector unsigned long long); Optional vector unsigned long long vec_mergeh (vector unsigned long long, vector bool long long); VEC_MERGEL (ARG1, ARG2) Purpose: Merges the least-significant halves of two vectors. Result value: Assume that the elements of each vector are numbered beginning with 0. The even-numbered elements of the result are taken, in order, from the elements in the least-significant 8 bytes of ARG1. The odd-numbered elements of the result are taken, in order, from the elements in the least-significant 8 bytes of ARG2. Optional vector signed long long vec_mergel (vector bool long long, vector signed long long); Optional vector signed long long vec_mergel (vector signed long long, vector bool long long); Optional vector unsigned long long vec_mergel (vector bool long long, vector unsigned long long); Optional vector unsigned long long vec_mergel (vector unsigned long long, vector bool long long); VEC_MIN (ARG1, ARG2) Purpose: Returns a vector containing the minimum value from each set of corresponding elements of the given vectors. Result value: The value of each element of the result is the minimum of the values of the corresponding elements of ARG1 and ARG2. vector signed char vec_min (vector bool char, vector signed char); vector signed char vec_min (vector signed char, vector bool char); vector unsigned char vec_min (vector bool char, vector unsigned char); vector unsigned char vec_min (vector unsigned char, vector bool char); vector signed int vec_min (vector bool int, vector signed int); vector signed int vec_min (vector signed int, vector bool int); vector unsigned int vec_min (vector bool int, vector unsigned int); vector unsigned int vec_min (vector unsigned int, vector bool int); vector signed long long vec_min (vector signed long long, vector bool long long); vector signed long long vec_min (vector bool long long, vector signed long long); vector unsigned long long vec_min (vector unsigned long long, vector bool long long); vector unsigned long long vec_min (vector bool long long, vector unsigned long long); vector signed short vec_min (vector bool short, vector signed short); vector signed short vec_min (vector signed short, vector bool short); vector unsigned short vec_min (vector bool short, vector unsigned short); vector unsigned short vec_min (vector unsigned short, vector bool short); VEC_MLADD (ARG1, ARG2, ARG3) Purpose: Returns a vector containing the results of performing a multiply-low-and-add operation for each corresponding set of elements of the given vectors. Result value: The value of each element of the result is the value of the least-significant 16 bits of the product of the values of the corresponding elements of ARG1 and ARG2, added to the value of the corresponding element of ARG3. The addition is performed using modular arithmetic. vector signed short vec_mladd (vector signed short, vector signed short, vector signed short); vector signed short vec_mladd (vector signed short, vector unsigned short, vector unsigned short); vector signed short vec_mladd (vector unsigned short, vector signed short, vector signed short); vector unsigned short vec_mladd (vector unsigned short, vector unsigned short, vector unsigned short); VEC_NAND (ARG1, ARG2) Purpose: Performs a bitwise NAND of the given vectors. Result value: The result is the bitwise NAND of ARG1 and ARG2. vector signed char vec_nand (vector bool char, vector signed char); vector signed char vec_nand (vector signed char, vector bool char); vector unsigned char vec_nand (vector bool char, vector unsigned char); vector unsigned char vec_nand (vector unsigned char, vector bool char); vector signed int vec_nand (vector bool int, vector int); vector signed int vec_nand (vector signed int, vector bool int); vector unsigned int vec_nand (vector bool int, vector unsigned int); vector unsigned int vec_nand (vector unsigned int, vector bool int); vector signed long long vec_nand (vector bool long long, vector signed long long); vector signed long long vec_nand (vector signed long long, vector bool long long); vector unsigned long long vec_nand (vector bool long long, vector unsigned long long); vector unsigned long long vec_nand (vector unsigned long long, vector bool long long); vector signed short vec_nand (vector bool short, vector signed short); vector signed short vec_nand (vector signed short, vector bool short); vector unsigned short vec_nand (vector bool short, vector unsigned short); vector unsigned short vec_nand (vector unsigned short, vector bool short); VEC_NOR (ARG1, ARG2) Purpose: Performs a bitwise NOR of the given vectors. Result value: The result is the bitwise NOR of ARG1 and ARG2. Optional vector signed long long vec_nor (vector bool long long, vector signed long long); Optional vector signed long long vec_nor (vector signed long long, vector bool long long); Optional vector unsigned long long vec_nor (vector bool long long, vector unsigned long long); Optional vector unsigned long long vec_nor (vector unsigned long long, vector bool long long); VEC_OR (ARG1, ARG2) Purpose: Performs a bitwise OR of the given vectors. Result value: The result is the bitwise OR of ARG1 and ARG2. vector signed char vec_or (vector bool char, vector signed char); vector signed char vec_or (vector signed char, vector bool char); vector unsigned char vec_or (vector bool char, vector unsigned char); vector unsigned char vec_or (vector unsigned char, vector bool char); vector signed int vec_or (vector bool int, vector signed int); vector signed int vec_or (vector signed int, vector bool int); vector unsigned int vec_or (vector bool int, vector unsigned int); vector unsigned int vec_or (vector unsigned int, vector bool int); Optional vector signed long long vec_or (vector bool long long, vector signed long long); Optional vector signed long long vec_or (vector signed long long, vector bool long long); Optional vector unsigned long long vec_or (vector bool long long, vector unsigned long long); Optional vector unsigned long long vec_or (vector unsigned long long, vector bool long long); vector signed short vec_or (vector bool short, vector signed short); vector signed short vec_or (vector signed short, vector bool short); vector unsigned short vec_or (vector bool short, vector unsigned short); vector unsigned short vec_or (vector unsigned short, vector bool short); vector double vec_or (vector bool long long, vector double); vector double vec_or (vector double, vector bool long long); vector float vec_or (vector bool int, vector float); vector float vec_or (vector float, vector bool int); VEC_ORC (ARG1, ARG2) Purpose: Performs a bitwise OR of the first vector with the negated second vector. Result value: The result is the bitwise OR of ARG1 and the bitwise negation of ARG2. vector signed char vec_orc (vector bool char, vector signed char); vector signed char vec_orc (vector signed char, vector bool char); vector unsigned char vec_orc (vector bool char, vector unsigned char); vector unsigned char vec_orc (vector unsigned char, vector bool char); vector signed int vec_orc (vector bool int, vector signed int); vector signed int vec_orc (vector int signed int, vector bool int); vector unsigned int vec_orc (vector bool int, vector unsigned int); vector unsigned int vec_orc (vector unsigned int, vector bool int); vector signed long long vec_orc (vector bool long long, vector signed long long); vector signed long long vec_orc (vector signed long long, vector bool long long); vector unsigned long long vec_orc (vector bool long long, vector unsigned long long); vector unsigned long long vec_orc (vector unsigned long long, vector bool long long); vector signed short vec_orc (vector bool short, vector signed short); vector signed short vec_orc (vector signed short, vector bool short); vector unsigned short vec_orc (vector bool short, vector unsigned short); vector unsigned short vec_orc (vector unsigned short, vector bool short); vector double vec_orc (vector bool long long, vector double); vector double vec_orc (vector double, vector bool long long); vector float vec_orc (vector bool int, vector float); vector float vec_orc (vector float, vector bool int); VEC_SEL (ARG1, ARG2, ARG3) Purpose: Returns a vector containing the value of either ARG1 or ARG2 depending on the value of ARG3. Result value: Each bit of the result vector has the value of the corresponding bit of ARG1 if the corresponding bit of ARG3 is 0. Otherwise, each bit of the result vector has the value of the corresponding bit of ARG2. vector double vec_sel (vector double, vector double, vector unsigned long long); VEC_SLL (ARG1, ARG2) Purpose: Left shifts a vector by a given number of bits. Result value: The result is the contents of ARG1, shifted left by the number of bits specified by the three least-significant bits of ARG2. The bits that are shifted out are replaced by zeros. The shift count must have been replicated into all bytes of the shift count specification. vector bool char vec_sll (vector bool char, vector unsigned char); vector bool char vec_sll (vector bool char, vector unsigned int); vector bool char vec_sll (vector bool char, vector unsigned short); vector signed char vec_sll (vector signed char, vector unsigned int); vector signed char vec_sll (vector signed char, vector unsigned short); vector unsigned char vec_sll (vector unsigned char, vector unsigned int); vector unsigned char vec_sll (vector unsigned char, vector unsigned short); vector bool int vec_sll (vector bool int, vector unsigned char); vector bool int vec_sll (vector bool int, vector unsigned int); vector bool int vec_sll (vector bool int, vector unsigned short); vector signed int vec_sll (vector signed int, vector unsigned int); vector signed int vec_sll (vector signed int, vector unsigned short); vector unsigned int vec_sll (vector unsigned int, vector unsigned int); vector unsigned int vec_sll (vector unsigned int, vector unsigned short); vector bool long long vec_sll (vector bool long long, vector unsigned char); vector bool long long vec_sll (vector bool long long, vector unsigned long long); vector bool long long vec_sll (vector bool long long, vector unsigned short); vector signed long long vec_sll (vector signed long long, vector unsigned long long); vector signed long long vec_sll (vector signed long long, vector unsigned short); vector unsigned long long vec_sll (vector unsigned long long, vector unsigned long long); vector unsigned long long vec_sll (vector unsigned long long, vector unsigned short); vector pixel vec_sll (vector pixel, vector unsigned int); vector pixel vec_sll (vector pixel, vector unsigned short); vector bool short vec_sll (vector bool short, vector unsigned char); vector bool short vec_sll (vector bool short, vector unsigned int); vector bool short vec_sll (vector bool short, vector unsigned short); vector signed short vec_sll (vector signed short, vector unsigned int); vector signed short vec_sll (vector signed short, vector unsigned short); vector unsigned short vec_sll (vector unsigned short, vector unsigned int); vector unsigned short vec_sll (vector unsigned short, vector unsigned short); VEC_SRL (ARG1, ARG2) Purpose: Right shifts a vector by a given number of bits. Result value: The result is the contents of ARG1, shifted right by the number of bits specified by the 3 least-significant bits of ARG2. The bits that are shifted out are replaced by zeros. The shift count must have been replicated into all bytes of the shift count specification. vector bool char vec_srl (vector bool char, vector unsigned char); vector bool char vec_srl (vector bool char, vector unsigned int); vector bool char vec_srl (vector bool char, vector unsigned short); vector signed char vec_srl (vector signed char, vector unsigned int); vector signed char vec_srl (vector signed char, vector unsigned short); vector unsigned char vec_srl (vector unsigned char, vector unsigned int); vector unsigned char vec_srl (vector unsigned char, vector unsigned short); vector bool int vec_srl (vector bool int, vector unsigned char); vector bool int vec_srl (vector bool int, vector unsigned int); vector bool int vec_srl (vector bool int, vector unsigned short); vector signed int vec_srl (vector signed int, vector unsigned int); vector signed int vec_srl (vector signed int, vector unsigned short); vector unsigned int vec_srl (vector unsigned int, vector unsigned int); vector unsigned int vec_srl (vector unsigned int, vector unsigned short); vector signed long long vec_srl (vector signed long long, vector unsigned long long); vector signed long long vec_srl (vector signed long long, vector unsigned short); vector unsigned long long vec_srl (vector unsigned long long, vector unsigned long long); vector unsigned long long vec_srl (vector unsigned long long, vector unsigned short); vector pixel vec_srl (vector pixel, vector unsigned int); vector pixel vec_srl (vector pixel, vector unsigned short); vector bool short vec_srl (vector bool short, vector unsigned char); vector bool short vec_srl (vector bool short, vector unsigned int); vector bool short vec_srl (vector bool short, vector unsigned short); vector signed short vec_srl (vector signed short, vector unsigned int); vector signed short vec_srl (vector signed short, vector unsigned short); vector unsigned short vec_srl (vector unsigned short, vector unsigned int); vector unsigned short vec_srl (vector unsigned short, vector unsigned short); VEC_SUB (ARG1, ARG2) Purpose: Returns a vector containing the result of subtracting each element of ARG2 from the corresponding element of ARG1. This function emulates the operation on long long vectors. Result value: The value of each element of the result is the result of subtracting the value of the corresponding element of ARG2 from the value of the corresponding element of ARG1. The arithmetic is modular for integer vectors. vector signed char vec_sub (vector bool char, vector signed char); vector signed char vec_sub (vector signed char, vector bool char); vector unsigned char vec_sub (vector bool char, vector unsigned char); vector unsigned char vec_sub (vector unsigned char, vector bool char); vector signed int vec_sub (vector bool int, vector signed int); vector signed int vec_sub (vector signed int, vector bool int); vector unsigned int vec_sub (vector bool int, vector unsigned int); vector unsigned int vec_sub (vector unsigned int, vector bool int); vector signed long long vec_sub (vector bool long long, vector signed long long); vector signed long long vec_sub (vector signed long long, vector bool long long); vector unsigned long long vec_sub (vector bool long long, vector unsigned long long); vector unsigned long long vec_sub (vector unsigned long long, vector bool long long); vector signed short vec_sub (vector bool short, vector signed short); vector signed short vec_sub (vector signed short, vector bool short); vector unsigned short vec_sub (vector bool short, vector unsigned short); vector unsigned short vec_sub (vector unsigned short, vector bool short); VEC_SUBS (ARG1, ARG2) Purpose: Returns a vector containing the saturated differences of each set of corresponding elements of the given vectors. Result value: The value of each element of the result is the saturated result of subtracting the value of the corresponding element of ARG2 from the value of the corresponding element of ARG1. vector signed char vec_subs (vector bool char, vector signed char); vector signed char vec_subs (vector signed char, vector bool char); vector unsigned char vec_subs (vector bool char, vector unsigned char); vector unsigned char vec_subs (vector unsigned char, vector bool char); vector signed int vec_subs (vector bool int, vector signed int); vector signed int vec_subs (vector signed int, vector bool int); vector unsigned int vec_subs (vector bool int, vector unsigned int); vector unsigned int vec_subs (vector unsigned int, vector bool int); vector signed short vec_subs (vector bool short, vector signed short); vector signed short vec_subs (vector signed short, vector bool short); vector unsigned short vec_subs (vector bool short, vector unsigned short); vector unsigned short vec_subs (vector unsigned short, vector bool short); VEC_VCLZ (ARG1) Purpose: Returns a vector containing the number of most-significant bits equal to 0 of each corresponding element of the given vector. Result value: The value of each element of the result is the sum of the corresponding single-precision floating-point elements of ARG1 and ARG2. Deprecated: The preferred form of this vector built-in function is vec_ctlz. vector signed char vec_vclz (vector signed char); vector unsigned char vec_vclz (vector unsigned char); vector signed int vec_vclz (vector signed int); vector unsigned int vec_vclz (vector unsigned int); vector signed long long vec_vclz (vector signed long long); vector unsigned long long vec_vclz (vector unsigned long long); vector signed short vec_vclz (vector signed short); vector unsigned short vec_vclz (vector unsigned short); VEC_XOR (ARG1, ARG2) Purpose: Performs a bitwise XOR of the given vectors. Result value: The result is the bitwise XOR of ARG1 and ARG2. vector signed char vec_xor (vector bool char, vector signed char); vector signed char vec_xor (vector signed char, vector bool char); vector unsigned char vec_xor (vector bool char, vector unsigned char); vector unsigned char vec_xor (vector unsigned char, vector bool char); vector signed int vec_xor (vector bool int, vector signed int); vector signed int vec_xor (vector signed int, vector bool int); vector unsigned int vec_xor (vector bool int, vector unsigned int); vector unsigned int vec_xor (vector unsigned int, vector bool int); Optional vector signed long long vec_xor (vector bool long long, vector signed long long); Optional vector signed long long vec_xor (vector signed long long, vector bool long long); Optional vector unsigned long long vec_xor (vector bool long long, vector unsigned long long); Optional vector unsigned long long vec_xor (vector unsigned long long, vector bool long long); vector signed short vec_xor (vector bool short, vector signed short); vector signed short vec_xor (vector signed short, vector bool short); vector unsigned short vec_xor (vector bool short, vector unsigned short); vector unsigned short vec_xor (vector unsigned short, vector bool short); vector double vec_xor (vector bool long long, vector double); vector double vec_xor (vector double, vector bool long long); vector float vec_xor (vector bool int, vector float); vector float vec_xor (vector float, vector bool int);
Deprecated Predicates Group Description of Deprecated Predicate Prototypes VEC_ALL_EQ (ARG1, ARG2) Purpose: Tests whether all sets of corresponding elements of the given vectors are equal. Result value: The result is 1 if each element of ARG1 is equal to the corresponding element of ARG2. Otherwise, the result is 0. int vec_all_eq (vector bool char, vector signed char); int vec_all_eq (vector bool char, vector unsigned char); int vec_all_eq (vector signed char, vector bool char); int vec_all_eq (vector unsigned char, vector bool char); int vec_all_eq (vector bool int, vector signed int); int vec_all_eq (vector bool int, vector unsigned int); int vec_all_eq (vector signed int, vector bool int); int vec_all_eq (vector unsigned int, vector bool int); int vec_all_eq (vector bool long long, vector signed long long); int vec_all_eq (vector bool long long, vector unsigned long long); int vec_all_eq (vector signed long long, vector bool long long); int vec_all_eq (vector unsigned long long, vector bool long long); int vec_all_eq (vector bool short, vector signed short); int vec_all_eq (vector bool short, vector unsigned short); int vec_all_eq (vector signed short, vector bool short); int vec_all_eq (vector unsigned short, vector bool short); VEC_ALL_GE (ARG1, ARG2) Purpose: Tests whether all elements of the first argument are greater than or equal to the corresponding elements of the second argument. Result value: The result is 1 if all elements of ARG1 are greater than or equal to the corresponding elements of ARG2. Otherwise, the result is 0. int vec_all_ge (vector bool char, vector signed char); int vec_all_ge (vector bool char, vector unsigned char); int vec_all_ge (vector signed char, vector bool char); int vec_all_ge (vector unsigned char, vector bool char); int vec_all_ge (vector bool int, vector signed int); int vec_all_ge (vector bool int, vector unsigned int); int vec_all_ge (vector signed int, vector bool int); int vec_all_ge (vector unsigned int, vector bool int); int vec_all_ge (vector bool long long, vector signed long long); int vec_all_ge (vector bool long long, vector unsigned long long); int vec_all_ge (vector signed long long, vector bool long long); int vec_all_ge (vector unsigned long long, vector bool long long); int vec_all_ge (vector bool short, vector signed short); int vec_all_ge (vector bool short, vector unsigned short); int vec_all_ge (vector signed short, vector bool short); int vec_all_ge (vector unsigned short, vector bool short); VEC_ALL_GT (ARG1, ARG2) Purpose: Tests whether all elements of the first argument are greater than the corresponding elements of the second argument. Result value: The result is 1 if all elements of ARG1 are greater than the corresponding elements of ARG2. Otherwise, the result is 0. int vec_all_gt (vector bool char, vector signed char); int vec_all_gt (vector bool char, vector unsigned char); int vec_all_gt (vector signed char, vector bool char); int vec_all_gt (vector unsigned char, vector bool char); int vec_all_gt (vector bool int, vector signed int); int vec_all_gt (vector bool int, vector unsigned int); int vec_all_gt (vector signed int, vector bool int); int vec_all_gt (vector unsigned int, vector bool int); int vec_all_gt (vector bool long long, vector signed long long); int vec_all_gt (vector bool long long, vector unsigned long long); int vec_all_gt (vector signed long long, vector bool long long); int vec_all_gt (vector unsigned long long, vector bool long long); int vec_all_gt (vector bool short, vector signed short); int vec_all_gt (vector bool short, vector unsigned short); int vec_all_gt (vector signed short, vector bool short); int vec_all_gt (vector unsigned short, vector bool short); VEC_ALL_LE (ARG1, ARG2) Purpose: Tests whether all elements of the first argument are less than or equal to the corresponding elements of the second argument. Result value: The result is 1 if all elements of ARG1 are less than or equal to the corresponding elements of ARG2. Otherwise, the result is 0. int vec_all_le (vector bool char, vector signed char); int vec_all_le (vector bool char, vector unsigned char); int vec_all_le (vector signed char, vector bool char); int vec_all_le (vector unsigned char, vector bool char); int vec_all_le (vector bool int, vector signed int); int vec_all_le (vector bool int, vector unsigned int); int vec_all_le (vector signed int, vector bool int); int vec_all_le (vector unsigned int, vector bool int); int vec_all_le (vector bool long long, vector signed long long); int vec_all_le (vector bool long long, vector unsigned long long); int vec_all_le (vector signed long long, vector bool long long); int vec_all_le (vector unsigned long long, vector bool long long); int vec_all_le (vector bool short, vector signed short); int vec_all_le (vector bool short, vector unsigned short); int vec_all_le (vector signed short, vector bool short); int vec_all_le (vector unsigned short, vector bool short); VEC_ALL_LT (ARG1, ARG2) Purpose: Tests whether all elements of the first argument are less than the corresponding elements of the second argument. Result value: The result is 1 if all elements of ARG1 are less than the corresponding elements of ARG2. Otherwise, the result is 0. int vec_all_lt (vector bool char, vector signed char); int vec_all_lt (vector bool char, vector unsigned char); int vec_all_lt (vector signed char, vector bool char); int vec_all_lt (vector unsigned char, vector bool char); int vec_all_lt (vector bool int, vector signed int); int vec_all_lt (vector bool int, vector unsigned int); int vec_all_lt (vector signed int, vector bool int); int vec_all_lt (vector unsigned int, vector bool int); int vec_all_lt (vector bool long long, vector signed long long); int vec_all_lt (vector bool long long, vector unsigned long long); int vec_all_lt (vector signed long long, vector bool long long); int vec_all_lt (vector unsigned long long, vector bool long long); int vec_all_lt (vector bool short, vector signed short); int vec_all_lt (vector bool short, vector unsigned short); int vec_all_lt (vector signed short, vector bool short); int vec_all_lt (vector unsigned short, vector bool short); VEC_ALL_NE (ARG1, ARG2) Purpose: Tests whether all sets of corresponding elements of the given vectors are not equal. Result value: The result is 1 if each element of ARG1 is not equal to the corresponding element of ARG2. Otherwise, the result is 0. int vec_all_ne (vector bool char, vector signed char); int vec_all_ne (vector bool char, vector unsigned char); int vec_all_ne (vector signed char, vector bool char); int vec_all_ne (vector unsigned char, vector bool char); int vec_all_ne (vector bool int, vector signed int); int vec_all_ne (vector bool int, vector unsigned int); int vec_all_ne (vector signed int, vector bool int); int vec_all_ne (vector unsigned int, vector bool int); int vec_all_ne (vector bool long long, vector signed long long); int vec_all_ne (vector bool long long, vector unsigned long long); int vec_all_ne (vector signed long long, vector bool long long); int vec_all_ne (vector unsigned long long, vector bool long long); int vec_all_ne (vector bool short, vector signed short); int vec_all_ne (vector bool short, vector unsigned short); int vec_all_ne (vector signed short, vector bool short); int vec_all_ne (vector unsigned short, vector bool short); VEC_ANY_EQ (ARG1, ARG2) Purpose: Tests whether any set of corresponding elements of the given vectors are equal. Result value: The result is 1 if any element of ARG1 is equal to the corresponding element of ARG2. Otherwise, the result is 0. int vec_any_eq (vector bool char, vector signed char); int vec_any_eq (vector bool char, vector unsigned char); int vec_any_eq (vector signed char, vector bool char); int vec_any_eq (vector unsigned char, vector bool char); int vec_any_eq (vector bool int, vector signed int); int vec_any_eq (vector bool int, vector unsigned int); int vec_any_eq (vector signed int, vector bool int); int vec_any_eq (vector unsigned int, vector bool int); int vec_any_eq (vector bool long long, vector signed long long); int vec_any_eq (vector bool long long, vector unsigned long long); int vec_any_eq (vector signed long long, vector bool long long); int vec_any_eq (vector unsigned long long, vector bool long long); int vec_any_eq (vector bool short, vector signed short); int vec_any_eq (vector bool short, vector unsigned short); int vec_any_eq (vector signed short, vector bool short); int vec_any_eq (vector unsigned short, vector bool short); VEC_ANY_GE (ARG1, ARG2) Purpose: Tests whether any element of the first argument is greater than or equal to the corresponding element of the second argument. Result value: The result is 1 if any element of ARG1 is greater than or equal to the corresponding element of ARG2. Otherwise, the result is 0. int vec_any_ge (vector bool char, vector signed char); int vec_any_ge (vector bool char, vector unsigned char); int vec_any_ge (vector signed char, vector bool char); int vec_any_ge (vector unsigned char, vector bool char); int vec_any_ge (vector bool int, vector signed int); int vec_any_ge (vector bool int, vector unsigned int); int vec_any_ge (vector signed int, vector bool int); int vec_any_ge (vector unsigned int, vector bool int); int vec_any_ge (vector bool long long, vector signed long long); int vec_any_ge (vector bool long long, vector unsigned long long); int vec_any_ge (vector signed long long, vector bool long long); int vec_any_ge (vector unsigned long long, vector bool long long); int vec_any_ge (vector bool short, vector signed short); int vec_any_ge (vector bool short, vector unsigned short); int vec_any_ge (vector signed short, vector bool short); int vec_any_ge (vector unsigned short, vector bool short); VEC_ANY_GT (ARG1, ARG2) Purpose: Tests whether any element of the first argument is greater than the corresponding element of the second argument. Result value: The result is 1 if any element of ARG1 is greater than the corresponding element of ARG2. Otherwise, the result is 0. int vec_any_gt (vector bool char, vector signed char); int vec_any_gt (vector bool char, vector unsigned char); int vec_any_gt (vector signed char, vector bool char); int vec_any_gt (vector unsigned char, vector bool char); int vec_any_gt (vector bool int, vector signed int); int vec_any_gt (vector bool int, vector unsigned int); int vec_any_gt (vector signed int, vector bool int); int vec_any_gt (vector unsigned int, vector bool int); int vec_any_gt (vector bool long long, vector signed long long); int vec_any_gt (vector bool long long, vector unsigned long long); int vec_any_gt (vector signed long long, vector bool long long); int vec_any_gt (vector unsigned long long, vector bool long long); int vec_any_gt (vector bool short, vector signed short); int vec_any_gt (vector bool short, vector unsigned short); int vec_any_gt (vector signed short, vector bool short); int vec_any_gt (vector unsigned short, vector bool short); VEC_ANY_LE (ARG1, ARG2) Purpose: Tests whether any element of the first argument is less than or equal to the corresponding element of the second argument. Result value: The result is 1 if any element of ARG1 is less than or equal to the corresponding element of ARG2. Otherwise, the result is 0. int vec_any_le (vector bool char, vector signed char); int vec_any_le (vector bool char, vector unsigned char); int vec_any_le (vector signed char, vector bool char); int vec_any_le (vector unsigned char, vector bool char); int vec_any_le (vector bool int, vector signed int); int vec_any_le (vector bool int, vector unsigned int); int vec_any_le (vector signed int, vector bool int); int vec_any_le (vector unsigned int, vector bool int); int vec_any_le (vector bool long long, vector signed long long); int vec_any_le (vector bool long long, vector unsigned long long); int vec_any_le (vector signed long long, vector bool long long); int vec_any_le (vector unsigned long long, vector bool long long); int vec_any_le (vector bool short, vector signed short); int vec_any_le (vector bool short, vector unsigned short); int vec_any_le (vector signed short, vector bool short); int vec_any_le (vector unsigned short, vector bool short); VEC_ANY_LT (ARG1, ARG2) Purpose: Tests whether any element of the first argument is less than the corresponding element of the second argument. Result value: The result is 1 if any element of ARG1 is less than the corresponding element of ARG2. Otherwise, the result is 0. int vec_any_lt (vector bool char, vector signed char); int vec_any_lt (vector bool char, vector unsigned char); int vec_any_lt (vector signed char, vector bool char); int vec_any_lt (vector unsigned char, vector bool char); int vec_any_lt (vector bool int, vector signed int); int vec_any_lt (vector bool int, vector unsigned int); int vec_any_lt (vector signed int, vector bool int); int vec_any_lt (vector unsigned int, vector bool int); int vec_any_lt (vector bool long long, vector signed long long); int vec_any_lt (vector bool long long, vector unsigned long long); int vec_any_lt (vector signed long long, vector bool long long); int vec_any_lt (vector unsigned long long, vector bool long long); int vec_any_lt (vector bool short, vector signed short); int vec_any_lt (vector bool short, vector unsigned short); int vec_any_lt (vector signed short, vector bool short); int vec_any_lt (vector unsigned short, vector bool short); VEC_ANY_NE (ARG1, ARG2) Purpose: Tests whether any set of corresponding elements of the given vectors are not equal. Result value: The result is 1 if any element of ARG1 is not equal to the corresponding element of ARG2. Otherwise, the result is 0. int vec_any_ne (vector bool char, vector signed char); int vec_any_ne (vector bool char, vector unsigned char); int vec_any_ne (vector signed char, vector bool char); int vec_any_ne (vector unsigned char, vector bool char); int vec_any_ne (vector bool int, vector signed int); int vec_any_ne (vector bool int, vector unsigned int); int vec_any_ne (vector signed int, vector bool int); int vec_any_ne (vector unsigned int, vector bool int); int vec_any_ne (vector bool long long, vector signed long long); int vec_any_ne (vector bool long long, vector unsigned long long); int vec_any_ne (vector signed long long, vector bool long long); int vec_any_ne (vector unsigned long long, vector bool long long); int vec_any_ne (vector bool short, vector signed short); int vec_any_ne (vector bool short, vector unsigned short); int vec_any_ne (vector signed short, vector bool short); int vec_any_ne (vector unsigned short, vector bool short);