OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [config/] [rs6000/] [rs6000-builtin.def] - Rev 801

Go to most recent revision | Compare with Previous | Blame | View Log

/* Builtin functions for rs6000/powerpc.
   Copyright (C) 2009, 2010, 2011
   Free Software Foundation, Inc.
   Contributed by Michael Meissner (meissner@linux.vnet.ibm.com)

   This file is part of GCC.

   GCC is free software; you can redistribute it and/or modify it
   under the terms of the GNU General Public License as published
   by the Free Software Foundation; either version 3, or (at your
   option) any later version.

   GCC is distributed in the hope that it will be useful, but WITHOUT
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
   License for more details.

   Under Section 7 of GPL version 3, you are granted additional
   permissions described in the GCC Runtime Library Exception, version
   3.1, as published by the Free Software Foundation.

   You should have received a copy of the GNU General Public License and
   a copy of the GCC Runtime Library Exception along with this program;
   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
   <http://www.gnu.org/licenses/>.  */

/* Before including this file, some macros must be defined:
   RS6000_BUILTIN_1 -- 1 arg builtins
   RS6000_BUILTIN_2 -- 2 arg builtins
   RS6000_BUILTIN_3 -- 3 arg builtins
   RS6000_BUILTIN_A -- ABS builtins
   RS6000_BUILTIN_D -- DST builtins
   RS6000_BUILTIN_E -- SPE EVSEL builtins.
   RS6000_BUILTIN_P -- Altivec and VSX predicate builtins
   RS6000_BUILTIN_Q -- Paired floating point VSX predicate builtins
   RS6000_BUILTIN_S -- SPE predicate builtins
   RS6000_BUILTIN_X -- special builtins

   Each of the above macros takes 4 arguments:
        ENUM    Enumeration name
        NAME    String literal for the name
        MASK    Mask of bits that indicate which options enables the builtin
        ATTR    builtin attribute information.
        ICODE   Insn code of the function that implents the builtin.  */

#ifndef RS6000_BUILTIN_1
  #error "RS6000_BUILTIN_1 is not defined."
#endif

#ifndef RS6000_BUILTIN_2
  #error "RS6000_BUILTIN_2 is not defined."
#endif

#ifndef RS6000_BUILTIN_3
  #error "RS6000_BUILTIN_3 is not defined."
#endif

#ifndef RS6000_BUILTIN_A
  #error "RS6000_BUILTIN_A is not defined."
#endif

#ifndef RS6000_BUILTIN_D
  #error "RS6000_BUILTIN_D is not defined."
#endif

#ifndef RS6000_BUILTIN_E
  #error "RS6000_BUILTIN_E is not defined."
#endif

#ifndef RS6000_BUILTIN_P
  #error "RS6000_BUILTIN_P is not defined."
#endif

#ifndef RS6000_BUILTIN_Q
  #error "RS6000_BUILTIN_Q is not defined."
#endif

#ifndef RS6000_BUILTIN_S
  #error "RS6000_BUILTIN_S is not defined."
#endif

#ifndef RS6000_BUILTIN_X
  #error "RS6000_BUILTIN_X is not defined."
#endif

#ifndef BU_AV_1
/* Define convenience macros using token pasting to allow fitting everything in
   one line.  */

/* Altivec convenience macros.  */
#define BU_ALTIVEC_1(ENUM, NAME, ATTR, ICODE)                           \
  RS6000_BUILTIN_1 (ALTIVEC_BUILTIN_ ## ENUM,           /* ENUM */      \
                    "__builtin_altivec_" NAME,          /* NAME */      \
                    RS6000_BTM_ALTIVEC,                 /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_UNARY),                               \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_ALTIVEC_2(ENUM, NAME, ATTR, ICODE)                           \
  RS6000_BUILTIN_2 (ALTIVEC_BUILTIN_ ## ENUM,           /* ENUM */      \
                    "__builtin_altivec_" NAME,          /* NAME */      \
                    RS6000_BTM_ALTIVEC,                 /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_BINARY),                              \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_ALTIVEC_3(ENUM, NAME, ATTR, ICODE)                           \
  RS6000_BUILTIN_3 (ALTIVEC_BUILTIN_ ## ENUM,           /* ENUM */      \
                    "__builtin_altivec_" NAME,          /* NAME */      \
                    RS6000_BTM_ALTIVEC,                 /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_TERNARY),                             \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_ALTIVEC_A(ENUM, NAME, ATTR, ICODE)                           \
  RS6000_BUILTIN_A (ALTIVEC_BUILTIN_ ## ENUM,           /* ENUM */      \
                    "__builtin_altivec_" NAME,          /* NAME */      \
                    RS6000_BTM_ALTIVEC,                 /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_ABS),                                 \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_ALTIVEC_D(ENUM, NAME, ATTR, ICODE)                           \
  RS6000_BUILTIN_D (ALTIVEC_BUILTIN_ ## ENUM,           /* ENUM */      \
                    "__builtin_altivec_" NAME,          /* NAME */      \
                    RS6000_BTM_ALTIVEC,                 /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_DST),                                 \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_ALTIVEC_P(ENUM, NAME, ATTR, ICODE)                           \
  RS6000_BUILTIN_P (ALTIVEC_BUILTIN_ ## ENUM,           /* ENUM */      \
                    "__builtin_altivec_" NAME,          /* NAME */      \
                    RS6000_BTM_ALTIVEC,                 /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_PREDICATE),                           \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_ALTIVEC_X(ENUM, NAME, ATTR)                                  \
  RS6000_BUILTIN_X (ALTIVEC_BUILTIN_ ## ENUM,           /* ENUM */      \
                    "__builtin_altivec_" NAME,          /* NAME */      \
                    RS6000_BTM_ALTIVEC,                 /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_SPECIAL),                             \
                    CODE_FOR_nothing)                   /* ICODE */

#define BU_ALTIVEC_C(ENUM, NAME, ATTR)                                  \
  RS6000_BUILTIN_X (ALTIVEC_BUILTIN_ ## ENUM,           /* ENUM */      \
                    "__builtin_altivec_" NAME,          /* NAME */      \
                    (RS6000_BTM_ALTIVEC                 /* MASK */      \
                     | RS6000_BTM_CELL),                                \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_SPECIAL),                             \
                    CODE_FOR_nothing)                   /* ICODE */

/* Altivec overloaded builtin function macros.  */
#define BU_ALTIVEC_OVERLOAD_1(ENUM, NAME)                               \
  RS6000_BUILTIN_1 (ALTIVEC_BUILTIN_VEC_ ## ENUM,       /* ENUM */      \
                    "__builtin_vec_" NAME,              /* NAME */      \
                    RS6000_BTM_ALTIVEC,                 /* MASK */      \
                    (RS6000_BTC_OVERLOADED              /* ATTR */      \
                     | RS6000_BTC_UNARY),                               \
                    CODE_FOR_nothing)                   /* ICODE */

#define BU_ALTIVEC_OVERLOAD_2(ENUM, NAME)                               \
  RS6000_BUILTIN_2 (ALTIVEC_BUILTIN_VEC_ ## ENUM,       /* ENUM */      \
                    "__builtin_vec_" NAME,              /* NAME */      \
                    RS6000_BTM_ALTIVEC,                 /* MASK */      \
                    (RS6000_BTC_OVERLOADED              /* ATTR */      \
                     | RS6000_BTC_BINARY),                              \
                    CODE_FOR_nothing)                   /* ICODE */

#define BU_ALTIVEC_OVERLOAD_3(ENUM, NAME)                               \
  RS6000_BUILTIN_3 (ALTIVEC_BUILTIN_VEC_ ## ENUM,       /* ENUM */      \
                    "__builtin_vec_" NAME,              /* NAME */      \
                    RS6000_BTM_ALTIVEC,                 /* MASK */      \
                    (RS6000_BTC_OVERLOADED              /* ATTR */      \
                     | RS6000_BTC_TERNARY),                             \
                    CODE_FOR_nothing)                   /* ICODE */

#define BU_ALTIVEC_OVERLOAD_A(ENUM, NAME)                               \
  RS6000_BUILTIN_A (ALTIVEC_BUILTIN_VEC_ ## ENUM,       /* ENUM */      \
                    "__builtin_vec_" NAME,              /* NAME */      \
                    RS6000_BTM_ALTIVEC,                 /* MASK */      \
                    (RS6000_BTC_OVERLOADED              /* ATTR */      \
                     | RS6000_BTC_ABS),                                 \
                    CODE_FOR_nothing)                   /* ICODE */

#define BU_ALTIVEC_OVERLOAD_D(ENUM, NAME)                               \
  RS6000_BUILTIN_D (ALTIVEC_BUILTIN_VEC_ ## ENUM,       /* ENUM */      \
                    "__builtin_vec_" NAME,              /* NAME */      \
                    RS6000_BTM_ALTIVEC,                 /* MASK */      \
                    (RS6000_BTC_OVERLOADED              /* ATTR */      \
                     | RS6000_BTC_DST),                                 \
                    CODE_FOR_nothing)                   /* ICODE */

#define BU_ALTIVEC_OVERLOAD_P(ENUM, NAME)                               \
  RS6000_BUILTIN_P (ALTIVEC_BUILTIN_VEC_ ## ENUM,       /* ENUM */      \
                    "__builtin_vec_" NAME,              /* NAME */      \
                    RS6000_BTM_ALTIVEC,                 /* MASK */      \
                    (RS6000_BTC_OVERLOADED              /* ATTR */      \
                     | RS6000_BTC_PREDICATE),                           \
                    CODE_FOR_nothing)                   /* ICODE */

#define BU_ALTIVEC_OVERLOAD_X(ENUM, NAME)                               \
  RS6000_BUILTIN_X (ALTIVEC_BUILTIN_VEC_ ## ENUM,       /* ENUM */      \
                    "__builtin_vec_" NAME,              /* NAME */      \
                    RS6000_BTM_ALTIVEC,                 /* MASK */      \
                    (RS6000_BTC_OVERLOADED              /* ATTR */      \
                     | RS6000_BTC_SPECIAL),                             \
                    CODE_FOR_nothing)                   /* ICODE */

/* VSX convenience macros.  */
#define BU_VSX_1(ENUM, NAME, ATTR, ICODE)                               \
  RS6000_BUILTIN_1 (VSX_BUILTIN_ ## ENUM,               /* ENUM */      \
                    "__builtin_vsx_" NAME,              /* NAME */      \
                    RS6000_BTM_VSX,                     /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_UNARY),                               \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_VSX_2(ENUM, NAME, ATTR, ICODE)                               \
  RS6000_BUILTIN_2 (VSX_BUILTIN_ ## ENUM,               /* ENUM */      \
                    "__builtin_vsx_" NAME,              /* NAME */      \
                    RS6000_BTM_VSX,                     /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_BINARY),                              \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_VSX_3(ENUM, NAME, ATTR, ICODE)                               \
  RS6000_BUILTIN_3 (VSX_BUILTIN_ ## ENUM,               /* ENUM */      \
                    "__builtin_vsx_" NAME,              /* NAME */      \
                    RS6000_BTM_VSX,                     /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_TERNARY),                             \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_VSX_A(ENUM, NAME, ATTR, ICODE)                               \
  RS6000_BUILTIN_A (VSX_BUILTIN_ ## ENUM,               /* ENUM */      \
                    "__builtin_vsx_" NAME,              /* NAME */      \
                    RS6000_BTM_VSX,                     /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_ABS),                                 \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_VSX_P(ENUM, NAME, ATTR, ICODE)                               \
  RS6000_BUILTIN_P (VSX_BUILTIN_ ## ENUM,               /* ENUM */      \
                    "__builtin_vsx_" NAME,              /* NAME */      \
                    RS6000_BTM_VSX,                     /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_PREDICATE),                           \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_VSX_X(ENUM, NAME, ATTR)                                      \
  RS6000_BUILTIN_X (VSX_BUILTIN_ ## ENUM,               /* ENUM */      \
                    "__builtin_vsx_" NAME,              /* NAME */      \
                    RS6000_BTM_VSX,                     /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_SPECIAL),                             \
                    CODE_FOR_nothing)                   /* ICODE */

/* VSX overloaded builtin function macros.  */
#define BU_VSX_OVERLOAD_1(ENUM, NAME)                                   \
  RS6000_BUILTIN_1 (VSX_BUILTIN_VEC_ ## ENUM,           /* ENUM */      \
                    "__builtin_vec_" NAME,              /* NAME */      \
                    RS6000_BTM_VSX,                     /* MASK */      \
                    (RS6000_BTC_OVERLOADED              /* ATTR */      \
                     | RS6000_BTC_UNARY),                               \
                    CODE_FOR_nothing)                   /* ICODE */

#define BU_VSX_OVERLOAD_2(ENUM, NAME)                                   \
  RS6000_BUILTIN_2 (VSX_BUILTIN_VEC_ ## ENUM,           /* ENUM */      \
                    "__builtin_vec_" NAME,              /* NAME */      \
                    RS6000_BTM_VSX,                     /* MASK */      \
                    (RS6000_BTC_OVERLOADED              /* ATTR */      \
                     | RS6000_BTC_BINARY),                              \
                    CODE_FOR_nothing)                   /* ICODE */

#define BU_VSX_OVERLOAD_3(ENUM, NAME)                                   \
  RS6000_BUILTIN_3 (VSX_BUILTIN_VEC_ ## ENUM,           /* ENUM */      \
                    "__builtin_vec_" NAME,              /* NAME */      \
                    RS6000_BTM_VSX,                     /* MASK */      \
                    (RS6000_BTC_OVERLOADED              /* ATTR */      \
                     | RS6000_BTC_TERNARY),                             \
                    CODE_FOR_nothing)                   /* ICODE */

/* xxpermdi and xxsldwi are overloaded functions, but had __builtin_vsx names
   instead of __builtin_vec.  */
#define BU_VSX_OVERLOAD_3V(ENUM, NAME)                                  \
  RS6000_BUILTIN_3 (VSX_BUILTIN_VEC_ ## ENUM,           /* ENUM */      \
                    "__builtin_vsx_" NAME,              /* NAME */      \
                    RS6000_BTM_VSX,                     /* MASK */      \
                    (RS6000_BTC_OVERLOADED              /* ATTR */      \
                     | RS6000_BTC_TERNARY),                             \
                    CODE_FOR_nothing)                   /* ICODE */

#define BU_VSX_OVERLOAD_X(ENUM, NAME)                                   \
  RS6000_BUILTIN_X (VSX_BUILTIN_VEC_ ## ENUM,           /* ENUM */      \
                    "__builtin_vec_" NAME,              /* NAME */      \
                    RS6000_BTM_VSX,                     /* MASK */      \
                    (RS6000_BTC_OVERLOADED              /* ATTR */      \
                     | RS6000_BTC_SPECIAL),                             \
                    CODE_FOR_nothing)                   /* ICODE */

