# POWER9 built-in functions

A number of built-in functions are available to exploit the POWER9 architecture.

## Fixed-point built-in functions

`__builtin_addex`- Adds Extended using Overflow Bit.
`__builtin_cmpeqb`- Compares the corresponding bytes of the given parameters and returns the result.
`__builtin_cmprb`- Compares the ranged byte.
`__builtin_setb`- Sets boolean extension.
`__builtin_maddhd`- Fixed-point Multiply-Add signed high doubleword.
`__builtin_maddhdu`- Fixed-point Multiply-Add high doubleword unsigned.
`__builtin_maddld`- Fixed-point Multiply-Add low doubleword.
`__builtin_darn, __builtin_darn_32, __builtin_darn_raw`- Delivers a random number.

## Binary floating-point built-in functions

`__builtin_compare_exp_uo, __builtin_compare_exp_lt, __builtin_compare_exp_eq, __builtin_compare_exp_gt`- Compares the exponents of two parameters.
`__builtin_extract_exp`- Returns the exponent of the given parameter.
`__builtin_extract_sig`- Returns the significand of the given parameter.
`__builtin_insert_exp`- Replaces the exponent of the first parameter with the second parameter and returns the result.
`__builtin_test_data_class`- Determines the data class of the given parameter.

## Binary-coded decimal built-in functions

`__builtin_bcdcopysign`- Returns the decimal value of the first parameter combined with the sign code of the second
parameter.
This built-in function is valid only when you include the

`altivec.h`file. `__builtin_bcdsetsign`- Set the sign code of the input parameter in packed decimal format.
This built-in function is valid only when you include the

`altivec.h`file. `__builtin_bcdshift`- Decimal shift.
This built-in function is valid only when you include the

`altivec.h`file. `__builtin_bcdshiftround`- Decimal shift and round.
This built-in function is valid only when you include the

`altivec.h`file. `__builtin_bcdtruncate`- Decimal truncate.
This built-in function is valid only when you include the

`altivec.h`file. `__builtin_bcdunsignedshift`- Decimal unsigned shift.
This built-in function is valid only when you include the

`altivec.h`file. `__builtin_bcdunsignedtruncate`- Decimal unsigned truncate.
This built-in function is valid only when you include the

`altivec.h`file. `__builtin_national2packed`- Transforms the national decimal value to packed decimal format.
This built-in function is valid only when you include the

`altivec.h`file. `__builtin_packed2national`- Transforms the packed decimal value to national decimal format.
This built-in function is valid only when you include the

`altivec.h`file. `__builtin_packed2zoned`- Transforms the packed decimal value to zoned decimal format.
This built-in function is valid only when you include the

`altivec.h`file. `__builtin_zoned2packed`- Transforms the zoned decimal value to packed decimal format.
This built-in function is valid only when you include the

`altivec.h`file.

## Vector built-in functions

`vec_absd`- Returns a vector that contains the absolute difference of the corresponding elements of the
given vectors.
This built-in function is valid only when you include the

`altivec.h`file. `vec_cmpne`- Returns a vector containing the results of comparing each set of the corresponding elements of
the given vectors for inequality.
This built-in function is valid only when you include the

`altivec.h`file. `vec_cmpnez`- Returns a vector that contains the results of comparing each set of the corresponding elements
of the given vectors for inequality, or the results of testing the corresponding element of given
vectors for the value of zero.
This built-in function is valid only when you include the

`altivec.h`file. `vec_cntlz`- Counts the most significant zero bits of each element of the given vector.
This built-in function is valid only when you include the

`altivec.h`file. `vec_cntlz_lsbb`- Counts the leading byte elements of the given vector that have a least significant bit of
0.
This built-in function is valid only when you include the

`altivec.h`file. `vec_cnttz`- Counts the least significant zero bits of each element of the given vector.
This built-in function is valid only when you include the

`altivec.h`file. `vec_cnttz_lsbb`- Counts the trailing byte elements of the given vector that have a least significant bit of
0.
This built-in function is valid only when you include the

`altivec.h`file. `vec_extract_exp`- Returns a vector that contains the exponent of the given vector.
This built-in function is valid only when you include the

`altivec.h`file. `vec_extract_sig`- Returns a vector that contains the significand of the given vector.
This built-in function is valid only when you include the

`altivec.h`file. `vec_extsbd`- Sign-extends the rightmost byte of each doubleword element of the given vector.
This built-in function is valid only when you include the

`altivec.h`file. `vec_extsbw`- Sign-extends the rightmost byte of each word element of the given vector.
This built-in function is valid only when you include the

`altivec.h`file. `vec_extshd`- Sign-extends the rightmost halfword of each doubleword element of the given vector.
This built-in function is valid only when you include the

`altivec.h`file. `vec_extshw`- Sign-extends the rightmost halfword of each word element of the given vector.
This built-in function is valid only when you include the

`altivec.h`file. `vec_extswd`- Sign-extends the rightmost word of each doubleword element of the given vector.
This built-in function is valid only when you include the

`altivec.h`file. `vec_first_match_index`- Compares each set of the corresponding elements of the given vectors and returns the first
position of equality.
This built-in function is valid only when you include the

`altivec.h`file. `vec_first_match_or_eos_index`- Compares each set of the corresponding elements of the given vectors and returns the first
position of equality or the position of the end-of-string terminator
This built-in function is valid only when you include the

`altivec.h`file. `vec_first_mismatch_index`- Compares each set of the corresponding elements of the given vectors and returns the first
position of inequality.
This built-in function is valid only when you include the

`altivec.h`file. `vec_first_mismatch_or_eos_index`- Compares each set of the corresponding elements of the given vectors and returns the first
position of inequality or the position of the end-of-string terminator
This built-in function is valid only when you include the

`altivec.h`file. `vec_insert_exp`- Returns a vector that combines the exponents of elements from one vector with the signs and the
significands of elements from another vector.
This built-in function is valid only when you include the

`altivec.h`file. `vec_load_splats`- Loads a 4-byte element from the memory address specified by the displacement
This built-in function is valid only when you include the

`altivec.h`file. `vec_parity_lsbb`- Returns a vector that computes parity on the least significant bit of each byte of each element
of the given vector.
This built-in function is valid only when you include the

`altivec.h`file. `vec_rlmi`- Returns a vector that contains each element of the given vector rotated left and inserted under
a mask into another vector.
This built-in function is valid only when you include the

`altivec.h`file. `vec_rlnm`- Returns a vector that contains each element of the given vector rotated left and intersected
with a mask.
This built-in function is valid only when you include the

`altivec.h`file. `vec_slv`- Left shifts the elements of a given vector by a given number of bits.
This built-in function is valid only when you include the

`altivec.h`file. `vec_srv`- Right-shifts the elements of a given vector by a given number of bits.
This built-in function is valid only when you include the

`altivec.h`file. `vec_test_data_class`- Determines the data class of the elements of the given vector.
This built-in function is valid only when you include the

`altivec.h`file. `vec_xl_len`- Returns a vector that loads a given number of bytes from the given address.
This built-in function is valid only when you include the

`altivec.h`file. `vec_xl_len_r`- Loads a string of bytes into vector register, right-justified. Sets the leftmost elements
(16-
*cnt*) to 0.This built-in function is valid only when you include the

`altivec.h`file. `vec_xst_len`- Stores a given byte length of a vector to a given address.
This built-in function is valid only when you include the

`altivec.h`file. `vec_xst_len_r`- Stores a right-justified string of bytes.
This built-in function is valid only when you include the

`altivec.h`file.