PowerPC AltiVec Built-in Functions Available on ISA 2.06 (Using the GNU Compiler Collection (GCC))

#### 7.13.24.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.

Only functions excluded from the PVIPR are listed here.

    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 unsigned char vec_lvsl (int, const double *);
    vector unsigned char vec_lvsr (int, const 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 __int128 vec_xxpermdi (vector __int128,
                                  vector __int128, const int);
    vector __uint128 vec_xxpermdi (vector __uint128,
                                   vector __uint128, 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.

    vector signed long long vec_signedo (vector float);
    vector signed long long vec_signede (vector float);
    vector unsigned long long vec_unsignedo (vector float);
    vector unsigned long long vec_unsignede (vector float);

The overloaded built-ins `vec_signedo` and `vec_signede` are additional extensions to the built-ins as documented in the PVIPR.