/* SPE convenience macros.  */
#define BU_SPE_1(ENUM, NAME, ATTR, ICODE)                               \
  RS6000_BUILTIN_1 (SPE_BUILTIN_ ## ENUM,               /* ENUM */      \
                    "__builtin_spe_" NAME,              /* NAME */      \
                    RS6000_BTM_SPE,                     /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_UNARY),                               \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_SPE_2(ENUM, NAME, ATTR, ICODE)                               \
  RS6000_BUILTIN_2 (SPE_BUILTIN_ ## ENUM,               /* ENUM */      \
                    "__builtin_spe_" NAME,              /* NAME */      \
                    RS6000_BTM_SPE,                     /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_BINARY),                              \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_SPE_3(ENUM, NAME, ATTR, ICODE)                               \
  RS6000_BUILTIN_3 (SPE_BUILTIN_ ## ENUM,               /* ENUM */      \
                    "__builtin_spe_" NAME,              /* NAME */      \
                    RS6000_BTM_SPE,                     /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_TERNARY),                             \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_SPE_E(ENUM, NAME, ATTR, ICODE)                               \
  RS6000_BUILTIN_E (SPE_BUILTIN_ ## ENUM,               /* ENUM */      \
                    "__builtin_spe_" NAME,              /* NAME */      \
                    RS6000_BTM_SPE,                     /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_EVSEL),                               \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_SPE_P(ENUM, NAME, ATTR, ICODE)                               \
  RS6000_BUILTIN_S (SPE_BUILTIN_ ## ENUM,               /* ENUM */      \
                    "__builtin_spe_" NAME,              /* NAME */      \
                    RS6000_BTM_SPE,                     /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_PREDICATE),                           \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_SPE_X(ENUM, NAME, ATTR)                                      \
  RS6000_BUILTIN_X (SPE_BUILTIN_ ## ENUM,               /* ENUM */      \
                    "__builtin_spe_" NAME,              /* NAME */      \
                    RS6000_BTM_SPE,                     /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_SPECIAL),                             \
                    CODE_FOR_nothing)                   /* ICODE */

/* Paired floating point convenience macros.  */
#define BU_PAIRED_1(ENUM, NAME, ATTR, ICODE)                            \
  RS6000_BUILTIN_1 (PAIRED_BUILTIN_ ## ENUM,            /* ENUM */      \
                    "__builtin_paired_" NAME,           /* NAME */      \
                    RS6000_BTM_PAIRED,                  /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_UNARY),                               \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_PAIRED_2(ENUM, NAME, ATTR, ICODE)                            \
  RS6000_BUILTIN_2 (PAIRED_BUILTIN_ ## ENUM,            /* ENUM */      \
                    "__builtin_paired_" NAME,           /* NAME */      \
                    RS6000_BTM_PAIRED,                  /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_BINARY),                              \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_PAIRED_3(ENUM, NAME, ATTR, ICODE)                            \
  RS6000_BUILTIN_3 (PAIRED_BUILTIN_ ## ENUM,            /* ENUM */      \
                    "__builtin_paired_" NAME,           /* NAME */      \
                    RS6000_BTM_PAIRED,                  /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_TERNARY),                             \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_PAIRED_P(ENUM, NAME, ATTR, ICODE)                            \
  RS6000_BUILTIN_Q (PAIRED_BUILTIN_ ## ENUM,            /* ENUM */      \
                    "__builtin_paired_" NAME,           /* NAME */      \
                    RS6000_BTM_PAIRED,                  /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_PREDICATE),                           \
                    CODE_FOR_ ## ICODE)                 /* ICODE */

#define BU_PAIRED_X(ENUM, NAME, ATTR)                                   \
  RS6000_BUILTIN_X (PAIRED_BUILTIN_ ## ENUM,            /* ENUM */      \
                    "__builtin_paired_" NAME,           /* NAME */      \
                    RS6000_BTM_PAIRED,                  /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_SPECIAL),                             \
                    CODE_FOR_nothing)                   /* ICODE */

#define BU_SPECIAL_X(ENUM, NAME, MASK, ATTR)                            \
  RS6000_BUILTIN_X (ENUM,                               /* ENUM */      \
                    NAME,                               /* NAME */      \
                    MASK,                               /* MASK */      \
                    (ATTR | RS6000_BTC_SPECIAL),        /* ATTR */      \
                    CODE_FOR_nothing)                   /* ICODE */
#endif

/* Insure 0 is not a legitimate index.  */
BU_SPECIAL_X (RS6000_BUILTIN_NONE, NULL, 0, RS6000_BTC_MISC)

/* 3 argument Altivec builtins.  */
BU_ALTIVEC_3 (VMADDFP,        "vmaddfp",        FP,     fmav4sf4)
BU_ALTIVEC_3 (VMHADDSHS,      "vmhaddshs",      SAT,    altivec_vmhaddshs)
BU_ALTIVEC_3 (VMHRADDSHS,     "vmhraddshs",     SAT,    altivec_vmhraddshs)
BU_ALTIVEC_3 (VMLADDUHM,      "vmladduhm",      CONST,  altivec_vmladduhm)
BU_ALTIVEC_3 (VMSUMUBM,       "vmsumubm",       CONST,  altivec_vmsumubm)
BU_ALTIVEC_3 (VMSUMMBM,       "vmsummbm",       CONST,  altivec_vmsummbm)
BU_ALTIVEC_3 (VMSUMUHM,       "vmsumuhm",       CONST,  altivec_vmsumuhm)
BU_ALTIVEC_3 (VMSUMSHM,       "vmsumshm",       CONST,  altivec_vmsumshm)
BU_ALTIVEC_3 (VMSUMUHS,       "vmsumuhs",       SAT,    altivec_vmsumuhs)
BU_ALTIVEC_3 (VMSUMSHS,       "vmsumshs",       SAT,    altivec_vmsumshs)
BU_ALTIVEC_3 (VNMSUBFP,       "vnmsubfp",       FP,     nfmsv4sf4)
BU_ALTIVEC_3 (VPERM_2DF,      "vperm_2df",      CONST,  altivec_vperm_v2df)
BU_ALTIVEC_3 (VPERM_2DI,      "vperm_2di",      CONST,  altivec_vperm_v2di)
BU_ALTIVEC_3 (VPERM_4SF,      "vperm_4sf",      CONST,  altivec_vperm_v4sf)
BU_ALTIVEC_3 (VPERM_4SI,      "vperm_4si",      CONST,  altivec_vperm_v4si)
BU_ALTIVEC_3 (VPERM_8HI,      "vperm_8hi",      CONST,  altivec_vperm_v8hi)
BU_ALTIVEC_3 (VPERM_16QI,     "vperm_16qi",     CONST,  altivec_vperm_v16qi_uns)
BU_ALTIVEC_3 (VPERM_2DI_UNS,  "vperm_2di_uns",  CONST,  altivec_vperm_v2di_uns)
BU_ALTIVEC_3 (VPERM_4SI_UNS,  "vperm_4si_uns",  CONST,  altivec_vperm_v4si_uns)
BU_ALTIVEC_3 (VPERM_8HI_UNS,  "vperm_8hi_uns",  CONST,  altivec_vperm_v8hi_uns)
BU_ALTIVEC_3 (VPERM_16QI_UNS, "vperm_16qi_uns", CONST,  altivec_vperm_v16qi_uns)
BU_ALTIVEC_3 (VSEL_4SF,       "vsel_4sf",       CONST,  vector_select_v4sf)
BU_ALTIVEC_3 (VSEL_4SI,       "vsel_4si",       CONST,  vector_select_v4si)
BU_ALTIVEC_3 (VSEL_8HI,       "vsel_8hi",       CONST,  vector_select_v8hi)
BU_ALTIVEC_3 (VSEL_16QI,      "vsel_16qi",      CONST,  vector_select_v16qi)
BU_ALTIVEC_3 (VSEL_2DF,       "vsel_2df",       CONST,  vector_select_v2df)
BU_ALTIVEC_3 (VSEL_2DI,       "vsel_2di",       CONST,  vector_select_v2di)
BU_ALTIVEC_3 (VSEL_4SI_UNS,   "vsel_4si_uns",   CONST,  vector_select_v4si_uns)
BU_ALTIVEC_3 (VSEL_8HI_UNS,   "vsel_8hi_uns",   CONST,  vector_select_v8hi_uns)
BU_ALTIVEC_3 (VSEL_16QI_UNS,  "vsel_16qi_uns",  CONST,  vector_select_v16qi_uns)
BU_ALTIVEC_3 (VSEL_2DI_UNS,   "vsel_2di_uns",   CONST,  vector_select_v2di_uns)
BU_ALTIVEC_3 (VSLDOI_16QI,    "vsldoi_16qi",    CONST,  altivec_vsldoi_v16qi)
BU_ALTIVEC_3 (VSLDOI_8HI,     "vsldoi_8hi",     CONST,  altivec_vsldoi_v8hi)
BU_ALTIVEC_3 (VSLDOI_4SI,     "vsldoi_4si",     CONST,  altivec_vsldoi_v4si)
BU_ALTIVEC_3 (VSLDOI_4SF,     "vsldoi_4sf",     CONST,  altivec_vsldoi_v4sf)

/* Altivec DST builtins.  */
BU_ALTIVEC_D (DST,            "dst",            MISC,   altivec_dst)
BU_ALTIVEC_D (DSTT,           "dstt",           MISC,   altivec_dstt)
BU_ALTIVEC_D (DSTST,          "dstst",          MISC,   altivec_dstst)
BU_ALTIVEC_D (DSTSTT,         "dststt",         MISC,   altivec_dststt)

