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.