#### 6.60.22.2 PowerPC AltiVec Built-in Functions Available on ISA 2.06

The AltiVec built-in functions described in this section are available on the PowerPC family of processors starting with ISA 2.06 or later. These are normally enabled by adding `-mvsx` to the command line.

When `-mvsx` is used, the following additional vector types are implemented.

    vector unsigned __int128
    vector signed __int128
    vector unsigned long long int
    vector signed long long int
    vector double

The long long types are only implemented for 64-bit code generation.

    vector bool long long vec_and (vector bool long long int, vector bool long long);

    vector double vec_ctf (vector unsigned long, const int);
    vector double vec_ctf (vector signed long, const int);

    vector signed long vec_cts (vector double, const int);

    vector unsigned long vec_ctu (vector double, const int);

    void vec_dst (const unsigned long *, int, const int);
    void vec_dst (const long *, int, const int);

    void vec_dststt (const unsigned long *, int, const int);
    void vec_dststt (const long *, int, const int);

    void vec_dstt (const unsigned long *, int, const int);
    void vec_dstt (const long *, int, const int);

    vector unsigned char vec_lvsl (int, const unsigned long *);
    vector unsigned char vec_lvsl (int, const long *);

    vector unsigned char vec_lvsr (int, const unsigned long *);
    vector unsigned char vec_lvsr (int, const long *);

    vector double vec_mul (vector double, vector double);
    vector long vec_mul (vector long, vector long);
    vector unsigned long vec_mul (vector unsigned long, vector unsigned long);

    vector unsigned long long vec_mule (vector unsigned int, vector unsigned int);
    vector signed long long vec_mule (vector signed int, vector signed int);

    vector unsigned long long vec_mulo (vector unsigned int, vector unsigned int);
    vector signed long long vec_mulo (vector signed int, vector signed int);

    vector double vec_nabs (vector double);

    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 double vec_sld (vector double, vector double, const int);

    vector bool long long int vec_sld (vector bool long long int,
                                       vector bool long long int, const int);
    vector long long int vec_sld (vector long long int, vector  long long int, const int);
    vector unsigned long long int vec_sld (vector unsigned long long int,
                                           vector unsigned long long int, const int);

    vector long long int vec_sll (vector long long int, vector unsigned char);
    vector unsigned long long int vec_sll (vector unsigned long long 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 signed long vec_splat (vector signed long, const int);
    vector unsigned long vec_splat (vector unsigned long, const int);

    vector long long int vec_srl (vector long long int, vector unsigned char);
    vector unsigned long long int vec_srl (vector unsigned long long int,
                                           vector unsigned char);

    vector long long int vec_sro (vector long long int, vector char);
    vector long long int vec_sro (vector long long int, vector unsigned char);
    vector unsigned long long int vec_sro (vector unsigned long long int, vector char);
    vector unsigned long long int vec_sro (vector unsigned long long int,
                                           vector unsigned char);

    vector signed __int128 vec_subc (vector signed __int128, vector signed __int128);
    vector unsigned __int128 vec_subc (vector unsigned __int128, vector unsigned __int128);

    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);

    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);

    vector double vec_unpackh (vector float);

    vector double vec_unpackl (vector float);

    vector double vec_doublee (vector float);
    vector double vec_doublee (vector signed int);
    vector double vec_doublee (vector unsigned int);

    vector double vec_doubleo (vector float);
    vector double vec_doubleo (vector signed int);
    vector double vec_doubleo (vector unsigned int);

    vector double vec_doubleh (vector float);
    vector double vec_doubleh (vector signed int);
    vector double vec_doubleh (vector unsigned int);

    vector double vec_doublel (vector float);
    vector double vec_doublel (vector signed int);
    vector double vec_doublel (vector unsigned int);

    vector float vec_float (vector signed int);
    vector float vec_float (vector unsigned int);

    vector float vec_float2 (vector signed long long, vector signed long long);
    vector float vec_float2 (vector unsigned long long, vector signed long long);

    vector float vec_floate (vector double);
    vector float vec_floate (vector signed long long);
    vector float vec_floate (vector unsigned long long);

    vector float vec_floato (vector double);
    vector float vec_floato (vector signed long long);
    vector float vec_floato (vector unsigned long long);

    vector signed long long vec_signed (vector double);
    vector signed int vec_signed (vector float);

    vector signed int vec_signede (vector double);

    vector signed int vec_signedo (vector double);

    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 short vec_sldw (vector signed short, vector signed short, const int);
    vector unsigned short vec_sldw (vector unsigned short,
                                    vector unsigned short, 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 long long vec_unsigned (vector double);
    vector signed int vec_unsigned (vector float);

    vector signed int vec_unsignede (vector double);

    vector signed int vec_unsignedo (vector double);

    vector double vec_abs (vector double);
    vector double vec_add (vector double, vector double);
    vector double vec_and (vector double, vector double);
    vector double vec_and (vector double, vector bool long);
    vector double vec_and (vector bool long, vector double);
    vector long vec_and (vector long, vector long);
    vector long vec_and (vector long, vector bool long);
    vector long vec_and (vector bool long, vector long);
    vector unsigned long vec_and (vector unsigned long, vector unsigned long);
    vector unsigned long vec_and (vector unsigned long, vector bool long);
    vector unsigned long vec_and (vector bool long, vector unsigned long);
    vector double vec_andc (vector double, vector double);
    vector double vec_andc (vector double, vector bool long);
    vector double vec_andc (vector bool long, vector double);
    vector long vec_andc (vector long, vector long);
    vector long vec_andc (vector long, vector bool long);
    vector long vec_andc (vector bool long, vector long);
    vector unsigned long vec_andc (vector unsigned long, vector unsigned long);
    vector unsigned long vec_andc (vector unsigned long, vector bool long);
    vector unsigned long vec_andc (vector bool long, vector unsigned long);
    vector double vec_ceil (vector double);
    vector bool long vec_cmpeq (vector double, vector double);
    vector bool long vec_cmpge (vector double, vector double);
    vector bool long vec_cmpgt (vector double, vector double);
    vector bool long vec_cmple (vector double, vector double);
    vector bool long vec_cmplt (vector double, vector double);
    vector double vec_cpsgn (vector double, vector double);
    vector float vec_div (vector float, vector float);
    vector double vec_div (vector double, vector double);
    vector long vec_div (vector long, vector long);
    vector unsigned long vec_div (vector unsigned long, vector unsigned long);
    vector double vec_floor (vector double);
    vector signed long long vec_ld (int, const vector signed long long *);
    vector signed long long vec_ld (int, const signed long long *);
    vector unsigned long long vec_ld (int, const vector unsigned long long *);
    vector unsigned long long vec_ld (int, const unsigned long long *);
    vector __int128 vec_ld (int, const vector __int128 *);
    vector unsigned __int128 vec_ld (int, const vector unsigned __int128 *);
    vector __int128 vec_ld (int, const __int128 *);
    vector unsigned __int128 vec_ld (int, const unsigned __int128 *);
    vector double vec_ld (int, const vector double *);
    vector double vec_ld (int, const double *);
    vector double vec_ldl (int, const vector double *);
    vector double vec_ldl (int, const double *);
    vector unsigned char vec_lvsl (int, const double *);
    vector unsigned char vec_lvsr (int, const double *);
    vector double vec_madd (vector double, vector double, vector double);
    vector double vec_max (vector double, vector double);
    vector signed long vec_mergeh (vector signed long, vector signed long);
    vector signed long vec_mergeh (vector signed long, vector bool long);
    vector signed long vec_mergeh (vector bool long, vector signed long);
    vector unsigned long vec_mergeh (vector unsigned long, vector unsigned long);
    vector unsigned long vec_mergeh (vector unsigned long, vector bool long);
    vector unsigned long vec_mergeh (vector bool long, vector unsigned long);
    vector signed long vec_mergel (vector signed long, vector signed long);
    vector signed long vec_mergel (vector signed long, vector bool long);
    vector signed long vec_mergel (vector bool long, vector signed long);
    vector unsigned long vec_mergel (vector unsigned long, vector unsigned long);
    vector unsigned long vec_mergel (vector unsigned long, vector bool long);
    vector unsigned long vec_mergel (vector bool long, vector unsigned long);
    vector double vec_min (vector double, vector double);
    vector float vec_msub (vector float, vector float, vector float);
    vector double vec_msub (vector double, vector double, vector double);
    vector float vec_nearbyint (vector float);
    vector double vec_nearbyint (vector double);
    vector float vec_nmadd (vector float, vector float, vector float);
    vector double vec_nmadd (vector double, vector double, vector double);
    vector double vec_nmsub (vector double, vector double, vector double);
    vector double vec_nor (vector double, vector double);
    vector long vec_nor (vector long, vector long);
    vector long vec_nor (vector long, vector bool long);
    vector long vec_nor (vector bool long, vector long);
    vector unsigned long vec_nor (vector unsigned long, vector unsigned long);
    vector unsigned long vec_nor (vector unsigned long, vector bool long);
    vector unsigned long vec_nor (vector bool long, vector unsigned long);
    vector double vec_or (vector double, vector double);
    vector double vec_or (vector double, vector bool long);
    vector double vec_or (vector bool long, vector double);
    vector long vec_or (vector long, vector long);
    vector long vec_or (vector long, vector bool long);
    vector long vec_or (vector bool long, vector long);
    vector unsigned long vec_or (vector unsigned long, vector unsigned long);
    vector unsigned long vec_or (vector unsigned long, vector bool long);
    vector unsigned long vec_or (vector bool long, vector unsigned long);
    vector double vec_perm (vector double, vector double, vector unsigned char);
    vector long vec_perm (vector long, vector long, vector unsigned char);
    vector unsigned long vec_perm (vector unsigned long, vector unsigned long,
                                   vector unsigned char);
    vector bool char vec_permxor (vector bool char, vector bool char,
                                  vector bool char);
    vector unsigned char vec_permxor (vector signed char, vector signed char,
                                      vector signed char);
    vector unsigned char vec_permxor (vector unsigned char, vector unsigned char,
                                      vector unsigned char);
    vector double vec_rint (vector double);
    vector double vec_recip (vector double, vector double);
    vector double vec_rsqrt (vector double);
    vector double vec_rsqrte (vector double);
    vector double vec_sel (vector double, vector double, vector bool long);
    vector double vec_sel (vector double, vector double, vector unsigned long);
    vector long vec_sel (vector long, vector long, vector long);
    vector long vec_sel (vector long, vector long, vector unsigned long);
    vector long vec_sel (vector long, vector long, vector bool long);
    vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
                                  vector long);
    vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
                                  vector unsigned long);
    vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
                                  vector bool long);
    vector double vec_splats (double);
    vector signed long vec_splats (signed long);
    vector unsigned long vec_splats (unsigned long);
    vector float vec_sqrt (vector float);
    vector double vec_sqrt (vector double);
    void vec_st (vector signed long long, int, vector signed long long *);
    void vec_st (vector signed long long, int, signed long long *);
    void vec_st (vector unsigned long long, int, vector unsigned long long *);
    void vec_st (vector unsigned long long, int, unsigned long long *);
    void vec_st (vector bool long long, int, vector bool long long *);
    void vec_st (vector bool long long, int, signed long long *);
    void vec_st (vector bool long long, int, unsigned long long *);
    void vec_st (vector double, int, vector double *);
    void vec_st (vector double, int, double *);
    vector double vec_sub (vector double, vector double);
    vector double vec_trunc (vector double);
    vector double vec_xl (int, vector double *);
    vector double vec_xl (int, double *);
    vector long long vec_xl (int, vector long long *);
    vector long long vec_xl (int, long long *);
    vector unsigned long long vec_xl (int, vector unsigned long long *);
    vector unsigned long long vec_xl (int, unsigned long long *);
    vector float vec_xl (int, vector float *);
    vector float vec_xl (int, float *);
    vector int vec_xl (int, vector int *);
    vector int vec_xl (int, int *);
    vector unsigned int vec_xl (int, vector unsigned int *);
    vector unsigned int vec_xl (int, unsigned int *);
    vector double vec_xor (vector double, vector double);
    vector double vec_xor (vector double, vector bool long);
    vector double vec_xor (vector bool long, vector double);
    vector long vec_xor (vector long, vector long);
    vector long vec_xor (vector long, vector bool long);
    vector long vec_xor (vector bool long, vector long);
    vector unsigned long vec_xor (vector unsigned long, vector unsigned long);
    vector unsigned long vec_xor (vector unsigned long, vector bool long);
    vector unsigned long vec_xor (vector bool long, vector unsigned long);
    void vec_xst (vector double, int, vector double *);
    void vec_xst (vector double, int, double *);
    void vec_xst (vector long long, int, vector long long *);
    void vec_xst (vector long long, int, long long *);
    void vec_xst (vector unsigned long long, int, vector unsigned long long *);
    void vec_xst (vector unsigned long long, int, unsigned long long *);
    void vec_xst (vector float, int, vector float *);
    void vec_xst (vector float, int, float *);
    void vec_xst (vector int, int, vector int *);
    void vec_xst (vector int, int, int *);
    void vec_xst (vector unsigned int, int, vector unsigned int *);
    void vec_xst (vector unsigned int, int, unsigned int *);
    int vec_all_eq (vector double, vector double);
    int vec_all_ge (vector double, vector double);
    int vec_all_gt (vector double, vector double);
    int vec_all_le (vector double, vector double);
    int vec_all_lt (vector double, vector double);
    int vec_all_nan (vector double);
    int vec_all_ne (vector double, vector double);
    int vec_all_nge (vector double, vector double);
    int vec_all_ngt (vector double, vector double);
    int vec_all_nle (vector double, vector double);
    int vec_all_nlt (vector double, vector double);
    int vec_all_numeric (vector double);
    int vec_any_eq (vector double, vector double);
    int vec_any_ge (vector double, vector double);
    int vec_any_gt (vector double, vector double);
    int vec_any_le (vector double, vector double);
    int vec_any_lt (vector double, vector double);
    int vec_any_nan (vector double);
    int vec_any_ne (vector double, vector double);
    int vec_any_nge (vector double, vector double);
    int vec_any_ngt (vector double, vector double);
    int vec_any_nle (vector double, vector double);
    int vec_any_nlt (vector double, vector double);
    int vec_any_numeric (vector double);

    vector double vec_vsx_ld (int, const vector double *);
    vector double vec_vsx_ld (int, const double *);
    vector float vec_vsx_ld (int, const vector float *);
    vector float vec_vsx_ld (int, const float *);
    vector bool int vec_vsx_ld (int, const vector bool int *);
    vector signed int vec_vsx_ld (int, const vector signed int *);
    vector signed int vec_vsx_ld (int, const int *);
    vector signed int vec_vsx_ld (int, const long *);
    vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
    vector unsigned int vec_vsx_ld (int, const unsigned int *);
    vector unsigned int vec_vsx_ld (int, const unsigned long *);
    vector bool short vec_vsx_ld (int, const vector bool short *);
    vector pixel vec_vsx_ld (int, const vector pixel *);
    vector signed short vec_vsx_ld (int, const vector signed short *);
    vector signed short vec_vsx_ld (int, const short *);
    vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
    vector unsigned short vec_vsx_ld (int, const unsigned short *);
    vector bool char vec_vsx_ld (int, const vector bool char *);
    vector signed char vec_vsx_ld (int, const vector signed char *);
    vector signed char vec_vsx_ld (int, const signed char *);
    vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
    vector unsigned char vec_vsx_ld (int, const unsigned char *);

    void vec_vsx_st (vector double, int, vector double *);
    void vec_vsx_st (vector double, int, double *);
    void vec_vsx_st (vector float, int, vector float *);
    void vec_vsx_st (vector float, int, float *);
    void vec_vsx_st (vector signed int, int, vector signed int *);
    void vec_vsx_st (vector signed int, int, int *);
    void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
    void vec_vsx_st (vector unsigned int, int, unsigned int *);
    void vec_vsx_st (vector bool int, int, vector bool int *);
    void vec_vsx_st (vector bool int, int, unsigned int *);
    void vec_vsx_st (vector bool int, int, int *);
    void vec_vsx_st (vector signed short, int, vector signed short *);
    void vec_vsx_st (vector signed short, int, short *);
    void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
    void vec_vsx_st (vector unsigned short, int, unsigned short *);
    void vec_vsx_st (vector bool short, int, vector bool short *);
    void vec_vsx_st (vector bool short, int, unsigned short *);
    void vec_vsx_st (vector pixel, int, vector pixel *);
    void vec_vsx_st (vector pixel, int, unsigned short *);
    void vec_vsx_st (vector pixel, int, short *);
    void vec_vsx_st (vector bool short, int, short *);
    void vec_vsx_st (vector signed char, int, vector signed char *);
    void vec_vsx_st (vector signed char, int, signed char *);
    void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
    void vec_vsx_st (vector unsigned char, int, unsigned char *);
    void vec_vsx_st (vector bool char, int, vector bool char *);
    void vec_vsx_st (vector bool char, int, unsigned char *);
    void vec_vsx_st (vector bool char, int, signed char *);

    vector double vec_xxpermdi (vector double, vector double, const int);
    vector float vec_xxpermdi (vector float, vector float, const int);
    vector long long vec_xxpermdi (vector long long, vector long long, const int);
    vector unsigned long long vec_xxpermdi (vector unsigned long long,
                                            vector unsigned long long, const int);
    vector int vec_xxpermdi (vector int, vector int, const int);
    vector unsigned int vec_xxpermdi (vector unsigned int,
                                      vector unsigned int, const int);
    vector short vec_xxpermdi (vector short, vector short, const int);
    vector unsigned short vec_xxpermdi (vector unsigned short,
                                        vector unsigned short, const int);
    vector signed char vec_xxpermdi (vector signed char, vector signed char,
                                     const int);
    vector unsigned char vec_xxpermdi (vector unsigned char,
                                       vector unsigned char, const int);

    vector double vec_xxsldi (vector double, vector double, int);
    vector float vec_xxsldi (vector float, vector float, int);
    vector long long vec_xxsldi (vector long long, vector long long, int);
    vector unsigned long long vec_xxsldi (vector unsigned long long,
                                          vector unsigned long long, int);
    vector int vec_xxsldi (vector int, vector int, int);
    vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int);
    vector short vec_xxsldi (vector short, vector short, int);
    vector unsigned short vec_xxsldi (vector unsigned short,
                                      vector unsigned short, int);
    vector signed char vec_xxsldi (vector signed char, vector signed char, int);
    vector unsigned char vec_xxsldi (vector unsigned char,
                                     vector unsigned char, int);

Note that the ‘`vec_ld`’ and ‘`vec_st`’ built-in functions always generate the AltiVec ‘`LVX`’ and ‘`STVX`’ instructions even if the VSX instruction set is available. The ‘`vec_vsx_ld`’ and ‘`vec_vsx_st`’ built-in functions always generate the VSX ‘`LXVD2X`’, ‘`LXVW4X`’, ‘`STXVD2X`’, and ‘`STXVW4X`’ instructions.