/* Altivec 2 argument builtin functions.  */
BU_ALTIVEC_2 (VADDUBM,        "vaddubm",        CONST,  addv16qi3)
BU_ALTIVEC_2 (VADDUHM,        "vadduhm",        CONST,  addv8hi3)
BU_ALTIVEC_2 (VADDUWM,        "vadduwm",        CONST,  addv4si3)
BU_ALTIVEC_2 (VADDFP,         "vaddfp",         CONST,  addv4sf3)
BU_ALTIVEC_2 (VADDCUW,        "vaddcuw",        CONST,  altivec_vaddcuw)
BU_ALTIVEC_2 (VADDUBS,        "vaddubs",        CONST,  altivec_vaddubs)
BU_ALTIVEC_2 (VADDSBS,        "vaddsbs",        CONST,  altivec_vaddsbs)
BU_ALTIVEC_2 (VADDUHS,        "vadduhs",        CONST,  altivec_vadduhs)
BU_ALTIVEC_2 (VADDSHS,        "vaddshs",        CONST,  altivec_vaddshs)
BU_ALTIVEC_2 (VADDUWS,        "vadduws",        CONST,  altivec_vadduws)
BU_ALTIVEC_2 (VADDSWS,        "vaddsws",        CONST,  altivec_vaddsws)
BU_ALTIVEC_2 (VAND,           "vand",           CONST,  andv4si3)
BU_ALTIVEC_2 (VANDC,          "vandc",          CONST,  andcv4si3)
BU_ALTIVEC_2 (VAVGUB,         "vavgub",         CONST,  altivec_vavgub)
BU_ALTIVEC_2 (VAVGSB,         "vavgsb",         CONST,  altivec_vavgsb)
BU_ALTIVEC_2 (VAVGUH,         "vavguh",         CONST,  altivec_vavguh)
BU_ALTIVEC_2 (VAVGSH,         "vavgsh",         CONST,  altivec_vavgsh)
BU_ALTIVEC_2 (VAVGUW,         "vavguw",         CONST,  altivec_vavguw)
BU_ALTIVEC_2 (VAVGSW,         "vavgsw",         CONST,  altivec_vavgsw)
BU_ALTIVEC_2 (VCFUX,          "vcfux",          CONST,  altivec_vcfux)
BU_ALTIVEC_2 (VCFSX,          "vcfsx",          CONST,  altivec_vcfsx)
BU_ALTIVEC_2 (VCMPBFP,        "vcmpbfp",        CONST,  altivec_vcmpbfp)
BU_ALTIVEC_2 (VCMPEQUB,       "vcmpequb",       CONST,  vector_eqv16qi)
BU_ALTIVEC_2 (VCMPEQUH,       "vcmpequh",       CONST,  vector_eqv8hi)
BU_ALTIVEC_2 (VCMPEQUW,       "vcmpequw",       CONST,  vector_eqv4si)
BU_ALTIVEC_2 (VCMPEQFP,       "vcmpeqfp",       CONST,  vector_eqv4sf)
BU_ALTIVEC_2 (VCMPGEFP,       "vcmpgefp",       CONST,  vector_gev4sf)
BU_ALTIVEC_2 (VCMPGTUB,       "vcmpgtub",       CONST,  vector_gtuv16qi)
BU_ALTIVEC_2 (VCMPGTSB,       "vcmpgtsb",       CONST,  vector_gtv16qi)
BU_ALTIVEC_2 (VCMPGTUH,       "vcmpgtuh",       CONST,  vector_gtuv8hi)
BU_ALTIVEC_2 (VCMPGTSH,       "vcmpgtsh",       CONST,  vector_gtv8hi)
BU_ALTIVEC_2 (VCMPGTUW,       "vcmpgtuw",       CONST,  vector_gtuv4si)
BU_ALTIVEC_2 (VCMPGTSW,       "vcmpgtsw",       CONST,  vector_gtv4si)
BU_ALTIVEC_2 (VCMPGTFP,       "vcmpgtfp",       CONST,  vector_gtv4sf)
BU_ALTIVEC_2 (VCTSXS,         "vctsxs",         CONST,  altivec_vctsxs)
BU_ALTIVEC_2 (VCTUXS,         "vctuxs",         CONST,  altivec_vctuxs)
BU_ALTIVEC_2 (VMAXUB,         "vmaxub",         CONST,  umaxv16qi3)
BU_ALTIVEC_2 (VMAXSB,         "vmaxsb",         CONST,  smaxv16qi3)
BU_ALTIVEC_2 (VMAXUH,         "vmaxuh",         CONST,  umaxv8hi3)
BU_ALTIVEC_2 (VMAXSH,         "vmaxsh",         CONST,  smaxv8hi3)
BU_ALTIVEC_2 (VMAXUW,         "vmaxuw",         CONST,  umaxv4si3)
BU_ALTIVEC_2 (VMAXSW,         "vmaxsw",         CONST,  smaxv4si3)
BU_ALTIVEC_2 (VMAXFP,         "vmaxfp",         CONST,  smaxv4sf3)
BU_ALTIVEC_2 (VMRGHB,         "vmrghb",         CONST,  altivec_vmrghb)
BU_ALTIVEC_2 (VMRGHH,         "vmrghh",         CONST,  altivec_vmrghh)
BU_ALTIVEC_2 (VMRGHW,         "vmrghw",         CONST,  altivec_vmrghw)
BU_ALTIVEC_2 (VMRGLB,         "vmrglb",         CONST,  altivec_vmrglb)
BU_ALTIVEC_2 (VMRGLH,         "vmrglh",         CONST,  altivec_vmrglh)
BU_ALTIVEC_2 (VMRGLW,         "vmrglw",         CONST,  altivec_vmrglw)
BU_ALTIVEC_2 (VMINUB,         "vminub",         CONST,  uminv16qi3)
BU_ALTIVEC_2 (VMINSB,         "vminsb",         CONST,  sminv16qi3)
BU_ALTIVEC_2 (VMINUH,         "vminuh",         CONST,  uminv8hi3)
BU_ALTIVEC_2 (VMINSH,         "vminsh",         CONST,  sminv8hi3)
BU_ALTIVEC_2 (VMINUW,         "vminuw",         CONST,  uminv4si3)
BU_ALTIVEC_2 (VMINSW,         "vminsw",         CONST,  sminv4si3)
BU_ALTIVEC_2 (VMINFP,         "vminfp",         CONST,  sminv4sf3)
BU_ALTIVEC_2 (VMULEUB,        "vmuleub",        CONST,  altivec_vmuleub)
BU_ALTIVEC_2 (VMULEUB_UNS,    "vmuleub_uns",    CONST,  altivec_vmuleub)
BU_ALTIVEC_2 (VMULESB,        "vmulesb",        CONST,  altivec_vmulesb)
BU_ALTIVEC_2 (VMULEUH,        "vmuleuh",        CONST,  altivec_vmuleuh)
BU_ALTIVEC_2 (VMULEUH_UNS,    "vmuleuh_uns",    CONST,  altivec_vmuleuh)
BU_ALTIVEC_2 (VMULESH,        "vmulesh",        CONST,  altivec_vmulesh)
BU_ALTIVEC_2 (VMULOUB,        "vmuloub",        CONST,  altivec_vmuloub)
BU_ALTIVEC_2 (VMULOUB_UNS,    "vmuloub_uns",    CONST,  altivec_vmuloub)
BU_ALTIVEC_2 (VMULOSB,        "vmulosb",        CONST,  altivec_vmulosb)
BU_ALTIVEC_2 (VMULOUH,        "vmulouh",        CONST,  altivec_vmulouh)
BU_ALTIVEC_2 (VMULOUH_UNS,    "vmulouh_uns",    CONST,  altivec_vmulouh)
BU_ALTIVEC_2 (VMULOSH,        "vmulosh",        CONST,  altivec_vmulosh)
BU_ALTIVEC_2 (VNOR,           "vnor",           CONST,  norv4si3)
BU_ALTIVEC_2 (VOR,            "vor",            CONST,  iorv4si3)
BU_ALTIVEC_2 (VPKUHUM,        "vpkuhum",        CONST,  altivec_vpkuhum)
BU_ALTIVEC_2 (VPKUWUM,        "vpkuwum",        CONST,  altivec_vpkuwum)
BU_ALTIVEC_2 (VPKPX,          "vpkpx",          CONST,  altivec_vpkpx)
BU_ALTIVEC_2 (VPKSHSS,        "vpkshss",        CONST,  altivec_vpkshss)
BU_ALTIVEC_2 (VPKSWSS,        "vpkswss",        CONST,  altivec_vpkswss)
BU_ALTIVEC_2 (VPKUHUS,        "vpkuhus",        CONST,  altivec_vpkuhus)
BU_ALTIVEC_2 (VPKSHUS,        "vpkshus",        CONST,  altivec_vpkshus)
BU_ALTIVEC_2 (VPKUWUS,        "vpkuwus",        CONST,  altivec_vpkuwus)
BU_ALTIVEC_2 (VPKSWUS,        "vpkswus",        CONST,  altivec_vpkswus)
BU_ALTIVEC_2 (VRECIPFP,       "vrecipdivfp",    CONST,  recipv4sf3)
BU_ALTIVEC_2 (VRLB,           "vrlb",           CONST,  vrotlv16qi3)
BU_ALTIVEC_2 (VRLH,           "vrlh",           CONST,  vrotlv8hi3)
BU_ALTIVEC_2 (VRLW,           "vrlw",           CONST,  vrotlv4si3)
BU_ALTIVEC_2 (VSLB,           "vslb",           CONST,  vashlv16qi3)
BU_ALTIVEC_2 (VSLH,           "vslh",           CONST,  vashlv8hi3)
BU_ALTIVEC_2 (VSLW,           "vslw",           CONST,  vashlv4si3)
BU_ALTIVEC_2 (VSL,            "vsl",            CONST,  altivec_vsl)
BU_ALTIVEC_2 (VSLO,           "vslo",           CONST,  altivec_vslo)
BU_ALTIVEC_2 (VSPLTB,         "vspltb",         CONST,  altivec_vspltb)
BU_ALTIVEC_2 (VSPLTH,         "vsplth",         CONST,  altivec_vsplth)
BU_ALTIVEC_2 (VSPLTW,         "vspltw",         CONST,  altivec_vspltw)
BU_ALTIVEC_2 (VSRB,           "vsrb",           CONST,  vlshrv16qi3)
BU_ALTIVEC_2 (VSRH,           "vsrh",           CONST,  vlshrv8hi3)
BU_ALTIVEC_2 (VSRW,           "vsrw",           CONST,  vlshrv4si3)
BU_ALTIVEC_2 (VSRAB,          "vsrab",          CONST,  vashrv16qi3)
BU_ALTIVEC_2 (VSRAH,          "vsrah",          CONST,  vashrv8hi3)
BU_ALTIVEC_2 (VSRAW,          "vsraw",          CONST,  vashrv4si3)
BU_ALTIVEC_2 (VSR,            "vsr",            CONST,  altivec_vsr)
BU_ALTIVEC_2 (VSRO,           "vsro",           CONST,  altivec_vsro)
BU_ALTIVEC_2 (VSUBUBM,        "vsububm",        CONST,  subv16qi3)
BU_ALTIVEC_2 (VSUBUHM,        "vsubuhm",        CONST,  subv8hi3)
BU_ALTIVEC_2 (VSUBUWM,        "vsubuwm",        CONST,  subv4si3)
BU_ALTIVEC_2 (VSUBFP,         "vsubfp",         CONST,  subv4sf3)
BU_ALTIVEC_2 (VSUBCUW,        "vsubcuw",        CONST,  altivec_vsubcuw)
BU_ALTIVEC_2 (VSUBUBS,        "vsububs",        CONST,  altivec_vsububs)
BU_ALTIVEC_2 (VSUBSBS,        "vsubsbs",        CONST,  altivec_vsubsbs)
BU_ALTIVEC_2 (VSUBUHS,        "vsubuhs",        CONST,  altivec_vsubuhs)
BU_ALTIVEC_2 (VSUBSHS,        "vsubshs",        CONST,  altivec_vsubshs)
BU_ALTIVEC_2 (VSUBUWS,        "vsubuws",        CONST,  altivec_vsubuws)
BU_ALTIVEC_2 (VSUBSWS,        "vsubsws",        CONST,  altivec_vsubsws)
BU_ALTIVEC_2 (VSUM4UBS,       "vsum4ubs",       CONST,  altivec_vsum4ubs)
BU_ALTIVEC_2 (VSUM4SBS,       "vsum4sbs",       CONST,  altivec_vsum4sbs)
BU_ALTIVEC_2 (VSUM4SHS,       "vsum4shs",       CONST,  altivec_vsum4shs)
BU_ALTIVEC_2 (VSUM2SWS,       "vsum2sws",       CONST,  altivec_vsum2sws)
BU_ALTIVEC_2 (VSUMSWS,        "vsumsws",        CONST,  altivec_vsumsws)
BU_ALTIVEC_2 (VXOR,           "vxor",           CONST,  xorv4si3)
BU_ALTIVEC_2 (COPYSIGN_V4SF,  "copysignfp",     CONST,  vector_copysignv4sf3)

/* Altivec ABS functions.  */
BU_ALTIVEC_A (ABS_V4SI,       "abs_v4si",       CONST,  absv4si2)
BU_ALTIVEC_A (ABS_V8HI,       "abs_v8hi",       CONST,  absv8hi2)
BU_ALTIVEC_A (ABS_V4SF,       "abs_v4sf",       CONST,  absv4sf2)
BU_ALTIVEC_A (ABS_V16QI,      "abs_v16qi",      CONST,  absv16qi2)
BU_ALTIVEC_A (ABSS_V4SI,      "abss_v4si",      SAT,    altivec_abss_v4si)
BU_ALTIVEC_A (ABSS_V8HI,      "abss_v8hi",      SAT,    altivec_abss_v8hi)
BU_ALTIVEC_A (ABSS_V16QI,     "abss_v16qi",     SAT,    altivec_abss_v16qi)

/* 1 argument Altivec builtin functions.  */
BU_ALTIVEC_1 (VEXPTEFP,       "vexptefp",       FP,     altivec_vexptefp)
BU_ALTIVEC_1 (VLOGEFP,        "vlogefp",        FP,     altivec_vlogefp)
BU_ALTIVEC_1 (VREFP,          "vrefp",          FP,     rev4sf2)
BU_ALTIVEC_1 (VRFIM,          "vrfim",          FP,     vector_floorv4sf2)
BU_ALTIVEC_1 (VRFIN,          "vrfin",          FP,     altivec_vrfin)
BU_ALTIVEC_1 (VRFIP,          "vrfip",          FP,     vector_ceilv4sf2)
BU_ALTIVEC_1 (VRFIZ,          "vrfiz",          FP,     vector_btruncv4sf2)
BU_ALTIVEC_1 (VRSQRTFP,       "vrsqrtfp",       FP,     rsqrtv4sf2)
BU_ALTIVEC_1 (VRSQRTEFP,      "vrsqrtefp",      FP,     rsqrtev4sf2)
BU_ALTIVEC_1 (VSPLTISB,       "vspltisb",       CONST,  altivec_vspltisb)
BU_ALTIVEC_1 (VSPLTISH,       "vspltish",       CONST,  altivec_vspltish)
BU_ALTIVEC_1 (VSPLTISW,       "vspltisw",       CONST,  altivec_vspltisw)
BU_ALTIVEC_1 (VUPKHSB,        "vupkhsb",        CONST,  altivec_vupkhsb)
BU_ALTIVEC_1 (VUPKHPX,        "vupkhpx",        CONST,  altivec_vupkhpx)
BU_ALTIVEC_1 (VUPKHSH,        "vupkhsh",        CONST,  altivec_vupkhsh)
BU_ALTIVEC_1 (VUPKLSB,        "vupklsb",        CONST,  altivec_vupklsb)
BU_ALTIVEC_1 (VUPKLPX,        "vupklpx",        CONST,  altivec_vupklpx)
BU_ALTIVEC_1 (VUPKLSH,        "vupklsh",        CONST,  altivec_vupklsh)

BU_ALTIVEC_1 (FLOAT_V4SI_V4SF,    "float_sisf",     FP, floatv4siv4sf2)
BU_ALTIVEC_1 (UNSFLOAT_V4SI_V4SF, "uns_float_sisf", FP, floatunsv4siv4sf2)
BU_ALTIVEC_1 (FIX_V4SF_V4SI,      "fix_sfsi",       FP, fix_truncv4sfv4si2)
BU_ALTIVEC_1 (FIXUNS_V4SF_V4SI,   "fixuns_sfsi",    FP, fixuns_truncv4sfv4si2)

/* Altivec predicate functions.  */
BU_ALTIVEC_P (VCMPBFP_P,      "vcmpbfp_p",      CONST,  altivec_vcmpbfp_p)
BU_ALTIVEC_P (VCMPEQFP_P,     "vcmpeqfp_p",     CONST,  vector_eq_v4sf_p)
BU_ALTIVEC_P (VCMPGEFP_P,     "vcmpgefp_p",     CONST,  vector_ge_v4sf_p)
BU_ALTIVEC_P (VCMPGTFP_P,     "vcmpgtfp_p",     CONST,  vector_gt_v4sf_p)
BU_ALTIVEC_P (VCMPEQUW_P,     "vcmpequw_p",     CONST,  vector_eq_v4si_p)
BU_ALTIVEC_P (VCMPGTSW_P,     "vcmpgtsw_p",     CONST,  vector_gt_v4si_p)
BU_ALTIVEC_P (VCMPGTUW_P,     "vcmpgtuw_p",     CONST,  vector_gtu_v4si_p)
BU_ALTIVEC_P (VCMPEQUH_P,     "vcmpequh_p",     CONST,  vector_eq_v8hi_p)
BU_ALTIVEC_P (VCMPGTSH_P,     "vcmpgtsh_p",     CONST,  vector_gt_v8hi_p)
BU_ALTIVEC_P (VCMPGTUH_P,     "vcmpgtuh_p",     CONST,  vector_gtu_v8hi_p)
BU_ALTIVEC_P (VCMPEQUB_P,     "vcmpequb_p",     CONST,  vector_eq_v16qi_p)
BU_ALTIVEC_P (VCMPGTSB_P,     "vcmpgtsb_p",     CONST,  vector_gt_v16qi_p)
BU_ALTIVEC_P (VCMPGTUB_P,     "vcmpgtub_p",     CONST,  vector_gtu_v16qi_p)

/* AltiVec builtins that are handled as special cases.  */
BU_ALTIVEC_X (ST_INTERNAL_4si,  "st_internal_4si",  MEM)
BU_ALTIVEC_X (LD_INTERNAL_4si,  "ld_internal_4si",  MEM)
BU_ALTIVEC_X (ST_INTERNAL_8hi,  "st_internal_8hi",  MEM)
BU_ALTIVEC_X (LD_INTERNAL_8hi,  "ld_internal_8hi",  MEM)
BU_ALTIVEC_X (ST_INTERNAL_16qi, "st_internal_16qi", MEM)
BU_ALTIVEC_X (LD_INTERNAL_16qi, "ld_internal_16qi", MEM)
BU_ALTIVEC_X (ST_INTERNAL_4sf,  "st_internal_16qi", MEM)
BU_ALTIVEC_X (LD_INTERNAL_4sf,  "ld_internal_4sf",  MEM)
BU_ALTIVEC_X (ST_INTERNAL_2df,  "st_internal_4sf",  MEM)
BU_ALTIVEC_X (LD_INTERNAL_2df,  "ld_internal_2df",  MEM)
BU_ALTIVEC_X (ST_INTERNAL_2di,  "st_internal_2di",  MEM)
BU_ALTIVEC_X (LD_INTERNAL_2di,  "ld_internal_2di",  MEM)
BU_ALTIVEC_X (MTVSCR,           "mtvscr",           MISC)
BU_ALTIVEC_X (MFVSCR,           "mfvscr",           MISC)
BU_ALTIVEC_X (DSSALL,           "dssall",           MISC)
BU_ALTIVEC_X (DSS,              "dss",              MISC)
BU_ALTIVEC_X (LVSL,             "lvsl",             MEM)
BU_ALTIVEC_X (LVSR,             "lvsr",             MEM)
BU_ALTIVEC_X (LVEBX,            "lvebx",            MEM)
BU_ALTIVEC_X (LVEHX,            "lvehx",            MEM)
BU_ALTIVEC_X (LVEWX,            "lvewx",            MEM)
BU_ALTIVEC_X (LVXL,             "lvxl",             MEM)
BU_ALTIVEC_X (LVX,              "lvx",              MEM)
BU_ALTIVEC_X (STVX,             "stvx",             MEM)
BU_ALTIVEC_C (LVLX,             "lvlx",             MEM)
BU_ALTIVEC_C (LVLXL,            "lvlxl",            MEM)
BU_ALTIVEC_C (LVRX,             "lvrx",             MEM)
BU_ALTIVEC_C (LVRXL,            "lvrxl",            MEM)
BU_ALTIVEC_X (STVEBX,           "stvebx",           MEM)
BU_ALTIVEC_X (STVEHX,           "stvehx",           MEM)
BU_ALTIVEC_X (STVEWX,           "stvewx",           MEM)
BU_ALTIVEC_X (STVXL,            "stvxl",            MEM)
BU_ALTIVEC_C (STVLX,            "stvlx",            MEM)
BU_ALTIVEC_C (STVLXL,           "stvlxl",           MEM)
BU_ALTIVEC_C (STVRX,            "stvrx",            MEM)
BU_ALTIVEC_C (STVRXL,           "stvrxl",           MEM)
BU_ALTIVEC_X (MASK_FOR_LOAD,    "mask_for_load",    MISC)
BU_ALTIVEC_X (MASK_FOR_STORE,   "mask_for_store",   MISC)
BU_ALTIVEC_X (VEC_INIT_V4SI,    "vec_init_v4si",    CONST)
BU_ALTIVEC_X (VEC_INIT_V8HI,    "vec_init_v8hi",    CONST)
BU_ALTIVEC_X (VEC_INIT_V16QI,   "vec_init_v16qi",   CONST)
BU_ALTIVEC_X (VEC_INIT_V4SF,    "vec_init_v4sf",    CONST)
BU_ALTIVEC_X (VEC_SET_V4SI,     "vec_set_v4si",     CONST)
BU_ALTIVEC_X (VEC_SET_V8HI,     "vec_set_v8hi",     CONST)
BU_ALTIVEC_X (VEC_SET_V16QI,    "vec_set_v16qi",    CONST)
BU_ALTIVEC_X (VEC_SET_V4SF,     "vec_set_v4sf",     CONST)
BU_ALTIVEC_X (VEC_EXT_V4SI,     "vec_ext_v4si",     CONST)
BU_ALTIVEC_X (VEC_EXT_V8HI,     "vec_ext_v8hi",     CONST)
BU_ALTIVEC_X (VEC_EXT_V16QI,    "vec_ext_v16qi",    CONST)
BU_ALTIVEC_X (VEC_EXT_V4SF,     "vec_ext_v4sf",     CONST)

/* Altivec overloaded builtins.  */
/* For now, don't set the classification for overloaded functions.
   The function should be converted to the type specific instruction
   before we get to the point about classifying the builtin type.  */

/* 3 argument Altivec overloaded builtins.  */
BU_ALTIVEC_OVERLOAD_3 (MADD,       "madd")
BU_ALTIVEC_OVERLOAD_3 (MADDS,      "madds")
BU_ALTIVEC_OVERLOAD_3 (MLADD,      "mladd")
BU_ALTIVEC_OVERLOAD_3 (MRADDS,     "mradds")
BU_ALTIVEC_OVERLOAD_3 (MSUM,       "msum")
BU_ALTIVEC_OVERLOAD_3 (MSUMS,      "msums")
BU_ALTIVEC_OVERLOAD_3 (NMSUB,      "nmsub")
BU_ALTIVEC_OVERLOAD_3 (PERM,       "perm")
BU_ALTIVEC_OVERLOAD_3 (SEL,        "sel")
BU_ALTIVEC_OVERLOAD_3 (VMSUMMBM,   "vmsummbm")
BU_ALTIVEC_OVERLOAD_3 (VMSUMSHM,   "vmsumshm")
BU_ALTIVEC_OVERLOAD_3 (VMSUMSHS,   "vmsumshs")
BU_ALTIVEC_OVERLOAD_3 (VMSUMUBM,   "vmsumubm")
BU_ALTIVEC_OVERLOAD_3 (VMSUMUHM,   "vmsumuhm")
BU_ALTIVEC_OVERLOAD_3 (VMSUMUHS,   "vmsumuhs")

/* Altivec DST overloaded builtins.  */
BU_ALTIVEC_OVERLOAD_D (DST,        "dst")
BU_ALTIVEC_OVERLOAD_D (DSTT,       "dstt")
BU_ALTIVEC_OVERLOAD_D (DSTST,      "dstst")
BU_ALTIVEC_OVERLOAD_D (DSTSTT,     "dststt")

/* 2 argument Altivec overloaded builtins.  */
BU_ALTIVEC_OVERLOAD_2 (ADD,        "add")
BU_ALTIVEC_OVERLOAD_2 (ADDC,       "addc")
BU_ALTIVEC_OVERLOAD_2 (ADDS,       "adds")
BU_ALTIVEC_OVERLOAD_2 (AND,        "and")
BU_ALTIVEC_OVERLOAD_2 (ANDC,       "andc")
BU_ALTIVEC_OVERLOAD_2 (AVG,        "avg")
BU_ALTIVEC_OVERLOAD_2 (CMPB,       "cmpb")
BU_ALTIVEC_OVERLOAD_2 (CMPEQ,      "cmpeq")
BU_ALTIVEC_OVERLOAD_2 (CMPGE,      "cmpge")
BU_ALTIVEC_OVERLOAD_2 (CMPGT,      "cmpgt")
BU_ALTIVEC_OVERLOAD_2 (CMPLE,      "cmple")
BU_ALTIVEC_OVERLOAD_2 (CMPLT,      "cmplt")
BU_ALTIVEC_OVERLOAD_2 (COPYSIGN,   "copysign")
BU_ALTIVEC_OVERLOAD_2 (MAX,        "max")
BU_ALTIVEC_OVERLOAD_2 (MERGEH,     "mergeh")
BU_ALTIVEC_OVERLOAD_2 (MERGEL,     "mergel")
BU_ALTIVEC_OVERLOAD_2 (MIN,        "min")
BU_ALTIVEC_OVERLOAD_2 (MULE,       "mule")
BU_ALTIVEC_OVERLOAD_2 (MULO,       "mulo")
BU_ALTIVEC_OVERLOAD_2 (NOR,        "nor")
BU_ALTIVEC_OVERLOAD_2 (OR,         "or")
BU_ALTIVEC_OVERLOAD_2 (PACK,       "pack")
BU_ALTIVEC_OVERLOAD_2 (PACKPX,     "packpx")
BU_ALTIVEC_OVERLOAD_2 (PACKS,      "packs")
BU_ALTIVEC_OVERLOAD_2 (PACKSU,     "packsu")
BU_ALTIVEC_OVERLOAD_2 (RECIP,      "recipdiv")
BU_ALTIVEC_OVERLOAD_2 (RL,         "rl")
BU_ALTIVEC_OVERLOAD_2 (SL,         "sl")
BU_ALTIVEC_OVERLOAD_2 (SLL,        "sll")
BU_ALTIVEC_OVERLOAD_2 (SLO,        "slo")
BU_ALTIVEC_OVERLOAD_2 (SR,         "sr")
BU_ALTIVEC_OVERLOAD_2 (SRA,        "sra")
BU_ALTIVEC_OVERLOAD_2 (SRL,        "srl")
BU_ALTIVEC_OVERLOAD_2 (SRO,        "sro")
BU_ALTIVEC_OVERLOAD_2 (SUB,        "sub")
BU_ALTIVEC_OVERLOAD_2 (SUBC,       "subc")
BU_ALTIVEC_OVERLOAD_2 (SUBS,       "subs")
BU_ALTIVEC_OVERLOAD_2 (SUM2S,      "sum2s")
BU_ALTIVEC_OVERLOAD_2 (SUM4S,      "sum4s")
BU_ALTIVEC_OVERLOAD_2 (SUMS,       "sums")
BU_ALTIVEC_OVERLOAD_2 (VADDFP,     "vaddfp")
BU_ALTIVEC_OVERLOAD_2 (VADDSBS,    "vaddsbs")
BU_ALTIVEC_OVERLOAD_2 (VADDSHS,    "vaddshs")
BU_ALTIVEC_OVERLOAD_2 (VADDSWS,    "vaddsws")
BU_ALTIVEC_OVERLOAD_2 (VADDUBM,    "vaddubm")
BU_ALTIVEC_OVERLOAD_2 (VADDUBS,    "vaddubs")
BU_ALTIVEC_OVERLOAD_2 (VADDUHM,    "vadduhm")
BU_ALTIVEC_OVERLOAD_2 (VADDUHS,    "vadduhs")
BU_ALTIVEC_OVERLOAD_2 (VADDUWM,    "vadduwm")
BU_ALTIVEC_OVERLOAD_2 (VADDUWS,    "vadduws")
BU_ALTIVEC_OVERLOAD_2 (VAVGSB,     "vavgsb")
BU_ALTIVEC_OVERLOAD_2 (VAVGSH,     "vavgsh")
BU_ALTIVEC_OVERLOAD_2 (VAVGSW,     "vavgsw")
BU_ALTIVEC_OVERLOAD_2 (VAVGUB,     "vavgub")
BU_ALTIVEC_OVERLOAD_2 (VAVGUH,     "vavguh")
BU_ALTIVEC_OVERLOAD_2 (VAVGUW,     "vavguw")
BU_ALTIVEC_OVERLOAD_2 (VCMPEQFP,   "vcmpeqfp")
BU_ALTIVEC_OVERLOAD_2 (VCMPEQUB,   "vcmpequb")
BU_ALTIVEC_OVERLOAD_2 (VCMPEQUH,   "vcmpequh")
BU_ALTIVEC_OVERLOAD_2 (VCMPEQUW,   "vcmpequw")
BU_ALTIVEC_OVERLOAD_2 (VCMPGTFP,   "vcmpgtfp")
BU_ALTIVEC_OVERLOAD_2 (VCMPGTSB,   "vcmpgtsb")
BU_ALTIVEC_OVERLOAD_2 (VCMPGTSH,   "vcmpgtsh")
BU_ALTIVEC_OVERLOAD_2 (VCMPGTSW,   "vcmpgtsw")
BU_ALTIVEC_OVERLOAD_2 (VCMPGTUB,   "vcmpgtub")
BU_ALTIVEC_OVERLOAD_2 (VCMPGTUH,   "vcmpgtuh")
BU_ALTIVEC_OVERLOAD_2 (VCMPGTUW,   "vcmpgtuw")
BU_ALTIVEC_OVERLOAD_2 (VMAXFP,     "vmaxfp")
BU_ALTIVEC_OVERLOAD_2 (VMAXSB,     "vmaxsb")
BU_ALTIVEC_OVERLOAD_2 (VMAXSH,     "vmaxsh")
BU_ALTIVEC_OVERLOAD_2 (VMAXSW,     "vmaxsw")
BU_ALTIVEC_OVERLOAD_2 (VMAXUB,     "vmaxub")
BU_ALTIVEC_OVERLOAD_2 (VMAXUH,     "vmaxuh")
BU_ALTIVEC_OVERLOAD_2 (VMAXUW,     "vmaxuw")
BU_ALTIVEC_OVERLOAD_2 (VMINFP,     "vminfp")
BU_ALTIVEC_OVERLOAD_2 (VMINSB,     "vminsb")
BU_ALTIVEC_OVERLOAD_2 (VMINSH,     "vminsh")
BU_ALTIVEC_OVERLOAD_2 (VMINSW,     "vminsw")
BU_ALTIVEC_OVERLOAD_2 (VMINUB,     "vminub")
BU_ALTIVEC_OVERLOAD_2 (VMINUH,     "vminuh")
BU_ALTIVEC_OVERLOAD_2 (VMINUW,     "vminuw")
BU_ALTIVEC_OVERLOAD_2 (VMRGHB,     "vmrghb")
BU_ALTIVEC_OVERLOAD_2 (VMRGHH,     "vmrghh")
BU_ALTIVEC_OVERLOAD_2 (VMRGHW,     "vmrghw")
BU_ALTIVEC_OVERLOAD_2 (VMRGLB,     "vmrglb")
BU_ALTIVEC_OVERLOAD_2 (VMRGLH,     "vmrglh")
BU_ALTIVEC_OVERLOAD_2 (VMRGLW,     "vmrglw")
BU_ALTIVEC_OVERLOAD_2 (VMULESB,    "vmulesb")
BU_ALTIVEC_OVERLOAD_2 (VMULESH,    "vmulesh")
BU_ALTIVEC_OVERLOAD_2 (VMULEUB,    "vmuleub")
BU_ALTIVEC_OVERLOAD_2 (VMULEUH,    "vmuleuh")
BU_ALTIVEC_OVERLOAD_2 (VMULOSB,    "vmulosb")
BU_ALTIVEC_OVERLOAD_2 (VMULOSH,    "vmulosh")
BU_ALTIVEC_OVERLOAD_2 (VMULOUB,    "vmuloub")
BU_ALTIVEC_OVERLOAD_2 (VMULOUH,    "vmulouh")
BU_ALTIVEC_OVERLOAD_2 (VPKSHSS,    "vpkshss")
BU_ALTIVEC_OVERLOAD_2 (VPKSHUS,    "vpkshus")
BU_ALTIVEC_OVERLOAD_2 (VPKSWSS,    "vpkswss")
BU_ALTIVEC_OVERLOAD_2 (VPKSWUS,    "vpkswus")
BU_ALTIVEC_OVERLOAD_2 (VPKUHUM,    "vpkuhum")
BU_ALTIVEC_OVERLOAD_2 (VPKUHUS,    "vpkuhus")
BU_ALTIVEC_OVERLOAD_2 (VPKUWUM,    "vpkuwum")
BU_ALTIVEC_OVERLOAD_2 (VPKUWUS,    "vpkuwus")
BU_ALTIVEC_OVERLOAD_2 (VRLB,       "vrlb")
BU_ALTIVEC_OVERLOAD_2 (VRLH,       "vrlh")
BU_ALTIVEC_OVERLOAD_2 (VRLW,       "vrlw")
BU_ALTIVEC_OVERLOAD_2 (VSLB,       "vslb")
BU_ALTIVEC_OVERLOAD_2 (VSLH,       "vslh")
BU_ALTIVEC_OVERLOAD_2 (VSLW,       "vslw")
BU_ALTIVEC_OVERLOAD_2 (VSRAB,      "vsrab")
BU_ALTIVEC_OVERLOAD_2 (VSRAH,      "vsrah")
BU_ALTIVEC_OVERLOAD_2 (VSRAW,      "vsraw")
BU_ALTIVEC_OVERLOAD_2 (VSRB,       "vsrb")
BU_ALTIVEC_OVERLOAD_2 (VSRH,       "vsrh")
BU_ALTIVEC_OVERLOAD_2 (VSRW,       "vsrw")
BU_ALTIVEC_OVERLOAD_2 (VSUBFP,     "vsubfp")
BU_ALTIVEC_OVERLOAD_2 (VSUBSBS,    "vsubsbs")
BU_ALTIVEC_OVERLOAD_2 (VSUBSHS,    "vsubshs")
BU_ALTIVEC_OVERLOAD_2 (VSUBSWS,    "vsubsws")
BU_ALTIVEC_OVERLOAD_2 (VSUBUBM,    "vsububm")
BU_ALTIVEC_OVERLOAD_2 (VSUBUBS,    "vsububs")
BU_ALTIVEC_OVERLOAD_2 (VSUBUHM,    "vsubuhm")
BU_ALTIVEC_OVERLOAD_2 (VSUBUHS,    "vsubuhs")
BU_ALTIVEC_OVERLOAD_2 (VSUBUWM,    "vsubuwm")
BU_ALTIVEC_OVERLOAD_2 (VSUBUWS,    "vsubuws")
BU_ALTIVEC_OVERLOAD_2 (VSUM4SBS,   "vsum4sbs")
BU_ALTIVEC_OVERLOAD_2 (VSUM4SHS,   "vsum4shs")
BU_ALTIVEC_OVERLOAD_2 (VSUM4UBS,   "vsum4ubs")
BU_ALTIVEC_OVERLOAD_2 (XOR,        "xor")

/* 1 argument Altivec overloaded functions.  */
BU_ALTIVEC_OVERLOAD_1 (ABS,        "abs")
BU_ALTIVEC_OVERLOAD_1 (ABSS,       "abss")
BU_ALTIVEC_OVERLOAD_1 (CEIL,       "ceil")
BU_ALTIVEC_OVERLOAD_1 (EXPTE,      "expte")
BU_ALTIVEC_OVERLOAD_1 (FLOOR,      "floor")
BU_ALTIVEC_OVERLOAD_1 (LOGE,       "loge")
BU_ALTIVEC_OVERLOAD_1 (MTVSCR,     "mtvscr")
BU_ALTIVEC_OVERLOAD_1 (NEARBYINT,  "nearbyint")
BU_ALTIVEC_OVERLOAD_1 (RE,         "re")
BU_ALTIVEC_OVERLOAD_1 (RINT,       "rint")
BU_ALTIVEC_OVERLOAD_1 (ROUND,      "round")
BU_ALTIVEC_OVERLOAD_1 (RSQRT,      "rsqrt")
BU_ALTIVEC_OVERLOAD_1 (RSQRTE,     "rsqrte")
BU_ALTIVEC_OVERLOAD_1 (SQRT,       "sqrt")
BU_ALTIVEC_OVERLOAD_1 (TRUNC,      "trunc")
BU_ALTIVEC_OVERLOAD_1 (UNPACKH,    "unpackh")
BU_ALTIVEC_OVERLOAD_1 (UNPACKL,    "unpackl")
BU_ALTIVEC_OVERLOAD_1 (VUPKHPX,    "vupkhpx")
BU_ALTIVEC_OVERLOAD_1 (VUPKHSB,    "vupkhsb")
BU_ALTIVEC_OVERLOAD_1 (VUPKHSH,    "vupkhsh")
BU_ALTIVEC_OVERLOAD_1 (VUPKLPX,    "vupklpx")
BU_ALTIVEC_OVERLOAD_1 (VUPKLSB,    "vupklsb")
BU_ALTIVEC_OVERLOAD_1 (VUPKLSH,    "vupklsh")

/* Overloaded altivec predicates.  */
BU_ALTIVEC_OVERLOAD_P (VCMPEQ_P,   "vcmpeq_p")
BU_ALTIVEC_OVERLOAD_P (VCMPGT_P,   "vcmpgt_p")
BU_ALTIVEC_OVERLOAD_P (VCMPGE_P,   "vcmpge_p")

/* Overloaded Altivec builtins that are handled as special cases.  */
BU_ALTIVEC_OVERLOAD_X (CTF,        "ctf")
BU_ALTIVEC_OVERLOAD_X (CTS,        "cts")
BU_ALTIVEC_OVERLOAD_X (CTU,        "ctu")
BU_ALTIVEC_OVERLOAD_X (EXTRACT,    "extract")
BU_ALTIVEC_OVERLOAD_X (INSERT,     "insert")
BU_ALTIVEC_OVERLOAD_X (LD,         "ld")
BU_ALTIVEC_OVERLOAD_X (LDE,        "lde")
BU_ALTIVEC_OVERLOAD_X (LDL,        "ldl")
BU_ALTIVEC_OVERLOAD_X (LVEBX,      "lvebx")
BU_ALTIVEC_OVERLOAD_X (LVEHX,      "lvehx")
BU_ALTIVEC_OVERLOAD_X (LVEWX,      "lvewx")
BU_ALTIVEC_OVERLOAD_X (LVLX,       "lvlx")
BU_ALTIVEC_OVERLOAD_X (LVLXL,      "lvlxl")
BU_ALTIVEC_OVERLOAD_X (LVRX,       "lvrx")
BU_ALTIVEC_OVERLOAD_X (LVRXL,      "lvrxl")
BU_ALTIVEC_OVERLOAD_X (LVSL,       "lvsl")
BU_ALTIVEC_OVERLOAD_X (LVSR,       "lvsr")
BU_ALTIVEC_OVERLOAD_X (PROMOTE,    "promote")
BU_ALTIVEC_OVERLOAD_X (SLD,        "sld")
BU_ALTIVEC_OVERLOAD_X (SPLAT,      "splat")
BU_ALTIVEC_OVERLOAD_X (SPLATS,     "splats")
BU_ALTIVEC_OVERLOAD_X (ST,         "st")
BU_ALTIVEC_OVERLOAD_X (STE,        "ste")
BU_ALTIVEC_OVERLOAD_X (STEP,       "step")
BU_ALTIVEC_OVERLOAD_X (STL,        "stl")
BU_ALTIVEC_OVERLOAD_X (STVEBX,     "stvebx")
BU_ALTIVEC_OVERLOAD_X (STVEHX,     "stvehx")
BU_ALTIVEC_OVERLOAD_X (STVEWX,     "stvewx")
BU_ALTIVEC_OVERLOAD_X (STVLX,      "stvlx")
BU_ALTIVEC_OVERLOAD_X (STVLXL,     "stvlxl")
BU_ALTIVEC_OVERLOAD_X (STVRX,      "stvrx")
BU_ALTIVEC_OVERLOAD_X (STVRXL,     "stvrxl")
BU_ALTIVEC_OVERLOAD_X (VCFSX,      "vcfsx")
BU_ALTIVEC_OVERLOAD_X (VCFUX,      "vcfux")
BU_ALTIVEC_OVERLOAD_X (VSPLTB,     "vspltb")
BU_ALTIVEC_OVERLOAD_X (VSPLTH,     "vsplth")
BU_ALTIVEC_OVERLOAD_X (VSPLTW,     "vspltw")

/* 3 argument VSX builtins.  */
BU_VSX_3 (XVMADDSP,           "xvmaddsp",       CONST,  fmav4sf4)
BU_VSX_3 (XVMSUBSP,           "xvmsubsp",       CONST,  fmsv4sf4)
BU_VSX_3 (XVNMADDSP,          "xvnmaddsp",      CONST,  nfmav4sf4)
BU_VSX_3 (XVNMSUBSP,          "xvnmsubsp",      CONST,  nfmsv4sf4)

BU_VSX_3 (XVMADDDP,           "xvmadddp",       CONST,  fmav2df4)
BU_VSX_3 (XVMSUBDP,           "xvmsubdp",       CONST,  fmsv2df4)
BU_VSX_3 (XVNMADDDP,          "xvnmadddp",      CONST,  nfmav2df4)
BU_VSX_3 (XVNMSUBDP,          "xvnmsubdp",      CONST,  nfmsv2df4)

BU_VSX_3 (XXSEL_2DI,          "xxsel_2di",      CONST,  vector_select_v2di)
BU_VSX_3 (XXSEL_2DF,          "xxsel_2df",      CONST,  vector_select_v2df)
BU_VSX_3 (XXSEL_4SF,          "xxsel_4sf",      CONST,  vector_select_v4sf)
BU_VSX_3 (XXSEL_4SI,          "xxsel_4si",      CONST,  vector_select_v4si)
BU_VSX_3 (XXSEL_8HI,          "xxsel_8hi",      CONST,  vector_select_v8hi)
BU_VSX_3 (XXSEL_16QI,         "xxsel_16qi",     CONST,  vector_select_v16qi)
BU_VSX_3 (XXSEL_2DI_UNS,      "xxsel_2di_uns",  CONST,  vector_select_v2di_uns)
BU_VSX_3 (XXSEL_4SI_UNS,      "xxsel_4si_uns",  CONST,  vector_select_v4si_uns)
BU_VSX_3 (XXSEL_8HI_UNS,      "xxsel_8hi_uns",  CONST,  vector_select_v8hi_uns)
BU_VSX_3 (XXSEL_16QI_UNS,     "xxsel_16qi_uns", CONST,  vector_select_v16qi_uns)

BU_VSX_3 (VPERM_2DI,          "vperm_2di",      CONST,  altivec_vperm_v2di)
BU_VSX_3 (VPERM_2DF,          "vperm_2df",      CONST,  altivec_vperm_v2df)
BU_VSX_3 (VPERM_4SF,          "vperm_4sf",      CONST,  altivec_vperm_v4sf)
BU_VSX_3 (VPERM_4SI,          "vperm_4si",      CONST,  altivec_vperm_v4si)
BU_VSX_3 (VPERM_8HI,          "vperm_8hi",      CONST,  altivec_vperm_v8hi)
BU_VSX_3 (VPERM_16QI,         "vperm_16qi",     CONST,  altivec_vperm_v16qi)
BU_VSX_3 (VPERM_2DI_UNS,      "vperm_2di_uns",  CONST,  altivec_vperm_v2di_uns)
BU_VSX_3 (VPERM_4SI_UNS,      "vperm_4si_uns",  CONST,  altivec_vperm_v4si_uns)
BU_VSX_3 (VPERM_8HI_UNS,      "vperm_8hi_uns",  CONST,  altivec_vperm_v8hi_uns)
BU_VSX_3 (VPERM_16QI_UNS,     "vperm_16qi_uns", CONST,  altivec_vperm_v16qi_uns)

BU_VSX_3 (XXPERMDI_2DF,       "xxpermdi_2df",   CONST,  vsx_xxpermdi_v2df)
BU_VSX_3 (XXPERMDI_2DI,       "xxpermdi_2di",   CONST,  vsx_xxpermdi_v2di)
BU_VSX_3 (XXPERMDI_4SF,       "xxpermdi_4sf",   CONST,  vsx_xxpermdi_v4sf)
BU_VSX_3 (XXPERMDI_4SI,       "xxpermdi_4si",   CONST,  vsx_xxpermdi_v4si)
BU_VSX_3 (XXPERMDI_8HI,       "xxpermdi_8hi",   CONST,  vsx_xxpermdi_v8hi)
BU_VSX_3 (XXPERMDI_16QI,      "xxpermdi_16qi",  CONST,  vsx_xxpermdi_v16qi)
BU_VSX_3 (SET_2DF,            "set_2df",        CONST,  vsx_set_v2df)
BU_VSX_3 (SET_2DI,            "set_2di",        CONST,  vsx_set_v2di)
BU_VSX_3 (XXSLDWI_2DI,        "xxsldwi_2di",    CONST,  vsx_xxsldwi_v2di)
BU_VSX_3 (XXSLDWI_2DF,        "xxsldwi_2df",    CONST,  vsx_xxsldwi_v2df)
BU_VSX_3 (XXSLDWI_4SF,        "xxsldwi_4sf",    CONST,  vsx_xxsldwi_v4sf)
BU_VSX_3 (XXSLDWI_4SI,        "xxsldwi_4si",    CONST,  vsx_xxsldwi_v4si)
BU_VSX_3 (XXSLDWI_8HI,        "xxsldwi_8hi",    CONST,  vsx_xxsldwi_v8hi)
BU_VSX_3 (XXSLDWI_16QI,       "xxsldwi_16qi",   CONST,  vsx_xxsldwi_v16qi)

/* 2 argument VSX builtins.  */
BU_VSX_2 (XVADDDP,            "xvadddp",        FP,     addv2df3)
BU_VSX_2 (XVSUBDP,            "xvsubdp",        FP,     subv2df3)
BU_VSX_2 (XVMULDP,            "xvmuldp",        FP,     mulv2df3)
BU_VSX_2 (XVDIVDP,            "xvdivdp",        FP,     divv2df3)
BU_VSX_2 (RECIP_V2DF,         "xvrecipdivdp",   FP,     recipv2df3)
BU_VSX_2 (XVMINDP,            "xvmindp",        CONST,  sminv2df3)
BU_VSX_2 (XVMAXDP,            "xvmaxdp",        CONST,  smaxv2df3)
BU_VSX_2 (XVTDIVDP_FE,        "xvtdivdp_fe",    CONST,  vsx_tdivv2df3_fe)
BU_VSX_2 (XVTDIVDP_FG,        "xvtdivdp_fg",    CONST,  vsx_tdivv2df3_fg)
BU_VSX_2 (XVCMPEQDP,          "xvcmpeqdp",      CONST,  vector_eqv2df)
BU_VSX_2 (XVCMPGTDP,          "xvcmpgtdp",      CONST,  vector_gtv2df)
BU_VSX_2 (XVCMPGEDP,          "xvcmpgedp",      CONST,  vector_gev2df)

BU_VSX_2 (XVADDSP,            "xvaddsp",        FP,     addv4sf3)
BU_VSX_2 (XVSUBSP,            "xvsubsp",        FP,     subv4sf3)
BU_VSX_2 (XVMULSP,            "xvmulsp",        FP,     mulv4sf3)
BU_VSX_2 (XVDIVSP,            "xvdivsp",        FP,     divv4sf3)
BU_VSX_2 (RECIP_V4SF,         "xvrecipdivsp",   FP,     recipv4sf3)
BU_VSX_2 (XVMINSP,            "xvminsp",        CONST,  sminv4sf3)
BU_VSX_2 (XVMAXSP,            "xvmaxsp",        CONST,  smaxv4sf3)
BU_VSX_2 (XVTDIVSP_FE,        "xvtdivsp_fe",    CONST,  vsx_tdivv4sf3_fe)
BU_VSX_2 (XVTDIVSP_FG,        "xvtdivsp_fg",    CONST,  vsx_tdivv4sf3_fg)
BU_VSX_2 (XVCMPEQSP,          "xvcmpeqsp",      CONST,  vector_eqv4sf)
BU_VSX_2 (XVCMPGTSP,          "xvcmpgtsp",      CONST,  vector_gtv4sf)
BU_VSX_2 (XVCMPGESP,          "xvcmpgesp",      CONST,  vector_gev4sf)

BU_VSX_2 (XSMINDP,            "xsmindp",        CONST,  smindf3)
BU_VSX_2 (XSMAXDP,            "xsmaxdp",        CONST,  smaxdf3)
BU_VSX_2 (XSTDIVDP_FE,        "xstdivdp_fe",    CONST,  vsx_tdivdf3_fe)
BU_VSX_2 (XSTDIVDP_FG,        "xstdivdp_fg",    CONST,  vsx_tdivdf3_fg)
BU_VSX_2 (CPSGNDP,            "cpsgndp",        CONST,  vector_copysignv2df3)
BU_VSX_2 (CPSGNSP,            "cpsgnsp",        CONST,  vector_copysignv4sf3)

BU_VSX_2 (CONCAT_2DF,         "concat_2df",     CONST,  vsx_concat_v2df)
BU_VSX_2 (CONCAT_2DI,         "concat_2di",     CONST,  vsx_concat_v2di)
BU_VSX_2 (SPLAT_2DF,          "splat_2df",      CONST,  vsx_splat_v2df)
BU_VSX_2 (SPLAT_2DI,          "splat_2di",      CONST,  vsx_splat_v2di)
BU_VSX_2 (XXMRGHW_4SF,        "xxmrghw",        CONST,  vsx_xxmrghw_v4sf)
BU_VSX_2 (XXMRGHW_4SI,        "xxmrghw_4si",    CONST,  vsx_xxmrghw_v4si)
BU_VSX_2 (XXMRGLW_4SF,        "xxmrglw",        CONST,  vsx_xxmrglw_v4sf)
BU_VSX_2 (XXMRGLW_4SI,        "xxmrglw_4si",    CONST,  vsx_xxmrglw_v4si)
BU_VSX_2 (VEC_MERGEL_V2DF,    "mergel_2df",     CONST,  vsx_mergel_v2df)
BU_VSX_2 (VEC_MERGEL_V2DI,    "mergel_2di",     CONST,  vsx_mergel_v2di)
BU_VSX_2 (VEC_MERGEH_V2DF,    "mergeh_2df",     CONST,  vsx_mergeh_v2df)
BU_VSX_2 (VEC_MERGEH_V2DI,    "mergeh_2di",     CONST,  vsx_mergeh_v2di)

/* VSX abs builtin functions.  */
BU_VSX_A (XVABSDP,            "xvabsdp",        CONST,  absv2df2)
BU_VSX_A (XVNABSDP,           "xvnabsdp",       CONST,  vsx_nabsv2df2)
BU_VSX_A (XVABSSP,            "xvabssp",        CONST,  absv4sf2)
BU_VSX_A (XVNABSSP,           "xvnabssp",       CONST,  vsx_nabsv4sf2)

/* 1 argument VSX builtin functions.  */
BU_VSX_1 (XVNEGDP,            "xvnegdp",        CONST,  negv2df2)
BU_VSX_1 (XVSQRTDP,           "xvsqrtdp",       CONST,  sqrtv2df2)
BU_VSX_1 (RSQRT_2DF,          "xvrsqrtdp",      CONST,  rsqrtv2df2)
BU_VSX_1 (XVRSQRTEDP,         "xvrsqrtedp",     CONST,  rsqrtev2df2)
BU_VSX_1 (XVTSQRTDP_FE,       "xvtsqrtdp_fe",   CONST,  vsx_tsqrtv2df2_fe)
BU_VSX_1 (XVTSQRTDP_FG,       "xvtsqrtdp_fg",   CONST,  vsx_tsqrtv2df2_fg)
BU_VSX_1 (XVREDP,             "xvredp",         CONST,  vsx_frev2df2)

BU_VSX_1 (XVNEGSP,            "xvnegsp",        CONST,  negv4sf2)
BU_VSX_1 (XVSQRTSP,           "xvsqrtsp",       CONST,  sqrtv4sf2)
BU_VSX_1 (RSQRT_4SF,          "xvrsqrtsp",      CONST,  rsqrtv4sf2)
BU_VSX_1 (XVRSQRTESP,         "xvrsqrtesp",     CONST,  rsqrtev4sf2)
BU_VSX_1 (XVTSQRTSP_FE,       "xvtsqrtsp_fe",   CONST,  vsx_tsqrtv4sf2_fe)
BU_VSX_1 (XVTSQRTSP_FG,       "xvtsqrtsp_fg",   CONST,  vsx_tsqrtv4sf2_fg)
BU_VSX_1 (XVRESP,             "xvresp",         CONST,  vsx_frev4sf2)

BU_VSX_1 (XSCVDPSP,           "xscvdpsp",       CONST,  vsx_xscvdpsp)
BU_VSX_1 (XSCVSPDP,           "xscvspdp",       CONST,  vsx_xscvdpsp)
BU_VSX_1 (XVCVDPSP,           "xvcvdpsp",       CONST,  vsx_xvcvdpsp)
BU_VSX_1 (XVCVSPDP,           "xvcvspdp",       CONST,  vsx_xvcvspdp)
BU_VSX_1 (XSTSQRTDP_FE,       "xstsqrtdp_fe",   CONST,  vsx_tsqrtdf2_fe)
BU_VSX_1 (XSTSQRTDP_FG,       "xstsqrtdp_fg",   CONST,  vsx_tsqrtdf2_fg)

BU_VSX_1 (XVCVDPSXDS,         "xvcvdpsxds",     CONST,  vsx_fix_truncv2dfv2di2)
BU_VSX_1 (XVCVDPUXDS,         "xvcvdpuxds",     CONST,  vsx_fixuns_truncv2dfv2di2)
BU_VSX_1 (XVCVDPUXDS_UNS,     "xvcvdpuxds_uns", CONST,  vsx_fixuns_truncv2dfv2di2)
BU_VSX_1 (XVCVSXDDP,          "xvcvsxddp",      CONST,  vsx_floatv2div2df2)
BU_VSX_1 (XVCVUXDDP,          "xvcvuxddp",      CONST,  vsx_floatunsv2div2df2)
BU_VSX_1 (XVCVUXDDP_UNS,       "xvcvuxddp_uns", CONST,  vsx_floatunsv2div2df2)

BU_VSX_1 (XVCVSPSXWS,         "xvcvspsxws",     CONST,  vsx_fix_truncv4sfv4si2)
BU_VSX_1 (XVCVSPUXWS,         "xvcvspuxws",     CONST,  vsx_fixuns_truncv4sfv4si2)
BU_VSX_1 (XVCVSXWSP,          "xvcvsxwsp",      CONST,  vsx_floatv4siv4sf2)
BU_VSX_1 (XVCVUXWSP,          "xvcvuxwsp",      CONST,  vsx_floatunsv4siv4sf2)

BU_VSX_1 (XVCVDPSXWS,         "xvcvdpsxws",     CONST,  vsx_xvcvdpsxws)
BU_VSX_1 (XVCVDPUXWS,         "xvcvdpuxws",     CONST,  vsx_xvcvdpuxws)
BU_VSX_1 (XVCVSXWDP,          "xvcvsxwdp",      CONST,  vsx_xvcvsxwdp)
BU_VSX_1 (XVCVUXWDP,          "xvcvuxwdp",      CONST,  vsx_xvcvuxwdp)
BU_VSX_1 (XVRDPI,             "xvrdpi",         CONST,  vsx_xvrdpi)
BU_VSX_1 (XVRDPIC,            "xvrdpic",        CONST,  vsx_xvrdpic)
BU_VSX_1 (XVRDPIM,            "xvrdpim",        CONST,  vsx_floorv2df2)
BU_VSX_1 (XVRDPIP,            "xvrdpip",        CONST,  vsx_ceilv2df2)
BU_VSX_1 (XVRDPIZ,            "xvrdpiz",        CONST,  vsx_btruncv2df2)

BU_VSX_1 (XVCVSPSXDS,         "xvcvspsxds",     CONST,  vsx_xvcvspsxds)
BU_VSX_1 (XVCVSPUXDS,         "xvcvspuxds",     CONST,  vsx_xvcvspuxds)
BU_VSX_1 (XVCVSXDSP,          "xvcvsxdsp",      CONST,  vsx_xvcvsxdsp)
BU_VSX_1 (XVCVUXDSP,          "xvcvuxdsp",      CONST,  vsx_xvcvuxdsp)
BU_VSX_1 (XVRSPI,             "xvrspi",         CONST,  vsx_xvrspi)
BU_VSX_1 (XVRSPIC,            "xvrspic",        CONST,  vsx_xvrspic)
BU_VSX_1 (XVRSPIM,            "xvrspim",        CONST,  vsx_floorv4sf2)
BU_VSX_1 (XVRSPIP,            "xvrspip",        CONST,  vsx_ceilv4sf2)
BU_VSX_1 (XVRSPIZ,            "xvrspiz",        CONST,  vsx_btruncv4sf2)

BU_VSX_1 (XSRDPI,             "xsrdpi",         CONST,  vsx_xsrdpi)
BU_VSX_1 (XSRDPIC,            "xsrdpic",        CONST,  vsx_xsrdpic)
BU_VSX_1 (XSRDPIM,            "xsrdpim",        CONST,  vsx_floordf2)
BU_VSX_1 (XSRDPIP,            "xsrdpip",        CONST,  vsx_ceildf2)
BU_VSX_1 (XSRDPIZ,            "xsrdpiz",        CONST,  vsx_btruncdf2)

/* VSX predicate functions.  */
BU_VSX_P (XVCMPEQSP_P,        "xvcmpeqsp_p",    CONST,  vector_eq_v4sf_p)
BU_VSX_P (XVCMPGESP_P,        "xvcmpgesp_p",    CONST,  vector_ge_v4sf_p)
BU_VSX_P (XVCMPGTSP_P,        "xvcmpgtsp_p",    CONST,  vector_gt_v4sf_p)
BU_VSX_P (XVCMPEQDP_P,        "xvcmpeqdp_p",    CONST,  vector_eq_v2df_p)
BU_VSX_P (XVCMPGEDP_P,        "xvcmpgedp_p",    CONST,  vector_ge_v2df_p)
BU_VSX_P (XVCMPGTDP_P,        "xvcmpgtdp_p",    CONST,  vector_gt_v2df_p)

/* VSX builtins that are handled as special cases.  */
BU_VSX_X (LXSDX,              "lxsdx",          MEM)
BU_VSX_X (LXVD2X_V2DF,        "lxvd2x_v2df",    MEM)
BU_VSX_X (LXVD2X_V2DI,        "lxvd2x_v2di",    MEM)
BU_VSX_X (LXVDSX,             "lxvdsx",         MEM)
BU_VSX_X (LXVW4X_V4SF,        "lxvw4x_v4sf",    MEM)
BU_VSX_X (LXVW4X_V4SI,        "lxvw4x_v4si",    MEM)
BU_VSX_X (LXVW4X_V8HI,        "lxvw4x_v8hi",    MEM)
BU_VSX_X (LXVW4X_V16QI,       "lxvw4x_v16qi",   MEM)
BU_VSX_X (STXSDX,             "stxsdx",         MEM)
BU_VSX_X (STXVD2X_V2DF,       "stxsdx_v2df",    MEM)
BU_VSX_X (STXVD2X_V2DI,       "stxsdx_v2di",    MEM)
BU_VSX_X (STXVW4X_V4SF,       "stxsdx_v4sf",    MEM)
BU_VSX_X (STXVW4X_V4SI,       "stxsdx_v4si",    MEM)
BU_VSX_X (STXVW4X_V8HI,       "stxsdx_v8hi",    MEM)
BU_VSX_X (STXVW4X_V16QI,      "stxsdx_v16qi",   MEM)
BU_VSX_X (XSABSDP,            "xsabsdp",        CONST)
BU_VSX_X (XSADDDP,            "xsadddp",        FP)
BU_VSX_X (XSCMPODP,           "xscmpodp",       FP)
BU_VSX_X (XSCMPUDP,           "xscmpudp",       FP)
BU_VSX_X (XSCVDPSXDS,         "xscvdpsxds",     FP)
BU_VSX_X (XSCVDPSXWS,         "xscvdpsxws",     FP)
BU_VSX_X (XSCVDPUXDS,         "xscvdpuxds",     FP)
BU_VSX_X (XSCVDPUXWS,         "xscvdpuxws",     FP)
BU_VSX_X (XSCVSXDDP,          "xscvsxddp",      FP)
BU_VSX_X (XSCVUXDDP,          "xscvuxddp",      FP)
BU_VSX_X (XSDIVDP,            "xsdivdp",        FP)
BU_VSX_X (XSMADDADP,          "xsmaddadp",      FP)
BU_VSX_X (XSMADDMDP,          "xsmaddmdp",      FP)
BU_VSX_X (XSMOVDP,            "xsmovdp",        FP)
BU_VSX_X (XSMSUBADP,          "xsmsubadp",      FP)
BU_VSX_X (XSMSUBMDP,          "xsmsubmdp",      FP)
BU_VSX_X (XSMULDP,            "xsmuldp",        FP)
BU_VSX_X (XSNABSDP,           "xsnabsdp",       FP)
BU_VSX_X (XSNEGDP,            "xsnegdp",        FP)
BU_VSX_X (XSNMADDADP,         "xsnmaddadp",     FP)
BU_VSX_X (XSNMADDMDP,         "xsnmaddmdp",     FP)
BU_VSX_X (XSNMSUBADP,         "xsnmsubadp",     FP)
BU_VSX_X (XSNMSUBMDP,         "xsnmsubmdp",     FP)
BU_VSX_X (XSSUBDP,            "xssubdp",        FP)
BU_VSX_X (VEC_INIT_V2DF,      "vec_init_v2df",  CONST)
BU_VSX_X (VEC_INIT_V2DI,      "vec_init_v2di",  CONST)
BU_VSX_X (VEC_SET_V2DF,       "vec_set_v2df",   CONST)
BU_VSX_X (VEC_SET_V2DI,       "vec_set_v2di",   CONST)
BU_VSX_X (VEC_EXT_V2DF,       "vec_ext_v2df",   CONST)
BU_VSX_X (VEC_EXT_V2DI,       "vec_ext_v2di",   CONST)

/* VSX overloaded builtins, add the overloaded functions not present in
   Altivec.  */

/* 3 argument VSX overloaded builtins.  */
BU_VSX_OVERLOAD_3  (MSUB,     "msub")
BU_VSX_OVERLOAD_3  (NMADD,    "nmadd")
BU_VSX_OVERLOAD_3V (XXPERMDI, "xxpermdi")
BU_VSX_OVERLOAD_3V (XXSLDWI,  "xxsldwi")

/* 2 argument VSX overloaded builtin functions.  */
BU_VSX_OVERLOAD_2 (MUL,      "mul")
BU_VSX_OVERLOAD_2 (DIV,      "div")
BU_VSX_OVERLOAD_2 (XXMRGHW,  "xxmrghw")
BU_VSX_OVERLOAD_2 (XXMRGLW,  "xxmrglw")
BU_VSX_OVERLOAD_2 (XXSPLTD,  "xxspltd")
BU_VSX_OVERLOAD_2 (XXSPLTW,  "xxspltw")

/* VSX builtins that are handled as special cases.  */
BU_VSX_OVERLOAD_X (LD,       "ld")
BU_VSX_OVERLOAD_X (ST,       "st")

/* 3 argument paired floating point builtins.  */
BU_PAIRED_3 (MSUB,            "msub",           FP,     fmsv2sf4)
BU_PAIRED_3 (MADD,            "madd",           FP,     fmav2sf4)
BU_PAIRED_3 (MADDS0,          "madds0",         FP,     paired_madds0)
BU_PAIRED_3 (MADDS1,          "madds1",         FP,     paired_madds1)
BU_PAIRED_3 (NMSUB,           "nmsub",          FP,     nfmsv2sf4)
BU_PAIRED_3 (NMADD,           "nmadd",          FP,     nfmav2sf4)
BU_PAIRED_3 (SUM0,            "sum0",           FP,     paired_sum0)
BU_PAIRED_3 (SUM1,            "sum1",           FP,     paired_sum1)
BU_PAIRED_3 (SELV2SF4,        "selv2sf4",       CONST,  selv2sf4)

/* 2 argument paired floating point builtins.  */
BU_PAIRED_2 (DIVV2SF3,        "divv2sf3",       FP,     paired_divv2sf3)
BU_PAIRED_2 (ADDV2SF3,        "addv2sf3",       FP,     paired_addv2sf3)
BU_PAIRED_2 (SUBV2SF3,        "subv2sf3",       FP,     paired_subv2sf3)
BU_PAIRED_2 (MULV2SF3,        "mulv2sf3",       FP,     paired_mulv2sf3)
BU_PAIRED_2 (MULS0,           "muls0",          FP,     paired_muls0)
BU_PAIRED_2 (MULS1,           "muls1",          FP,     paired_muls1)
BU_PAIRED_2 (MERGE00,         "merge00",        CONST,  paired_merge00)
BU_PAIRED_2 (MERGE01,         "merge01",        CONST,  paired_merge01)
BU_PAIRED_2 (MERGE10,         "merge10",        CONST,  paired_merge10)
BU_PAIRED_2 (MERGE11,         "merge11",        CONST,  paired_merge11)

/* 1 argument paired floating point builtin functions.  */
BU_PAIRED_1 (ABSV2SF2,        "absv2sf2",       CONST,  paired_absv2sf2)
BU_PAIRED_1 (NABSV2SF2,       "nabsv2sf2",      CONST,  nabsv2sf2)
BU_PAIRED_1 (NEGV2SF2,        "negv2sf2",       CONST,  paired_negv2sf2)
BU_PAIRED_1 (SQRTV2SF2,       "sqrtv2sf2",      FP,     sqrtv2sf2)
BU_PAIRED_1 (RESV2SF,         "resv2sf2",       FP,     resv2sf2)

/* PAIRED builtins that are handled as special cases.  */
BU_PAIRED_X (STX,             "stx",            MISC)
BU_PAIRED_X (LX,              "lx",             MISC)

/* Paired predicates.  */
BU_PAIRED_P (CMPU0,     "cmpu0",        CONST,  paired_cmpu0)
BU_PAIRED_P (CMPU1,     "cmpu1",        CONST,  paired_cmpu1)

/* PowerPC E500 builtins (SPE).  */

BU_SPE_2 (EVADDW,       "evaddw",       MISC,   addv2si3)
BU_SPE_2 (EVAND,        "evand",        MISC,   andv2si3)
BU_SPE_2 (EVANDC,       "evandc",       MISC,   spe_evandc)
BU_SPE_2 (EVDIVWS,      "evdivws",      MISC,   divv2si3)
BU_SPE_2 (EVDIVWU,      "evdivwu",      MISC,   spe_evdivwu)
BU_SPE_2 (EVEQV,        "eveqv",        MISC,   spe_eveqv)
BU_SPE_2 (EVFSADD,      "evfsadd",      MISC,   spe_evfsadd)
BU_SPE_2 (EVFSDIV,      "evfsdiv",      MISC,   spe_evfsdiv)
BU_SPE_2 (EVFSMUL,      "evfsmul",      MISC,   spe_evfsmul)
BU_SPE_2 (EVFSSUB,      "evfssub",      MISC,   spe_evfssub)
BU_SPE_2 (EVMERGEHI,    "evmergehi",    MISC,   spe_evmergehi)
BU_SPE_2 (EVMERGEHILO,  "evmergehilo",  MISC,   spe_evmergehilo)
BU_SPE_2 (EVMERGELO,    "evmergelo",    MISC,   spe_evmergelo)
BU_SPE_2 (EVMERGELOHI,  "evmergelohi",  MISC,   spe_evmergelohi)
BU_SPE_2 (EVMHEGSMFAA,  "evmhegsmfaa",  MISC,   spe_evmhegsmfaa)
BU_SPE_2 (EVMHEGSMFAN,  "evmhegsmfan",  MISC,   spe_evmhegsmfan)
BU_SPE_2 (EVMHEGSMIAA,  "evmhegsmiaa",  MISC,   spe_evmhegsmiaa)
BU_SPE_2 (EVMHEGSMIAN,  "evmhegsmian",  MISC,   spe_evmhegsmian)
BU_SPE_2 (EVMHEGUMIAA,  "evmhegumiaa",  MISC,   spe_evmhegumiaa)
BU_SPE_2 (EVMHEGUMIAN,  "evmhegumian",  MISC,   spe_evmhegumian)
BU_SPE_2 (EVMHESMF,     "evmhesmf",     MISC,   spe_evmhesmf)
BU_SPE_2 (EVMHESMFA,    "evmhesmfa",    MISC,   spe_evmhesmfa)
BU_SPE_2 (EVMHESMFAAW,  "evmhesmfaaw",  MISC,   spe_evmhesmfaaw)
BU_SPE_2 (EVMHESMFANW,  "evmhesmfanw",  MISC,   spe_evmhesmfanw)
BU_SPE_2 (EVMHESMI,     "evmhesmi",     MISC,   spe_evmhesmi)
BU_SPE_2 (EVMHESMIA,    "evmhesmia",    MISC,   spe_evmhesmia)
BU_SPE_2 (EVMHESMIAAW,  "evmhesmiaaw",  MISC,   spe_evmhesmiaaw)
BU_SPE_2 (EVMHESMIANW,  "evmhesmianw",  MISC,   spe_evmhesmianw)
BU_SPE_2 (EVMHESSF,     "evmhessf",     MISC,   spe_evmhessf)
BU_SPE_2 (EVMHESSFA,    "evmhessfa",    MISC,   spe_evmhessfa)
BU_SPE_2 (EVMHESSFAAW,  "evmhessfaaw",  MISC,   spe_evmhessfaaw)
BU_SPE_2 (EVMHESSFANW,  "evmhessfanw",  MISC,   spe_evmhessfanw)
BU_SPE_2 (EVMHESSIAAW,  "evmhessiaaw",  MISC,   spe_evmhessiaaw)
BU_SPE_2 (EVMHESSIANW,  "evmhessianw",  MISC,   spe_evmhessianw)
BU_SPE_2 (EVMHEUMI,     "evmheumi",     MISC,   spe_evmheumi)
BU_SPE_2 (EVMHEUMIA,    "evmheumia",    MISC,   spe_evmheumia)
BU_SPE_2 (EVMHEUMIAAW,  "evmheumiaaw",  MISC,   spe_evmheumiaaw)
BU_SPE_2 (EVMHEUMIANW,  "evmheumianw",  MISC,   spe_evmheumianw)
BU_SPE_2 (EVMHEUSIAAW,  "evmheusiaaw",  MISC,   spe_evmheusiaaw)
BU_SPE_2 (EVMHEUSIANW,  "evmheusianw",  MISC,   spe_evmheusianw)
BU_SPE_2 (EVMHOGSMFAA,  "evmhogsmfaa",  MISC,   spe_evmhogsmfaa)
BU_SPE_2 (EVMHOGSMFAN,  "evmhogsmfan",  MISC,   spe_evmhogsmfan)
BU_SPE_2 (EVMHOGSMIAA,  "evmhogsmiaa",  MISC,   spe_evmhogsmiaa)
BU_SPE_2 (EVMHOGSMIAN,  "evmhogsmian",  MISC,   spe_evmhogsmian)
BU_SPE_2 (EVMHOGUMIAA,  "evmhogumiaa",  MISC,   spe_evmhogumiaa)
BU_SPE_2 (EVMHOGUMIAN,  "evmhogumian",  MISC,   spe_evmhogumian)
BU_SPE_2 (EVMHOSMF,     "evmhosmf",     MISC,   spe_evmhosmf)
BU_SPE_2 (EVMHOSMFA,    "evmhosmfa",    MISC,   spe_evmhosmfa)
BU_SPE_2 (EVMHOSMFAAW,  "evmhosmfaaw",  MISC,   spe_evmhosmfaaw)
BU_SPE_2 (EVMHOSMFANW,  "evmhosmfanw",  MISC,   spe_evmhosmfanw)
BU_SPE_2 (EVMHOSMI,     "evmhosmi",     MISC,   spe_evmhosmi)
BU_SPE_2 (EVMHOSMIA,    "evmhosmia",    MISC,   spe_evmhosmia)
BU_SPE_2 (EVMHOSMIAAW,  "evmhosmiaaw",  MISC,   spe_evmhosmiaaw)
BU_SPE_2 (EVMHOSMIANW,  "evmhosmianw",  MISC,   spe_evmhosmianw)
BU_SPE_2 (EVMHOSSF,     "evmhossf",     MISC,   spe_evmhossf)
BU_SPE_2 (EVMHOSSFA,    "evmhossfa",    MISC,   spe_evmhossfa)
BU_SPE_2 (EVMHOSSFAAW,  "evmhossfaaw",  MISC,   spe_evmhossfaaw)
BU_SPE_2 (EVMHOSSFANW,  "evmhossfanw",  MISC,   spe_evmhossfanw)
BU_SPE_2 (EVMHOSSIAAW,  "evmhossiaaw",  MISC,   spe_evmhossiaaw)
BU_SPE_2 (EVMHOSSIANW,  "evmhossianw",  MISC,   spe_evmhossianw)
BU_SPE_2 (EVMHOUMI,     "evmhoumi",     MISC,   spe_evmhoumi)
BU_SPE_2 (EVMHOUMIA,    "evmhoumia",    MISC,   spe_evmhoumia)
BU_SPE_2 (EVMHOUMIAAW,  "evmhoumiaaw",  MISC,   spe_evmhoumiaaw)
BU_SPE_2 (EVMHOUMIANW,  "evmhoumianw",  MISC,   spe_evmhoumianw)
BU_SPE_2 (EVMHOUSIAAW,  "evmhousiaaw",  MISC,   spe_evmhousiaaw)
BU_SPE_2 (EVMHOUSIANW,  "evmhousianw",  MISC,   spe_evmhousianw)
BU_SPE_2 (EVMWHSMF,     "evmwhsmf",     MISC,   spe_evmwhsmf)
BU_SPE_2 (EVMWHSMFA,    "evmwhsmfa",    MISC,   spe_evmwhsmfa)
BU_SPE_2 (EVMWHSMI,     "evmwhsmi",     MISC,   spe_evmwhsmi)
BU_SPE_2 (EVMWHSMIA,    "evmwhsmia",    MISC,   spe_evmwhsmia)
BU_SPE_2 (EVMWHSSF,     "evmwhssf",     MISC,   spe_evmwhssf)
BU_SPE_2 (EVMWHSSFA,    "evmwhssfa",    MISC,   spe_evmwhssfa)
BU_SPE_2 (EVMWHUMI,     "evmwhumi",     MISC,   spe_evmwhumi)
BU_SPE_2 (EVMWHUMIA,    "evmwhumia",    MISC,   spe_evmwhumia)
BU_SPE_2 (EVMWLSMIAAW,  "evmwlsmiaaw",  MISC,   spe_evmwlsmiaaw)
BU_SPE_2 (EVMWLSMIANW,  "evmwlsmianw",  MISC,   spe_evmwlsmianw)
BU_SPE_2 (EVMWLSSIAAW,  "evmwlssiaaw",  MISC,   spe_evmwlssiaaw)
BU_SPE_2 (EVMWLSSIANW,  "evmwlssianw",  MISC,   spe_evmwlssianw)
BU_SPE_2 (EVMWLUMI,     "evmwlumi",     MISC,   spe_evmwlumi)
BU_SPE_2 (EVMWLUMIA,    "evmwlumia",    MISC,   spe_evmwlumia)
BU_SPE_2 (EVMWLUMIAAW,  "evmwlumiaaw",  MISC,   spe_evmwlumiaaw)
BU_SPE_2 (EVMWLUMIANW,  "evmwlumianw",  MISC,   spe_evmwlumianw)
BU_SPE_2 (EVMWLUSIAAW,  "evmwlusiaaw",  MISC,   spe_evmwlusiaaw)
BU_SPE_2 (EVMWLUSIANW,  "evmwlusianw",  MISC,   spe_evmwlusianw)
BU_SPE_2 (EVMWSMF,      "evmwsmf",      MISC,   spe_evmwsmf)
BU_SPE_2 (EVMWSMFA,     "evmwsmfa",     MISC,   spe_evmwsmfa)
BU_SPE_2 (EVMWSMFAA,    "evmwsmfaa",    MISC,   spe_evmwsmfaa)
BU_SPE_2 (EVMWSMFAN,    "evmwsmfan",    MISC,   spe_evmwsmfan)
BU_SPE_2 (EVMWSMI,      "evmwsmi",      MISC,   spe_evmwsmi)
BU_SPE_2 (EVMWSMIA,     "evmwsmia",     MISC,   spe_evmwsmia)
BU_SPE_2 (EVMWSMIAA,    "evmwsmiaa",    MISC,   spe_evmwsmiaa)
BU_SPE_2 (EVMWSMIAN,    "evmwsmian",    MISC,   spe_evmwsmian)
BU_SPE_2 (EVMWSSF,      "evmwssf",      MISC,   spe_evmwssf)
BU_SPE_2 (EVMWSSFA,     "evmwssfa",     MISC,   spe_evmwssfa)
BU_SPE_2 (EVMWSSFAA,    "evmwssfaa",    MISC,   spe_evmwssfaa)
BU_SPE_2 (EVMWSSFAN,    "evmwssfan",    MISC,   spe_evmwssfan)
BU_SPE_2 (EVMWUMI,      "evmwumi",      MISC,   spe_evmwumi)
BU_SPE_2 (EVMWUMIA,     "evmwumia",     MISC,   spe_evmwumia)
BU_SPE_2 (EVMWUMIAA,    "evmwumiaa",    MISC,   spe_evmwumiaa)
BU_SPE_2 (EVMWUMIAN,    "evmwumian",    MISC,   spe_evmwumian)
BU_SPE_2 (EVNAND,       "evnand",       MISC,   spe_evnand)
BU_SPE_2 (EVNOR,        "evnor",        MISC,   spe_evnor)
BU_SPE_2 (EVOR,         "evor",         MISC,   spe_evor)
BU_SPE_2 (EVORC,        "evorc",        MISC,   spe_evorc)
BU_SPE_2 (EVRLW,        "evrlw",        MISC,   spe_evrlw)
BU_SPE_2 (EVSLW,        "evslw",        MISC,   spe_evslw)
BU_SPE_2 (EVSRWS,       "evsrws",       MISC,   spe_evsrws)
BU_SPE_2 (EVSRWU,       "evsrwu",       MISC,   spe_evsrwu)
BU_SPE_2 (EVSUBFW,      "evsubfw",      MISC,   subv2si3)

/* SPE binary operations expecting a 5-bit unsigned literal.  */
BU_SPE_2 (EVADDIW,      "evaddiw",      MISC,   spe_evaddiw)

BU_SPE_2 (EVRLWI,       "evrlwi",       MISC,   spe_evrlwi)
BU_SPE_2 (EVSLWI,       "evslwi",       MISC,   spe_evslwi)
BU_SPE_2 (EVSRWIS,      "evsrwis",      MISC,   spe_evsrwis)
BU_SPE_2 (EVSRWIU,      "evsrwiu",      MISC,   spe_evsrwiu)
BU_SPE_2 (EVSUBIFW,     "evsubifw",     MISC,   spe_evsubifw)
BU_SPE_2 (EVMWHSSFAA,   "evmwhssfaa",   MISC,   spe_evmwhssfaa)
BU_SPE_2 (EVMWHSSMAA,   "evmwhssmaa",   MISC,   spe_evmwhssmaa)
BU_SPE_2 (EVMWHSMFAA,   "evmwhsmfaa",   MISC,   spe_evmwhsmfaa)
BU_SPE_2 (EVMWHSMIAA,   "evmwhsmiaa",   MISC,   spe_evmwhsmiaa)
BU_SPE_2 (EVMWHUSIAA,   "evmwhusiaa",   MISC,   spe_evmwhusiaa)
BU_SPE_2 (EVMWHUMIAA,   "evmwhumiaa",   MISC,   spe_evmwhumiaa)
BU_SPE_2 (EVMWHSSFAN,   "evmwhssfan",   MISC,   spe_evmwhssfan)
BU_SPE_2 (EVMWHSSIAN,   "evmwhssian",   MISC,   spe_evmwhssian)
BU_SPE_2 (EVMWHSMFAN,   "evmwhsmfan",   MISC,   spe_evmwhsmfan)
BU_SPE_2 (EVMWHSMIAN,   "evmwhsmian",   MISC,   spe_evmwhsmian)
BU_SPE_2 (EVMWHUSIAN,   "evmwhusian",   MISC,   spe_evmwhusian)
BU_SPE_2 (EVMWHUMIAN,   "evmwhumian",   MISC,   spe_evmwhumian)
BU_SPE_2 (EVMWHGSSFAA,  "evmwhgssfaa",  MISC,   spe_evmwhgssfaa)
BU_SPE_2 (EVMWHGSMFAA,  "evmwhgsmfaa",  MISC,   spe_evmwhgsmfaa)
BU_SPE_2 (EVMWHGSMIAA,  "evmwhgsmiaa",  MISC,   spe_evmwhgsmiaa)
BU_SPE_2 (EVMWHGUMIAA,  "evmwhgumiaa",  MISC,   spe_evmwhgumiaa)
BU_SPE_2 (EVMWHGSSFAN,  "evmwhgssfan",  MISC,   spe_evmwhgssfan)
BU_SPE_2 (EVMWHGSMFAN,  "evmwhgsmfan",  MISC,   spe_evmwhgsmfan)
BU_SPE_2 (EVMWHGSMIAN,  "evmwhgsmian",  MISC,   spe_evmwhgsmian)
BU_SPE_2 (EVMWHGUMIAN,  "evmwhgumian",  MISC,   spe_evmwhgumian)
BU_SPE_2 (BRINC,        "brinc",        MISC,   spe_brinc)
BU_SPE_2 (EVXOR,        "evxor",        MISC,   xorv2si3)

/* SPE predicate builtins.  */
BU_SPE_P (EVCMPEQ,      "evcmpeq",      MISC,   spe_evcmpeq)
BU_SPE_P (EVCMPGTS,     "evcmpgts",     MISC,   spe_evcmpgts)
BU_SPE_P (EVCMPGTU,     "evcmpgtu",     MISC,   spe_evcmpgtu)
BU_SPE_P (EVCMPLTS,     "evcmplts",     MISC,   spe_evcmplts)
BU_SPE_P (EVCMPLTU,     "evcmpltu",     MISC,   spe_evcmpltu)
BU_SPE_P (EVFSCMPEQ,    "evfscmpeq",    MISC,   spe_evfscmpeq)
BU_SPE_P (EVFSCMPGT,    "evfscmpgt",    MISC,   spe_evfscmpgt)
BU_SPE_P (EVFSCMPLT,    "evfscmplt",    MISC,   spe_evfscmplt)
BU_SPE_P (EVFSTSTEQ,    "evfststeq",    MISC,   spe_evfststeq)
BU_SPE_P (EVFSTSTGT,    "evfststgt",    MISC,   spe_evfststgt)
BU_SPE_P (EVFSTSTLT,    "evfststlt",    MISC,   spe_evfststlt)

/* SPE evsel builtins.  */
BU_SPE_E (EVSEL_CMPGTS,  "evsel_gts",     MISC, spe_evcmpgts)
BU_SPE_E (EVSEL_CMPGTU,  "evsel_gtu",     MISC, spe_evcmpgtu)
BU_SPE_E (EVSEL_CMPLTS,  "evsel_lts",     MISC, spe_evcmplts)
BU_SPE_E (EVSEL_CMPLTU,  "evsel_ltu",     MISC, spe_evcmpltu)
BU_SPE_E (EVSEL_CMPEQ,   "evsel_eq",      MISC, spe_evcmpeq)
BU_SPE_E (EVSEL_FSCMPGT, "evsel_fsgt",    MISC, spe_evfscmpgt)
BU_SPE_E (EVSEL_FSCMPLT, "evsel_fslt",    MISC, spe_evfscmplt)
BU_SPE_E (EVSEL_FSCMPEQ, "evsel_fseq",    MISC, spe_evfscmpeq)
BU_SPE_E (EVSEL_FSTSTGT, "evsel_fststgt", MISC, spe_evfststgt)
BU_SPE_E (EVSEL_FSTSTLT, "evsel_fststlt", MISC, spe_evfststlt)
BU_SPE_E (EVSEL_FSTSTEQ, "evsel_fststeq", MISC, spe_evfststeq)

BU_SPE_1 (EVABS,        "evabs",        CONST,  absv2si2)
BU_SPE_1 (EVADDSMIAAW,  "evaddsmiaaw",  CONST,  spe_evaddsmiaaw)
BU_SPE_1 (EVADDSSIAAW,  "evaddssiaaw",  CONST,  spe_evaddssiaaw)
BU_SPE_1 (EVADDUMIAAW,  "evaddumiaaw",  CONST,  spe_evaddumiaaw)
BU_SPE_1 (EVADDUSIAAW,  "evaddusiaaw",  CONST,  spe_evaddusiaaw)
BU_SPE_1 (EVCNTLSW,     "evcntlsw",     CONST,  spe_evcntlsw)
BU_SPE_1 (EVCNTLZW,     "evcntlzw",     CONST,  spe_evcntlzw)
BU_SPE_1 (EVEXTSB,      "evextsb",      CONST,  spe_evextsb)
BU_SPE_1 (EVEXTSH,      "evextsh",      CONST,  spe_evextsh)
BU_SPE_1 (EVFSABS,      "evfsabs",      CONST,  spe_evfsabs)
BU_SPE_1 (EVFSCFSF,     "evfscfsf",     CONST,  spe_evfscfsf)
BU_SPE_1 (EVFSCFSI,     "evfscfsi",     CONST,  spe_evfscfsi)
BU_SPE_1 (EVFSCFUF,     "evfscfuf",     CONST,  spe_evfscfuf)
BU_SPE_1 (EVFSCFUI,     "evfscfui",     CONST,  spe_evfscfui)
BU_SPE_1 (EVFSCTSF,     "evfsctsf",     CONST,  spe_evfsctsf)
BU_SPE_1 (EVFSCTSI,     "evfsctsi",     CONST,  spe_evfsctsi)
BU_SPE_1 (EVFSCTSIZ,    "evfsctsiz",    CONST,  spe_evfsctsiz)
BU_SPE_1 (EVFSCTUF,     "evfsctuf",     CONST,  spe_evfsctuf)
BU_SPE_1 (EVFSCTUI,     "evfsctui",     CONST,  spe_evfsctui)
BU_SPE_1 (EVFSCTUIZ,    "evfsctuiz",    CONST,  spe_evfsctuiz)
BU_SPE_1 (EVFSNABS,     "evfsnabs",     CONST,  spe_evfsnabs)
BU_SPE_1 (EVFSNEG,      "evfsneg",      CONST,  spe_evfsneg)
BU_SPE_1 (EVMRA,        "evmra",        CONST,  spe_evmra)
BU_SPE_1 (EVNEG,        "evneg",        CONST,  negv2si2)
BU_SPE_1 (EVRNDW,       "evrndw",       CONST,  spe_evrndw)
BU_SPE_1 (EVSUBFSMIAAW, "evsubfsmiaaw", CONST,  spe_evsubfsmiaaw)
BU_SPE_1 (EVSUBFSSIAAW, "evsubfssiaaw", CONST,  spe_evsubfssiaaw)
BU_SPE_1 (EVSUBFUMIAAW, "evsubfumiaaw", CONST,  spe_evsubfumiaaw)
BU_SPE_1 (EVSUBFUSIAAW, "evsubfusiaaw", CONST,  spe_evsubfusiaaw)

/* SPE builtins that are handled as special cases.  */
BU_SPE_X (EVLDD,              "evldd",          MISC)
BU_SPE_X (EVLDDX,             "evlddx",         MISC)
BU_SPE_X (EVLDH,              "evldh",          MISC)
BU_SPE_X (EVLDHX,             "evldhx",         MISC)
BU_SPE_X (EVLDW,              "evldw",          MISC)
BU_SPE_X (EVLDWX,             "evldwx",         MISC)
BU_SPE_X (EVLHHESPLAT,        "evlhhesplat",    MISC)
BU_SPE_X (EVLHHESPLATX,       "evlhhesplatx",   MISC)
BU_SPE_X (EVLHHOSSPLAT,       "evlhhossplat",   MISC)
BU_SPE_X (EVLHHOSSPLATX,      "evlhhossplatx",  MISC)
BU_SPE_X (EVLHHOUSPLAT,       "evlhhousplat",   MISC)
BU_SPE_X (EVLHHOUSPLATX,      "evlhhousplatx",  MISC)
BU_SPE_X (EVLWHE,             "evlwhe",         MISC)
BU_SPE_X (EVLWHEX,            "evlwhex",        MISC)
BU_SPE_X (EVLWHOS,            "evlwhos",        MISC)
BU_SPE_X (EVLWHOSX,           "evlwhosx",       MISC)
BU_SPE_X (EVLWHOU,            "evlwhou",        MISC)
BU_SPE_X (EVLWHOUX,           "evlwhoux",       MISC)
BU_SPE_X (EVLWHSPLAT,         "evlwhsplat",     MISC)
BU_SPE_X (EVLWHSPLATX,        "evlwhsplatx",    MISC)
BU_SPE_X (EVLWWSPLAT,         "evlwwsplat",     MISC)
BU_SPE_X (EVLWWSPLATX,        "evlwwsplatx",    MISC)
BU_SPE_X (EVSPLATFI,          "evsplatfi",      MISC)
BU_SPE_X (EVSPLATI,           "evsplati",       MISC)
BU_SPE_X (EVSTDD,             "evstdd",         MISC)
BU_SPE_X (EVSTDDX,            "evstddx",        MISC)
BU_SPE_X (EVSTDH,             "evstdh",         MISC)
BU_SPE_X (EVSTDHX,            "evstdhx",        MISC)
BU_SPE_X (EVSTDW,             "evstdw",         MISC)
BU_SPE_X (EVSTDWX,            "evstdwx",        MISC)
BU_SPE_X (EVSTWHE,            "evstwhe",        MISC)
BU_SPE_X (EVSTWHEX,           "evstwhex",       MISC)
BU_SPE_X (EVSTWHO,            "evstwho",        MISC)
BU_SPE_X (EVSTWHOX,           "evstwhox",       MISC)
BU_SPE_X (EVSTWWE,            "evstwwe",        MISC)
BU_SPE_X (EVSTWWEX,           "evstwwex",       MISC)
BU_SPE_X (EVSTWWO,            "evstwwo",        MISC)
BU_SPE_X (EVSTWWOX,           "evstwwox",       MISC)
BU_SPE_X (MFSPEFSCR,          "mfspefscr",      MISC)
BU_SPE_X (MTSPEFSCR,          "mtspefscr",      MISC)


/* Power7 builtins, that aren't VSX instructions.  */
BU_SPECIAL_X (POWER7_BUILTIN_BPERMD, "__builtin_bpermd", RS6000_BTM_POPCNTD,
              RS6000_BTC_CONST)

/* Miscellaneous builtins.  */
BU_SPECIAL_X (RS6000_BUILTIN_RECIP, "__builtin_recipdiv", RS6000_BTM_FRE,
              RS6000_BTC_FP)

BU_SPECIAL_X (RS6000_BUILTIN_RECIPF, "__builtin_recipdivf", RS6000_BTM_FRES,
              RS6000_BTC_FP)

BU_SPECIAL_X (RS6000_BUILTIN_RSQRT, "__builtin_rsqrt", RS6000_BTM_FRSQRTE,
              RS6000_BTC_FP)

BU_SPECIAL_X (RS6000_BUILTIN_RSQRTF, "__builtin_rsqrtf", RS6000_BTM_FRSQRTES,
              RS6000_BTC_FP)

BU_SPECIAL_X (RS6000_BUILTIN_BSWAP_HI, "__builtin_bswap16", RS6000_BTM_POWERPC,
              RS6000_BTC_MEM)

/* Darwin CfString builtin.  */
BU_SPECIAL_X (RS6000_BUILTIN_CFSTRING, "__builtin_cfstring", RS6000_BTM_POWERPC,
              RS6000_BTC_MISC)

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.