; Built-in functions for PowerPC.
; Copyright (C) 2020-2023 Free Software Foundation, Inc.
; Contributed by Bill Schmidt, IBM <wschmidt@linux.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.
;
; You should have received a copy of the GNU General Public License
; along with GCC; see the file COPYING3.  If not see
; <http://www.gnu.org/licenses/>.


; Built-in functions in this file are organized into "stanzas", where
; all built-ins in a given stanza are enabled together.  Each stanza
; starts with a line identifying the circumstances in which the group of
; functions is permitted, with the gating predicate in square brackets.
; For example, this could be
;
;     [altivec]
;
;   or it could be
;
;     [power9]
;
; The bracketed gating predicate is the only information allowed on
; the stanza header line, other than whitespace.
;
; Following the stanza header are two lines for each function: the
; prototype line and the attributes line.  The prototype line has
; this format, where the square brackets indicate optional
; information and angle brackets indicate required information:
;
;   [kind] <return-type> <bif-name> (<argument-list>);
;
; Here [kind] can be one of "const", "pure", or "fpmath";
; <return-type> is a legal type for a built-in function result;
; <bif-name> is the name by which the function can be called;
; and <argument-list> is a comma-separated list of legal types
; for built-in function arguments.  The argument list may be
; empty, but the parentheses and semicolon are required.
;
; A legal type is of the form:
;
;   [const] [[signed|unsigned] <basetype> | <vectype>] [*]
;
; where "const" applies only to a <basetype> of "int".  Legal values
; of <basetype> are (for now):
;
;   char
;   short
;   int
;   long
;   long double
;   long long
;   float
;   double
;   __int128
;   _Float128
;   bool
;   string
;   _Decimal32
;   _Decimal64
;   _Decimal128
;   __ibm128
;
; Legal values of <vectype> are as follows, and are shorthand for
; the associated meaning:
;
;   vsc		vector signed char
;   vuc		vector unsigned char
;   vbc		vector bool char
;   vss		vector signed short
;   vus		vector unsigned short
;   vbs		vector bool short
;   vsi		vector signed int
;   vui		vector unsigned int
;   vbi		vector bool int
;   vsll	vector signed long long
;   vull	vector unsigned long long
;   vbll	vector bool long long
;   vsq		vector signed __int128
;   vuq		vector unsigned __int128
;   vbq		vector bool __int128
;   vp		vector pixel
;   vf		vector float
;   vd		vector double
;   v256	__vector_pair
;   v512	__vector_quad
;
; For simplicity, We don't support "short int" and "long long int".
; We don't currently support a <basetype> of "_Float16".  "signed"
; and "unsigned" only apply to integral base types.  The optional *
; indicates a pointer type.
;
; The attributes line looks like this:
;
;   <bif-id> <bif-pattern> {<attribute-list>}
;
; Here <bif-id> is a unique internal identifier for the built-in
; function that will be used as part of an enumeration of all
; built-in functions; <bif-pattern> is the define_expand or
; define_insn that will be invoked when the call is expanded;
; and <attribute-list> is a comma-separated list of special
; conditions that apply to the built-in function.  The attribute
; list may be empty, but the braces are required.
;
; Attributes are strings, and the allowed ones are listed below.
;
;   init     Process as a vec_init function
;   set      Process as a vec_set function
;   extract  Process as a vec_extract function
;   nosoft   Not valid with -msoft-float
;   ldvec    Needs special handling for vec_ld semantics
;   stvec    Needs special handling for vec_st semantics
;   reve     Needs special handling for element reversal
;   pred     Needs special handling for comparison predicates
;   htm      Needs special handling for transactional memory
;   htmspr   HTM function using an SPR
;   htmcr    HTM function using a CR
;   mma      Needs special handling for MMA
;   quad     MMA instruction using a register quad as an input operand
;   pair     MMA instruction using a register pair as an input operand
;   mmaint   MMA instruction expanding to internal call at GIMPLE time
;   no32bit  Not valid for TARGET_32BIT
;   32bit    Requires different handling for TARGET_32BIT
;   cpu      This is a "cpu_is" or "cpu_supports" builtin
;   ldstmask Altivec mask for load or store
;   lxvrse   Needs special handling for load-rightmost, sign-extended
;   lxvrze   Needs special handling for load-rightmost, zero-extended
;   endian   Needs special handling for endianness
;   ibmld    Restrict usage to the case when TFmode is IBM-128
;   ibm128   Restrict usage to the case where __ibm128 is supported or if ibmld
;
; Each attribute corresponds to extra processing required when
; the built-in is expanded.  All such special processing should
; be controlled by an attribute from now on.
;
; It is important to note that each entry's <bif-name> must be
; unique.  The code generated from this file will call def_builtin
; for each entry, and this can only happen once per name.
;
; The type signature for the builtin must match the modes of the RTL
; pattern <bif-pattern>.  When a builtin is used only as a basis for
; overloading, you can use an arbitrary type for each mode (for example,
; for V8HImode, you could use vp, vss, vus, or vbs).  The overloading
; machinery takes care of adding appropriate casts between vectors to
; satisfy impedance matching.  The overloaded prototypes are the ones
; that must match what users expect.  Thus you will often have a small
; number of entries in this file that correspond to a much greater
; number of entries in rs6000-overload.def.
;
; However, builtins in this file that are expected to be directly called
; by users must have one version for each expected type combination.
;
; Eventually we want to automatically generate built-in documentation
; from the entries in this file.  Documenting of built-ins with more
; than one acceptable prototype can be done by cross-referencing
; against rs6000-overload.def and picking up the allowable prototypes
; from there.
;
; Blank lines may be used as desired in this file between the lines as
; defined above; that is, you can introduce as many extra newlines as you
; like after a required newline, but nowhere else.  Lines beginning with
; a semicolon are also treated as blank lines.
;
; A const int argument may be restricted to certain values.  This is
; indicated by one of the following occurring after the "int" token:
;
;    <x>   restricts the constant to x bits, interpreted as unsigned
;    <x,y> restricts the constant to the inclusive range [x,y]
;    [x,y] restricts the constant to the inclusive range [x,y],
;	   but only applies if the argument is constant.
;    {x,y} restricts the constant to one of two values, x or y.
;
; Here x and y are integer tokens.  Note that the "const" token is a
; lie when the restriction is [x,y], but this simplifies the parsing
; significantly and is hopefully forgivable.



; Builtins that have been around since time immemorial or are just
; considered available everywhere.
[always]
; __builtin_cfstring is for Darwin, which will replace the decl we
; create here with another one during subtarget processing.  We just
; need to ensure it has a slot in the builtin enumeration.
  void __builtin_cfstring ();
    CFSTRING nothing {}

  void __builtin_cpu_init ();
    CPU_INIT nothing {cpu}

  bool __builtin_cpu_is (string);
    CPU_IS nothing {cpu}

  bool __builtin_cpu_supports (string);
    CPU_SUPPORTS nothing {cpu}

  unsigned long long __builtin_ppc_get_timebase ();
    GET_TB rs6000_get_timebase {}

  double __builtin_mffs ();
    MFFS rs6000_mffs {}

; Although the mffsl instruction is only available on POWER9 and later
; processors, this builtin automatically falls back to mffs on older
; platforms.  Thus it appears here in the [always] stanza.
  double __builtin_mffsl ();
    MFFSL rs6000_mffsl {nosoft}

; This is redundant with __builtin_pack_ibm128, as it requires long
; double to be __ibm128.  Should probably be deprecated.
  const long double __builtin_pack_longdouble (double, double);
    PACK_TF packtf {ibmld}

  unsigned long __builtin_ppc_mftb ();
    MFTB rs6000_mftb_di {32bit}

  void __builtin_mtfsb0 (const int<5>);
    MTFSB0 rs6000_mtfsb0 {nosoft}

  void __builtin_mtfsb1 (const int<5>);
    MTFSB1 rs6000_mtfsb1 {nosoft}

  void __builtin_mtfsf (const int<8>, double);
    MTFSF rs6000_mtfsf {}

  const __ibm128 __builtin_pack_ibm128 (double, double);
    PACK_IF packif {ibm128}

  double __builtin_set_fpscr_rn (const int[0,3]);
    SET_FPSCR_RN rs6000_set_fpscr_rn {nosoft}

  const double __builtin_unpack_ibm128 (__ibm128, const int<1>);
    UNPACK_IF unpackif {ibm128}

; This is redundant with __builtin_unpack_ibm128, as it requires long
; double to be __ibm128.  Should probably be deprecated.
  const double __builtin_unpack_longdouble (long double, const int<1>);
    UNPACK_TF unpacktf {ibmld}


; Builtins that have been around just about forever, but not quite.
[power5]
  fpmath double __builtin_recipdiv (double, double);
    RECIP recipdf3 {}

  fpmath float __builtin_recipdivf (float, float);
    RECIPF recipsf3 {}

  fpmath double __builtin_rsqrt (double);
    RSQRT rsqrtdf2 {}

  fpmath float __builtin_rsqrtf (float);
    RSQRTF rsqrtsf2 {}


; Power6 builtins (ISA 2.05).
[power6]
  const signed int __builtin_p6_cmpb_32 (signed int, signed int);
    CMPB_32 cmpbsi3 {}


; Power6 builtins requiring 64-bit GPRs (even with 32-bit addressing).
[power6-64]
  const signed long __builtin_p6_cmpb (signed long, signed long);
    CMPB cmpbdi3 {no32bit}


; AltiVec builtins.
[altivec]
  const vsc __builtin_altivec_abs_v16qi (vsc);
    ABS_V16QI absv16qi2 {}

  const vf __builtin_altivec_abs_v4sf (vf);
    ABS_V4SF absv4sf2 {}

  const vsi __builtin_altivec_abs_v4si (vsi);
    ABS_V4SI absv4si2 {}

  const vss __builtin_altivec_abs_v8hi (vss);
    ABS_V8HI absv8hi2 {}

  const vsc __builtin_altivec_abss_v16qi (vsc);
    ABSS_V16QI altivec_abss_v16qi {}

  const vsi __builtin_altivec_abss_v4si (vsi);
    ABSS_V4SI altivec_abss_v4si {}

  const vss __builtin_altivec_abss_v8hi (vss);
    ABSS_V8HI altivec_abss_v8hi {}

  const vf __builtin_altivec_copysignfp (vf, vf);
    COPYSIGN_V4SF vector_copysignv4sf3 {}

  void __builtin_altivec_dss (const int<2>);
    DSS altivec_dss {}

  void __builtin_altivec_dssall ();
    DSSALL altivec_dssall {}

  void __builtin_altivec_dst (void *, const int, const int<2>);
    DST altivec_dst {}

  void __builtin_altivec_dstst (void *, const int, const int<2>);
    DSTST altivec_dstst {}

  void __builtin_altivec_dststt (void *, const int, const int<2>);
    DSTSTT altivec_dststt {}

  void __builtin_altivec_dstt (void *, const int, const int<2>);
    DSTT altivec_dstt {}

  fpmath vsi __builtin_altivec_fix_sfsi (vf);
    FIX_V4SF_V4SI fix_truncv4sfv4si2 {}

  fpmath vui __builtin_altivec_fixuns_sfsi (vf);
    FIXUNS_V4SF_V4SI fixuns_truncv4sfv4si2 {}

  fpmath vf __builtin_altivec_float_sisf (vsi);
    FLOAT_V4SI_V4SF floatv4siv4sf2 {}

  pure vsc __builtin_altivec_lvebx (signed long, const void *);
    LVEBX altivec_lvebx {ldvec}

  pure vss __builtin_altivec_lvehx (signed long, const void *);
    LVEHX altivec_lvehx {ldvec}

  pure vsi __builtin_altivec_lvewx (signed long, const void *);
    LVEWX altivec_lvewx {ldvec}

  pure vuc __builtin_altivec_lvsl (signed long, const void *);
    LVSL altivec_lvsl {ldvec}

  pure vuc __builtin_altivec_lvsr (signed long, const void *);
    LVSR altivec_lvsr {ldvec}

  pure vsi __builtin_altivec_lvx (signed long, const void *);
    LVX altivec_lvx_v4si {ldvec}

  pure vsq __builtin_altivec_lvx_v1ti (signed long, const void *);
    LVX_V1TI altivec_lvx_v1ti {ldvec}

  pure vsc __builtin_altivec_lvx_v16qi (signed long, const void *);
    LVX_V16QI altivec_lvx_v16qi {ldvec}

  pure vf __builtin_altivec_lvx_v4sf (signed long, const void *);
    LVX_V4SF altivec_lvx_v4sf {ldvec}

  pure vsi __builtin_altivec_lvx_v4si (signed long, const void *);
    LVX_V4SI altivec_lvx_v4si {ldvec}

  pure vss __builtin_altivec_lvx_v8hi (signed long, const void *);
    LVX_V8HI altivec_lvx_v8hi {ldvec}

  pure vsi __builtin_altivec_lvxl (signed long, const void *);
    LVXL altivec_lvxl_v4si {ldvec}

  pure vsc __builtin_altivec_lvxl_v16qi (signed long, const void *);
    LVXL_V16QI altivec_lvxl_v16qi {ldvec}

  pure vf __builtin_altivec_lvxl_v4sf (signed long, const void *);
    LVXL_V4SF altivec_lvxl_v4sf {ldvec}

  pure vsi __builtin_altivec_lvxl_v4si (signed long, const void *);
    LVXL_V4SI altivec_lvxl_v4si {ldvec}

  pure vss __builtin_altivec_lvxl_v8hi (signed long, const void *);
    LVXL_V8HI altivec_lvxl_v8hi {ldvec}

  const vsc __builtin_altivec_mask_for_load (const void *);
    MASK_FOR_LOAD altivec_lvsr_direct {ldstmask}

  vss __builtin_altivec_mfvscr ();
    MFVSCR altivec_mfvscr {}

  void __builtin_altivec_mtvscr (vsi);
    MTVSCR altivec_mtvscr {}

  const vsll __builtin_altivec_vmulesw (vsi, vsi);
    VMULESW vec_widen_smult_even_v4si {}

  const vull __builtin_altivec_vmuleuw (vui, vui);
    VMULEUW vec_widen_umult_even_v4si {}

  const vsll __builtin_altivec_vmulosw (vsi, vsi);
    VMULOSW vec_widen_smult_odd_v4si {}

  const vull __builtin_altivec_vmulouw (vui, vui);
    VMULOUW vec_widen_umult_odd_v4si {}

  const vsc __builtin_altivec_nabs_v16qi (vsc);
    NABS_V16QI nabsv16qi2 {}

  const vf __builtin_altivec_nabs_v4sf (vf);
    NABS_V4SF vsx_nabsv4sf2 {}

  const vsi __builtin_altivec_nabs_v4si (vsi);
    NABS_V4SI nabsv4si2 {}

  const vss __builtin_altivec_nabs_v8hi (vss);
    NABS_V8HI nabsv8hi2 {}

  const vsc __builtin_altivec_neg_v16qi (vsc);
    NEG_V16QI negv16qi2 {}

  const vf __builtin_altivec_neg_v4sf (vf);
    NEG_V4SF negv4sf2 {}

  const vsi __builtin_altivec_neg_v4si (vsi);
    NEG_V4SI negv4si2 {}

  const vss __builtin_altivec_neg_v8hi (vss);
    NEG_V8HI negv8hi2 {}

  void __builtin_altivec_stvebx (vsc, signed long, void *);
    STVEBX altivec_stvebx {stvec}

  void __builtin_altivec_stvehx (vss, signed long, void *);
    STVEHX altivec_stvehx {stvec}

  void __builtin_altivec_stvewx (vsi, signed long, void *);
    STVEWX altivec_stvewx {stvec}

  void __builtin_altivec_stvx (vsi, signed long, void *);
    STVX altivec_stvx_v4si {stvec}

  void __builtin_altivec_stvx_v16qi (vsc, signed long, void *);
    STVX_V16QI altivec_stvx_v16qi {stvec}

  void __builtin_altivec_stvx_v4sf (vf, signed long, void *);
    STVX_V4SF altivec_stvx_v4sf {stvec}

  void __builtin_altivec_stvx_v4si (vsi, signed long, void *);
    STVX_V4SI altivec_stvx_v4si {stvec}

  void __builtin_altivec_stvx_v8hi (vss, signed long, void *);
    STVX_V8HI altivec_stvx_v8hi {stvec}

  void __builtin_altivec_stvxl (vsi, signed long, void *);
    STVXL altivec_stvxl_v4si {stvec}

  void __builtin_altivec_stvxl_v16qi (vsc, signed long, void *);
    STVXL_V16QI altivec_stvxl_v16qi {stvec}

  void __builtin_altivec_stvxl_v4sf (vf, signed long, void *);
    STVXL_V4SF altivec_stvxl_v4sf {stvec}

  void __builtin_altivec_stvxl_v4si (vsi, signed long, void *);
    STVXL_V4SI altivec_stvxl_v4si {stvec}

  void __builtin_altivec_stvxl_v8hi (vss, signed long, void *);
    STVXL_V8HI altivec_stvxl_v8hi {stvec}

  fpmath vf __builtin_altivec_uns_float_sisf (vui);
    UNSFLOAT_V4SI_V4SF floatunsv4siv4sf2 {}

  const vui __builtin_altivec_vaddcuw (vui, vui);
    VADDCUW altivec_vaddcuw {}

  const vf __builtin_altivec_vaddfp (vf, vf);
    VADDFP addv4sf3 {}

  const vsc __builtin_altivec_vaddsbs (vsc, vsc);
    VADDSBS altivec_vaddsbs {}

  const vss __builtin_altivec_vaddshs (vss, vss);
    VADDSHS altivec_vaddshs {}

  const vsi __builtin_altivec_vaddsws (vsi, vsi);
    VADDSWS altivec_vaddsws {}

  const vuc __builtin_altivec_vaddubm (vuc, vuc);
    VADDUBM addv16qi3 {}

  const vuc __builtin_altivec_vaddubs (vuc, vuc);
    VADDUBS altivec_vaddubs {}

  const vus __builtin_altivec_vadduhm (vus, vus);
    VADDUHM addv8hi3 {}

  const vus __builtin_altivec_vadduhs (vus, vus);
    VADDUHS altivec_vadduhs {}

  const vsi __builtin_altivec_vadduwm (vsi, vsi);
    VADDUWM addv4si3 {}

  const vui __builtin_altivec_vadduws (vui, vui);
    VADDUWS altivec_vadduws {}

  const vsc __builtin_altivec_vand_v16qi (vsc, vsc);
    VAND_V16QI andv16qi3 {}

  const vuc __builtin_altivec_vand_v16qi_uns (vuc, vuc);
    VAND_V16QI_UNS andv16qi3 {}

  const vf __builtin_altivec_vand_v4sf (vf, vf);
    VAND_V4SF andv4sf3 {}

  const vsi __builtin_altivec_vand_v4si (vsi, vsi);
    VAND_V4SI andv4si3 {}

  const vui __builtin_altivec_vand_v4si_uns (vui, vui);
    VAND_V4SI_UNS andv4si3 {}

  const vss __builtin_altivec_vand_v8hi (vss, vss);
    VAND_V8HI andv8hi3 {}

  const vus __builtin_altivec_vand_v8hi_uns (vus, vus);
    VAND_V8HI_UNS andv8hi3 {}

  const vsc __builtin_altivec_vandc_v16qi (vsc, vsc);
    VANDC_V16QI andcv16qi3 {}

  const vuc __builtin_altivec_vandc_v16qi_uns (vuc, vuc);
    VANDC_V16QI_UNS andcv16qi3 {}

  const vf __builtin_altivec_vandc_v4sf (vf, vf);
    VANDC_V4SF andcv4sf3 {}

  const vsi __builtin_altivec_vandc_v4si (vsi, vsi);
    VANDC_V4SI andcv4si3 {}

  const vui __builtin_altivec_vandc_v4si_uns (vui, vui);
    VANDC_V4SI_UNS andcv4si3 {}

  const vss __builtin_altivec_vandc_v8hi (vss, vss);
    VANDC_V8HI andcv8hi3 {}

  const vus __builtin_altivec_vandc_v8hi_uns (vus, vus);
    VANDC_V8HI_UNS andcv8hi3 {}

  const vsc __builtin_altivec_vavgsb (vsc, vsc);
    VAVGSB avgv16qi3_ceil {}

  const vss __builtin_altivec_vavgsh (vss, vss);
    VAVGSH avgv8hi3_ceil {}

  const vsi __builtin_altivec_vavgsw (vsi, vsi);
    VAVGSW avgv4si3_ceil {}

  const vuc __builtin_altivec_vavgub (vuc, vuc);
    VAVGUB uavgv16qi3_ceil {}

  const vus __builtin_altivec_vavguh (vus, vus);
    VAVGUH uavgv8hi3_ceil {}

  const vui __builtin_altivec_vavguw (vui, vui);
    VAVGUW uavgv4si3_ceil {}

  const vf __builtin_altivec_vcfsx (vsi, const int<5>);
    VCFSX altivec_vcfsx {}

  const vf __builtin_altivec_vcfux (vui, const int<5>);
    VCFUX altivec_vcfux {}

  const vsi __builtin_altivec_vcmpbfp (vf, vf);
    VCMPBFP altivec_vcmpbfp {}

  const int __builtin_altivec_vcmpbfp_p (int, vf, vf);
    VCMPBFP_P altivec_vcmpbfp_p {pred}

  const vf __builtin_altivec_vcmpeqfp (vf, vf);
    VCMPEQFP vector_eqv4sf {}

  const int __builtin_altivec_vcmpeqfp_p (int, vf, vf);
    VCMPEQFP_P vector_eq_v4sf_p {pred}

  const vsc __builtin_altivec_vcmpequb (vuc, vuc);
    VCMPEQUB vector_eqv16qi {}

  const int __builtin_altivec_vcmpequb_p (int, vsc, vsc);
    VCMPEQUB_P vector_eq_v16qi_p {pred}

  const vss __builtin_altivec_vcmpequh (vus, vus);
    VCMPEQUH vector_eqv8hi {}

  const int __builtin_altivec_vcmpequh_p (int, vss, vss);
    VCMPEQUH_P vector_eq_v8hi_p {pred}

  const vsi __builtin_altivec_vcmpequw (vui, vui);
    VCMPEQUW vector_eqv4si {}

  const int __builtin_altivec_vcmpequw_p (int, vsi, vsi);
    VCMPEQUW_P vector_eq_v4si_p {pred}

  const vf __builtin_altivec_vcmpgefp (vf, vf);
    VCMPGEFP vector_gev4sf {}

  const int __builtin_altivec_vcmpgefp_p (int, vf, vf);
    VCMPGEFP_P vector_ge_v4sf_p {pred}

  const vf __builtin_altivec_vcmpgtfp (vf, vf);
    VCMPGTFP vector_gtv4sf {}

  const int __builtin_altivec_vcmpgtfp_p (int, vf, vf);
    VCMPGTFP_P vector_gt_v4sf_p {pred}

  const vsc __builtin_altivec_vcmpgtsb (vsc, vsc);
    VCMPGTSB vector_gtv16qi {}

  const int __builtin_altivec_vcmpgtsb_p (int, vsc, vsc);
    VCMPGTSB_P vector_gt_v16qi_p {pred}

  const vss __builtin_altivec_vcmpgtsh (vss, vss);
    VCMPGTSH vector_gtv8hi {}

  const int __builtin_altivec_vcmpgtsh_p (int, vss, vss);
    VCMPGTSH_P vector_gt_v8hi_p {pred}

  const vsi __builtin_altivec_vcmpgtsw (vsi, vsi);
    VCMPGTSW vector_gtv4si {}

  const int __builtin_altivec_vcmpgtsw_p (int, vsi, vsi);
    VCMPGTSW_P vector_gt_v4si_p {pred}

  const vsc __builtin_altivec_vcmpgtub (vuc, vuc);
    VCMPGTUB vector_gtuv16qi {}

  const int __builtin_altivec_vcmpgtub_p (int, vsc, vsc);
    VCMPGTUB_P vector_gtu_v16qi_p {pred}

  const vss __builtin_altivec_vcmpgtuh (vus, vus);
    VCMPGTUH vector_gtuv8hi {}

  const int __builtin_altivec_vcmpgtuh_p (int, vss, vss);
    VCMPGTUH_P vector_gtu_v8hi_p {pred}

  const vsi __builtin_altivec_vcmpgtuw (vui, vui);
    VCMPGTUW vector_gtuv4si {}

  const int __builtin_altivec_vcmpgtuw_p (int, vsi, vsi);
    VCMPGTUW_P vector_gtu_v4si_p {pred}

  const vsc __builtin_altivec_vcmpneb (vsc, vsc);
    VCMPNEB altivec_vcmpne_v16qi {}

  const vss __builtin_altivec_vcmpneh (vss, vss);
    VCMPNEH altivec_vcmpne_v8hi {}

  const vsi __builtin_altivec_vcmpnew (vsi, vsi);
    VCMPNEW altivec_vcmpne_v4si {}

  const vsi __builtin_altivec_vctsxs (vf, const int<5>);
    VCTSXS altivec_vctsxs {}

  const vui __builtin_altivec_vctuxs (vf, const int<5>);
    VCTUXS altivec_vctuxs {}

  fpmath vf __builtin_altivec_vexptefp (vf);
    VEXPTEFP altivec_vexptefp {}

  fpmath vf __builtin_altivec_vlogefp (vf);
    VLOGEFP altivec_vlogefp {}

  fpmath vf __builtin_altivec_vmaddfp (vf, vf, vf);
    VMADDFP fmav4sf4 {}

  const vf __builtin_altivec_vmaxfp (vf, vf);
    VMAXFP smaxv4sf3 {}

  const vsc __builtin_altivec_vmaxsb (vsc, vsc);
    VMAXSB smaxv16qi3 {}

  const vuc __builtin_altivec_vmaxub (vuc, vuc);
    VMAXUB umaxv16qi3 {}

  const vss __builtin_altivec_vmaxsh (vss, vss);
    VMAXSH smaxv8hi3 {}

  const vsi __builtin_altivec_vmaxsw (vsi, vsi);
    VMAXSW smaxv4si3 {}

  const vus __builtin_altivec_vmaxuh (vus, vus);
    VMAXUH umaxv8hi3 {}

  const vui __builtin_altivec_vmaxuw (vui, vui);
    VMAXUW umaxv4si3 {}

  vss __builtin_altivec_vmhaddshs (vss, vss, vss);
    VMHADDSHS altivec_vmhaddshs {}

  vss __builtin_altivec_vmhraddshs (vss, vss, vss);
    VMHRADDSHS altivec_vmhraddshs {}

  const vf __builtin_altivec_vminfp (vf, vf);
    VMINFP sminv4sf3 {}

  const vsc __builtin_altivec_vminsb (vsc, vsc);
    VMINSB sminv16qi3 {}

  const vss __builtin_altivec_vminsh (vss, vss);
    VMINSH sminv8hi3 {}

  const vsi __builtin_altivec_vminsw (vsi, vsi);
    VMINSW sminv4si3 {}

  const vuc __builtin_altivec_vminub (vuc, vuc);
    VMINUB uminv16qi3 {}

  const vus __builtin_altivec_vminuh (vus, vus);
    VMINUH uminv8hi3 {}

  const vui __builtin_altivec_vminuw (vui, vui);
    VMINUW uminv4si3 {}

  const vss __builtin_altivec_vmladduhm (vss, vss, vss);
    VMLADDUHM fmav8hi4 {}

  const vsc __builtin_altivec_vmrghb (vsc, vsc);
    VMRGHB altivec_vmrghb {}

  const vss __builtin_altivec_vmrghh (vss, vss);
    VMRGHH altivec_vmrghh {}

  const vsi __builtin_altivec_vmrghw (vsi, vsi);
    VMRGHW altivec_vmrghw {}

  const vsc __builtin_altivec_vmrglb (vsc, vsc);
    VMRGLB altivec_vmrglb {}

  const vss __builtin_altivec_vmrglh (vss, vss);
    VMRGLH altivec_vmrglh {}

  const vsi __builtin_altivec_vmrglw (vsi, vsi);
    VMRGLW altivec_vmrglw {}

  const vsi __builtin_altivec_vmsummbm (vsc, vuc, vsi);
    VMSUMMBM altivec_vmsummbm {}

  const vsi __builtin_altivec_vmsumshm (vss, vss, vsi);
    VMSUMSHM altivec_vmsumshm {}

  vsi __builtin_altivec_vmsumshs (vss, vss, vsi);
    VMSUMSHS altivec_vmsumshs {}

  const vui __builtin_altivec_vmsumubm (vuc, vuc, vui);
    VMSUMUBM altivec_vmsumubm {}

  const vui __builtin_altivec_vmsumuhm (vus, vus, vui);
    VMSUMUHM altivec_vmsumuhm {}

  vui __builtin_altivec_vmsumuhs (vus, vus, vui);
    VMSUMUHS altivec_vmsumuhs {}

  const vss __builtin_altivec_vmulesb (vsc, vsc);
    VMULESB vec_widen_smult_even_v16qi {}

  const vsi __builtin_altivec_vmulesh (vss, vss);
    VMULESH vec_widen_smult_even_v8hi {}

  const vus __builtin_altivec_vmuleub (vuc, vuc);
    VMULEUB vec_widen_umult_even_v16qi {}

  const vui __builtin_altivec_vmuleuh (vus, vus);
    VMULEUH vec_widen_umult_even_v8hi {}

  const vss __builtin_altivec_vmulosb (vsc, vsc);
    VMULOSB vec_widen_smult_odd_v16qi {}

  const vus __builtin_altivec_vmuloub (vuc, vuc);
    VMULOUB vec_widen_umult_odd_v16qi {}

  const vsi __builtin_altivec_vmulosh (vss, vss);
    VMULOSH vec_widen_smult_odd_v8hi {}

  const vui __builtin_altivec_vmulouh (vus, vus);
    VMULOUH vec_widen_umult_odd_v8hi {}

  fpmath vf __builtin_altivec_vnmsubfp (vf, vf, vf);
    VNMSUBFP nfmsv4sf4 {}

  const vsc __builtin_altivec_vnor_v16qi (vsc, vsc);
    VNOR_V16QI norv16qi3 {}

  const vuc __builtin_altivec_vnor_v16qi_uns (vuc, vuc);
    VNOR_V16QI_UNS norv16qi3 {}

  const vf __builtin_altivec_vnor_v4sf (vf, vf);
    VNOR_V4SF norv4sf3 {}

  const vsi __builtin_altivec_vnor_v4si (vsi, vsi);
    VNOR_V4SI norv4si3 {}

  const vui __builtin_altivec_vnor_v4si_uns (vui, vui);
    VNOR_V4SI_UNS norv4si3 {}

  const vss __builtin_altivec_vnor_v8hi (vss, vss);
    VNOR_V8HI norv8hi3 {}

  const vus __builtin_altivec_vnor_v8hi_uns (vus, vus);
    VNOR_V8HI_UNS norv8hi3 {}

  const vsc __builtin_altivec_vor_v16qi (vsc, vsc);
    VOR_V16QI iorv16qi3 {}

  const vuc __builtin_altivec_vor_v16qi_uns (vuc, vuc);
    VOR_V16QI_UNS iorv16qi3 {}

  const vf __builtin_altivec_vor_v4sf (vf, vf);
    VOR_V4SF iorv4sf3 {}

  const vsi __builtin_altivec_vor_v4si (vsi, vsi);
    VOR_V4SI iorv4si3 {}

  const vui __builtin_altivec_vor_v4si_uns (vui, vui);
    VOR_V4SI_UNS iorv4si3 {}

  const vss __builtin_altivec_vor_v8hi (vss, vss);
    VOR_V8HI iorv8hi3 {}

  const vus __builtin_altivec_vor_v8hi_uns (vus, vus);
    VOR_V8HI_UNS iorv8hi3 {}

  const vsc __builtin_altivec_vperm_16qi (vsc, vsc, vuc);
    VPERM_16QI altivec_vperm_v16qi {}

  const vuc __builtin_altivec_vperm_16qi_uns (vuc, vuc, vuc);
    VPERM_16QI_UNS altivec_vperm_v16qi_uns {}

  const vsq __builtin_altivec_vperm_1ti (vsq, vsq, vuc);
    VPERM_1TI altivec_vperm_v1ti {}

  const vuq __builtin_altivec_vperm_1ti_uns (vuq, vuq, vuc);
    VPERM_1TI_UNS altivec_vperm_v1ti_uns {}

  const vf __builtin_altivec_vperm_4sf (vf, vf, vuc);
    VPERM_4SF altivec_vperm_v4sf {}

  const vsi __builtin_altivec_vperm_4si (vsi, vsi, vuc);
    VPERM_4SI altivec_vperm_v4si {}

  const vui __builtin_altivec_vperm_4si_uns (vui, vui, vuc);
    VPERM_4SI_UNS altivec_vperm_v4si_uns {}

  const vss __builtin_altivec_vperm_8hi (vss, vss, vuc);
    VPERM_8HI altivec_vperm_v8hi {}

  const vus __builtin_altivec_vperm_8hi_uns (vus, vus, vuc);
    VPERM_8HI_UNS altivec_vperm_v8hi_uns {}

  const vp __builtin_altivec_vpkpx (vui, vui);
    VPKPX altivec_vpkpx {}

  const vsc __builtin_altivec_vpkshss (vss, vss);
    VPKSHSS altivec_vpkshss {}

  const vuc __builtin_altivec_vpkshus (vss, vss);
    VPKSHUS altivec_vpkshus {}

  const vss __builtin_altivec_vpkswss (vsi, vsi);
    VPKSWSS altivec_vpkswss {}

  const vus __builtin_altivec_vpkswus (vsi, vsi);
    VPKSWUS altivec_vpkswus {}

  const vsc __builtin_altivec_vpkuhum (vss, vss);
    VPKUHUM altivec_vpkuhum {}

  const vuc __builtin_altivec_vpkuhus (vus, vus);
    VPKUHUS altivec_vpkuhus {}

  const vss __builtin_altivec_vpkuwum (vsi, vsi);
    VPKUWUM altivec_vpkuwum {}

  const vus __builtin_altivec_vpkuwus (vui, vui);
    VPKUWUS altivec_vpkuwus {}

  const vf __builtin_altivec_vrecipdivfp (vf, vf);
    VRECIPFP recipv4sf3 {}

  fpmath vf __builtin_altivec_vrefp (vf);
    VREFP rev4sf2 {}

  const vsc __builtin_altivec_vreve_v16qi (vsc);
    VREVE_V16QI altivec_vrevev16qi2 {}

  const vf __builtin_altivec_vreve_v4sf (vf);
    VREVE_V4SF altivec_vrevev4sf2 {}

  const vsi __builtin_altivec_vreve_v4si (vsi);
    VREVE_V4SI altivec_vrevev4si2 {}

  const vss __builtin_altivec_vreve_v8hi (vss);
    VREVE_V8HI altivec_vrevev8hi2 {}

  fpmath vf __builtin_altivec_vrfim (vf);
    VRFIM vector_floorv4sf2 {}

  fpmath vf __builtin_altivec_vrfin (vf);
    VRFIN altivec_vrfin {}

  fpmath vf __builtin_altivec_vrfip (vf);
    VRFIP vector_ceilv4sf2 {}

  fpmath vf __builtin_altivec_vrfiz (vf);
    VRFIZ vector_btruncv4sf2 {}

  const vsc __builtin_altivec_vrlb (vsc, vsc);
    VRLB vrotlv16qi3 {}

  const vss __builtin_altivec_vrlh (vss, vss);
    VRLH vrotlv8hi3 {}

  const vsi __builtin_altivec_vrlw (vsi, vsi);
    VRLW vrotlv4si3 {}

  fpmath vf __builtin_altivec_vrsqrtefp (vf);
    VRSQRTEFP rsqrtev4sf2 {}

  fpmath vf __builtin_altivec_vrsqrtfp (vf);
    VRSQRTFP rsqrtv4sf2 {}

  const vsc __builtin_altivec_vsel_16qi (vsc, vsc, vuc);
    VSEL_16QI vector_select_v16qi {}

  const vuc __builtin_altivec_vsel_16qi_uns (vuc, vuc, vuc);
    VSEL_16QI_UNS vector_select_v16qi_uns {}

  const vsq __builtin_altivec_vsel_1ti (vsq, vsq, vuq);
    VSEL_1TI vector_select_v1ti {}

  const vuq __builtin_altivec_vsel_1ti_uns (vuq, vuq, vuq);
    VSEL_1TI_UNS vector_select_v1ti_uns {}

  const vf __builtin_altivec_vsel_4sf (vf, vf, vf);
    VSEL_4SF vector_select_v4sf {}

  const vsi __builtin_altivec_vsel_4si (vsi, vsi, vui);
    VSEL_4SI vector_select_v4si {}

  const vui __builtin_altivec_vsel_4si_uns (vui, vui, vui);
    VSEL_4SI_UNS vector_select_v4si_uns {}

  const vss __builtin_altivec_vsel_8hi (vss, vss, vus);
    VSEL_8HI vector_select_v8hi {}

  const vus __builtin_altivec_vsel_8hi_uns (vus, vus, vus);
    VSEL_8HI_UNS vector_select_v8hi_uns {}

  const vsi __builtin_altivec_vsl (vsi, vsi);
    VSL altivec_vsl {}

  const vsc __builtin_altivec_vslb (vsc, vuc);
    VSLB vashlv16qi3 {}

  const vsc __builtin_altivec_vsldoi_16qi (vsc, vsc, const int<4>);
    VSLDOI_16QI altivec_vsldoi_v16qi {}

  const vf __builtin_altivec_vsldoi_4sf (vf, vf, const int<4>);
    VSLDOI_4SF altivec_vsldoi_v4sf {}

  const vsi __builtin_altivec_vsldoi_4si (vsi, vsi, const int<4>);
    VSLDOI_4SI altivec_vsldoi_v4si {}

  const vss __builtin_altivec_vsldoi_8hi (vss, vss, const int<4>);
    VSLDOI_8HI altivec_vsldoi_v8hi {}

  const vss __builtin_altivec_vslh (vss, vus);
    VSLH vashlv8hi3 {}

  const vsi __builtin_altivec_vslo (vsi, vsi);
    VSLO altivec_vslo {}

  const vsi __builtin_altivec_vslw (vsi, vui);
    VSLW vashlv4si3 {}

  const vsc __builtin_altivec_vspltb (vsc, const int<4>);
    VSPLTB altivec_vspltb {}

  const vss __builtin_altivec_vsplth (vss, const int<3>);
    VSPLTH altivec_vsplth {}

  const vsc __builtin_altivec_vspltisb (const int<-16,15>);
    VSPLTISB altivec_vspltisb {}

  const vss __builtin_altivec_vspltish (const int<-16,15>);
    VSPLTISH altivec_vspltish {}

  const vsi __builtin_altivec_vspltisw (const int<-16,15>);
    VSPLTISW altivec_vspltisw {}

  const vsi __builtin_altivec_vspltw (vsi, const int<2>);
    VSPLTW altivec_vspltw {}

  const vsi __builtin_altivec_vsr (vsi, vsi);
    VSR altivec_vsr {}

  const vsc __builtin_altivec_vsrab (vsc, vuc);
    VSRAB vashrv16qi3 {}

  const vss __builtin_altivec_vsrah (vss, vus);
    VSRAH vashrv8hi3 {}

  const vsi __builtin_altivec_vsraw (vsi, vui);
    VSRAW vashrv4si3 {}

  const vsc __builtin_altivec_vsrb (vsc, vuc);
    VSRB vlshrv16qi3 {}

  const vss __builtin_altivec_vsrh (vss, vus);
    VSRH vlshrv8hi3 {}

  const vsi __builtin_altivec_vsro (vsi, vsi);
    VSRO altivec_vsro {}

  const vsi __builtin_altivec_vsrw (vsi, vui);
    VSRW vlshrv4si3 {}

  const vsi __builtin_altivec_vsubcuw (vsi, vsi);
    VSUBCUW altivec_vsubcuw {}

  const vf __builtin_altivec_vsubfp (vf, vf);
    VSUBFP subv4sf3 {}

  const vsc __builtin_altivec_vsubsbs (vsc, vsc);
    VSUBSBS altivec_vsubsbs {}

  const vss __builtin_altivec_vsubshs (vss, vss);
    VSUBSHS altivec_vsubshs {}

  const vsi __builtin_altivec_vsubsws (vsi, vsi);
    VSUBSWS altivec_vsubsws {}

  const vuc __builtin_altivec_vsububm (vuc, vuc);
    VSUBUBM subv16qi3 {}

  const vuc __builtin_altivec_vsububs (vuc, vuc);
    VSUBUBS altivec_vsububs {}

  const vus __builtin_altivec_vsubuhm (vus, vus);
    VSUBUHM subv8hi3 {}

  const vus __builtin_altivec_vsubuhs (vus, vus);
    VSUBUHS altivec_vsubuhs {}

  const vui __builtin_altivec_vsubuwm (vui, vui);
    VSUBUWM subv4si3 {}

  const vui __builtin_altivec_vsubuws (vui, vui);
    VSUBUWS altivec_vsubuws {}

  const vsi __builtin_altivec_vsum2sws (vsi, vsi);
    VSUM2SWS altivec_vsum2sws {}

  const vsi __builtin_altivec_vsum4sbs (vsc, vsi);
    VSUM4SBS altivec_vsum4sbs {}

  const vsi __builtin_altivec_vsum4shs (vss, vsi);
    VSUM4SHS altivec_vsum4shs {}

  const vui __builtin_altivec_vsum4ubs (vuc, vui);
    VSUM4UBS altivec_vsum4ubs {}

  const vsi __builtin_altivec_vsumsws (vsi, vsi);
    VSUMSWS altivec_vsumsws {}

  const vsi __builtin_altivec_vsumsws_be (vsi, vsi);
    VSUMSWS_BE altivec_vsumsws_direct {}

  const vui __builtin_altivec_vupkhpx (vp);
    VUPKHPX altivec_vupkhpx {}

  const vss __builtin_altivec_vupkhsb (vsc);
    VUPKHSB altivec_vupkhsb {}

  const vsi __builtin_altivec_vupkhsh (vss);
    VUPKHSH altivec_vupkhsh {}

  const vui __builtin_altivec_vupklpx (vp);
    VUPKLPX altivec_vupklpx {}

  const vss __builtin_altivec_vupklsb (vsc);
    VUPKLSB altivec_vupklsb {}

  const vsi __builtin_altivec_vupklsh (vss);
    VUPKLSH altivec_vupklsh {}

  const vsc __builtin_altivec_vxor_v16qi (vsc, vsc);
    VXOR_V16QI xorv16qi3 {}

  const vuc __builtin_altivec_vxor_v16qi_uns (vuc, vuc);
    VXOR_V16QI_UNS xorv16qi3 {}

  const vf __builtin_altivec_vxor_v4sf (vf, vf);
    VXOR_V4SF xorv4sf3 {}

  const vsi __builtin_altivec_vxor_v4si (vsi, vsi);
    VXOR_V4SI xorv4si3 {}

  const vui __builtin_altivec_vxor_v4si_uns (vui, vui);
    VXOR_V4SI_UNS xorv4si3 {}

  const vss __builtin_altivec_vxor_v8hi (vss, vss);
    VXOR_V8HI xorv8hi3 {}

  const vus __builtin_altivec_vxor_v8hi_uns (vus, vus);
    VXOR_V8HI_UNS xorv8hi3 {}

  const signed char __builtin_vec_ext_v16qi (vsc, signed int);
    VEC_EXT_V16QI nothing {extract}

  const float __builtin_vec_ext_v4sf (vf, signed int);
    VEC_EXT_V4SF nothing {extract}

  const signed int __builtin_vec_ext_v4si (vsi, signed int);
    VEC_EXT_V4SI nothing {extract}

  const signed short __builtin_vec_ext_v8hi (vss, signed int);
    VEC_EXT_V8HI nothing {extract}

  const vsc __builtin_vec_init_v16qi (signed char, signed char, signed char, \
            signed char, signed char, signed char, signed char, signed char, \
            signed char, signed char, signed char, signed char, signed char, \
            signed char, signed char, signed char);
    VEC_INIT_V16QI nothing {init}

  const vf __builtin_vec_init_v4sf (float, float, float, float);
    VEC_INIT_V4SF nothing {init}

  const vsi __builtin_vec_init_v4si (signed int, signed int, signed int, \
                                     signed int);
    VEC_INIT_V4SI nothing {init}

  const vss __builtin_vec_init_v8hi (signed short, signed short, signed short,\
             signed short, signed short, signed short, signed short, \
             signed short);
    VEC_INIT_V8HI nothing {init}

  const vsc __builtin_vec_set_v16qi (vsc, signed char, const int<4>);
    VEC_SET_V16QI nothing {set}

  const vf __builtin_vec_set_v4sf (vf, float, const int<2>);
    VEC_SET_V4SF nothing {set}

  const vsi __builtin_vec_set_v4si (vsi, signed int, const int<2>);
    VEC_SET_V4SI nothing {set}

  const vss __builtin_vec_set_v8hi (vss, signed short, const int<3>);
    VEC_SET_V8HI nothing {set}


; Cell builtins.
[cell]
  pure vsc __builtin_altivec_lvlx (signed long, const void *);
    LVLX altivec_lvlx {ldvec}

  pure vsc __builtin_altivec_lvlxl (signed long, const void *);
    LVLXL altivec_lvlxl {ldvec}

  pure vsc __builtin_altivec_lvrx (signed long, const void *);
    LVRX altivec_lvrx {ldvec}

  pure vsc __builtin_altivec_lvrxl (signed long, const void *);
    LVRXL altivec_lvrxl {ldvec}

  void __builtin_altivec_stvlx (vsc, signed long, void *);
    STVLX altivec_stvlx {stvec}

  void __builtin_altivec_stvlxl (vsc, signed long, void *);
    STVLXL altivec_stvlxl {stvec}

  void __builtin_altivec_stvrx (vsc, signed long, void *);
    STVRX altivec_stvrx {stvec}

  void __builtin_altivec_stvrxl (vsc, signed long, void *);
    STVRXL altivec_stvrxl {stvec}


; VSX builtins.
[vsx]
  pure vd __builtin_altivec_lvx_v2df (signed long, const void *);
    LVX_V2DF altivec_lvx_v2df {ldvec}

  pure vsll __builtin_altivec_lvx_v2di (signed long, const void *);
    LVX_V2DI altivec_lvx_v2di {ldvec}

  pure vd __builtin_altivec_lvxl_v2df (signed long, const void *);
    LVXL_V2DF altivec_lvxl_v2df {ldvec}

  pure vsll __builtin_altivec_lvxl_v2di (signed long, const void *);
    LVXL_V2DI altivec_lvxl_v2di {ldvec}

  const vd __builtin_altivec_nabs_v2df (vd);
    NABS_V2DF vsx_nabsv2df2 {}

  const vsll __builtin_altivec_nabs_v2di (vsll);
    NABS_V2DI nabsv2di2 {}

  const vd __builtin_altivec_neg_v2df (vd);
    NEG_V2DF negv2df2 {}

  void __builtin_altivec_stvx_v2df (vd, signed long, void *);
    STVX_V2DF altivec_stvx_v2df {stvec}

  void __builtin_altivec_stvx_v2di (vsll, signed long, void *);
    STVX_V2DI altivec_stvx_v2di {stvec}

  void __builtin_altivec_stvxl_v2df (vd, signed long, void *);
    STVXL_V2DF altivec_stvxl_v2df {stvec}

  void __builtin_altivec_stvxl_v2di (vsll, signed long, void *);
    STVXL_V2DI altivec_stvxl_v2di {stvec}

  const vd __builtin_altivec_vand_v2df (vd, vd);
    VAND_V2DF andv2df3 {}

  const vsll __builtin_altivec_vand_v2di (vsll, vsll);
    VAND_V2DI andv2di3 {}

  const vull __builtin_altivec_vand_v2di_uns (vull, vull);
    VAND_V2DI_UNS andv2di3 {}

  const vd __builtin_altivec_vandc_v2df (vd, vd);
    VANDC_V2DF andcv2df3 {}

  const vsll __builtin_altivec_vandc_v2di (vsll, vsll);
    VANDC_V2DI andcv2di3 {}

  const vull __builtin_altivec_vandc_v2di_uns (vull, vull);
    VANDC_V2DI_UNS andcv2di3 {}

  const vd __builtin_altivec_vnor_v2df (vd, vd);
    VNOR_V2DF norv2df3 {}

  const vsll __builtin_altivec_vnor_v2di (vsll, vsll);
    VNOR_V2DI norv2di3 {}

  const vull __builtin_altivec_vnor_v2di_uns (vull, vull);
    VNOR_V2DI_UNS norv2di3 {}

  const vd __builtin_altivec_vor_v2df (vd, vd);
    VOR_V2DF iorv2df3 {}

  const vsll __builtin_altivec_vor_v2di (vsll, vsll);
    VOR_V2DI iorv2di3 {}

  const vull __builtin_altivec_vor_v2di_uns (vull, vull);
    VOR_V2DI_UNS iorv2di3 {}

  const vd __builtin_altivec_vperm_2df (vd, vd, vuc);
    VPERM_2DF altivec_vperm_v2df {}

  const vsll __builtin_altivec_vperm_2di (vsll, vsll, vuc);
    VPERM_2DI altivec_vperm_v2di {}

  const vull __builtin_altivec_vperm_2di_uns (vull, vull, vuc);
    VPERM_2DI_UNS altivec_vperm_v2di_uns {}

  const vd __builtin_altivec_vreve_v2df (vd);
    VREVE_V2DF altivec_vrevev2df2 {}

  const vsll __builtin_altivec_vreve_v2di (vsll);
    VREVE_V2DI altivec_vrevev2di2 {}

  const vd __builtin_altivec_vsel_2df (vd, vd, vd);
    VSEL_2DF vector_select_v2df {}

  const vsll __builtin_altivec_vsel_2di (vsll, vsll, vsll);
    VSEL_2DI_B vector_select_v2di {}

  const vull __builtin_altivec_vsel_2di_uns (vull, vull, vull);
    VSEL_2DI_UNS vector_select_v2di_uns {}

  const vd __builtin_altivec_vsldoi_2df (vd, vd, const int<4>);
    VSLDOI_2DF altivec_vsldoi_v2df {}

  const vsll __builtin_altivec_vsldoi_2di (vsll, vsll, const int<4>);
    VSLDOI_2DI altivec_vsldoi_v2di {}

  const vd __builtin_altivec_vxor_v2df (vd, vd);
    VXOR_V2DF xorv2df3 {}

  const vsll __builtin_altivec_vxor_v2di (vsll, vsll);
    VXOR_V2DI xorv2di3 {}

  const vull __builtin_altivec_vxor_v2di_uns (vull, vull);
    VXOR_V2DI_UNS xorv2di3 {}

  const signed __int128 __builtin_vec_ext_v1ti (vsq, signed int);
    VEC_EXT_V1TI nothing {extract}

  const double __builtin_vec_ext_v2df (vd, signed int);
    VEC_EXT_V2DF nothing {extract}

  const signed long long __builtin_vec_ext_v2di (vsll, signed int);
    VEC_EXT_V2DI nothing {extract}

  const vsq __builtin_vec_init_v1ti (signed __int128);
    VEC_INIT_V1TI nothing {init}

  const vd __builtin_vec_init_v2df (double, double);
    VEC_INIT_V2DF nothing {init}

  const vsll __builtin_vec_init_v2di (signed long long, signed long long);
    VEC_INIT_V2DI nothing {init}

  const vsq __builtin_vec_set_v1ti (vsq, signed __int128, const int<0,0>);
    VEC_SET_V1TI nothing {set}

  const vd __builtin_vec_set_v2df (vd, double, const int<1>);
    VEC_SET_V2DF nothing {set}

  const vsll __builtin_vec_set_v2di (vsll, signed long long, const int<1>);
    VEC_SET_V2DI nothing {set}

  const vsc __builtin_vsx_cmpge_16qi (vsc, vsc);
    CMPGE_16QI vector_nltv16qi {}

  const vsll __builtin_vsx_cmpge_2di (vsll, vsll);
    CMPGE_2DI vector_nltv2di {}

  const vsi __builtin_vsx_cmpge_4si (vsi, vsi);
    CMPGE_4SI vector_nltv4si {}

  const vss __builtin_vsx_cmpge_8hi (vss, vss);
    CMPGE_8HI vector_nltv8hi {}

  const vsc __builtin_vsx_cmpge_u16qi (vuc, vuc);
    CMPGE_U16QI vector_nltuv16qi {}

  const vsll __builtin_vsx_cmpge_u2di (vull, vull);
    CMPGE_U2DI vector_nltuv2di {}

  const vsi __builtin_vsx_cmpge_u4si (vui, vui);
    CMPGE_U4SI vector_nltuv4si {}

  const vss __builtin_vsx_cmpge_u8hi (vus, vus);
    CMPGE_U8HI vector_nltuv8hi {}

  const vsc __builtin_vsx_cmple_16qi (vsc, vsc);
    CMPLE_16QI vector_ngtv16qi {}

  const vsll __builtin_vsx_cmple_2di (vsll, vsll);
    CMPLE_2DI vector_ngtv2di {}

  const vsi __builtin_vsx_cmple_4si (vsi, vsi);
    CMPLE_4SI vector_ngtv4si {}

  const vss __builtin_vsx_cmple_8hi (vss, vss);
    CMPLE_8HI vector_ngtv8hi {}

  const vsc __builtin_vsx_cmple_u16qi (vsc, vsc);
    CMPLE_U16QI vector_ngtuv16qi {}

  const vsll __builtin_vsx_cmple_u2di (vsll, vsll);
    CMPLE_U2DI vector_ngtuv2di {}

  const vsi __builtin_vsx_cmple_u4si (vsi, vsi);
    CMPLE_U4SI vector_ngtuv4si {}

  const vss __builtin_vsx_cmple_u8hi (vss, vss);
    CMPLE_U8HI vector_ngtuv8hi {}

  const vd __builtin_vsx_concat_2df (double, double);
    CONCAT_2DF vsx_concat_v2df {}

  const vsll __builtin_vsx_concat_2di (signed long long, signed long long);
    CONCAT_2DI vsx_concat_v2di {}

  const vd __builtin_vsx_cpsgndp (vd, vd);
    CPSGNDP vector_copysignv2df3 {}

  const vf __builtin_vsx_cpsgnsp (vf, vf);
    CPSGNSP vector_copysignv4sf3 {}

  const vsll __builtin_vsx_div_2di (vsll, vsll);
    DIV_V2DI vsx_div_v2di {}

  const vd __builtin_vsx_doublee_v4sf (vf);
    DOUBLEE_V4SF doubleev4sf2 {}

  const vd __builtin_vsx_doublee_v4si (vsi);
    DOUBLEE_V4SI doubleev4si2 {}

  const vd __builtin_vsx_doubleh_v4sf (vf);
    DOUBLEH_V4SF doublehv4sf2 {}

  const vd __builtin_vsx_doubleh_v4si (vsi);
    DOUBLEH_V4SI doublehv4si2 {}

  const vd __builtin_vsx_doublel_v4sf (vf);
    DOUBLEL_V4SF doublelv4sf2 {}

  const vd __builtin_vsx_doublel_v4si (vsi);
    DOUBLEL_V4SI doublelv4si2 {}

  const vd __builtin_vsx_doubleo_v4sf (vf);
    DOUBLEO_V4SF doubleov4sf2 {}

  const vd __builtin_vsx_doubleo_v4si (vsi);
    DOUBLEO_V4SI doubleov4si2 {}

  const vf __builtin_vsx_floate_v2df (vd);
    FLOATE_V2DF floatev2df {}

  const vf __builtin_vsx_floate_v2di (vsll);
    FLOATE_V2DI floatev2di {}

  const vf __builtin_vsx_floato_v2df (vd);
    FLOATO_V2DF floatov2df {}

  const vf __builtin_vsx_floato_v2di (vsll);
    FLOATO_V2DI floatov2di {}

  pure vsq __builtin_vsx_ld_elemrev_v1ti (signed long, const void *);
    LD_ELEMREV_V1TI vsx_ld_elemrev_v1ti {ldvec,endian}

  pure vd __builtin_vsx_ld_elemrev_v2df (signed long, const void *);
    LD_ELEMREV_V2DF vsx_ld_elemrev_v2df {ldvec,endian}

  pure vsll __builtin_vsx_ld_elemrev_v2di (signed long, const void *);
    LD_ELEMREV_V2DI vsx_ld_elemrev_v2di {ldvec,endian}

  pure vf __builtin_vsx_ld_elemrev_v4sf (signed long, const void *);
    LD_ELEMREV_V4SF vsx_ld_elemrev_v4sf {ldvec,endian}

  pure vsi __builtin_vsx_ld_elemrev_v4si (signed long, const void *);
    LD_ELEMREV_V4SI vsx_ld_elemrev_v4si {ldvec,endian}

  pure vss __builtin_vsx_ld_elemrev_v8hi (signed long, const void *);
    LD_ELEMREV_V8HI vsx_ld_elemrev_v8hi {ldvec,endian}

  pure vsc __builtin_vsx_ld_elemrev_v16qi (signed long, const void *);
    LD_ELEMREV_V16QI vsx_ld_elemrev_v16qi {ldvec,endian}

; TODO: There was apparent intent in the rs6000-builtin.def to
; have SPECIAL processing for LXSDX, LXVDSX, and STXSDX, but there are
; no def_builtin calls for any of them.  That file was removed as part
; of the BIF rewrite, but at some point, we may want to add a
; set of built-ins for whichever vector types make sense for these.

  pure vsq __builtin_vsx_lxvd2x_v1ti (signed long, const void *);
    LXVD2X_V1TI vsx_load_v1ti {ldvec}

  pure vd __builtin_vsx_lxvd2x_v2df (signed long, const void *);
    LXVD2X_V2DF vsx_load_v2df {ldvec}

  pure vsll __builtin_vsx_lxvd2x_v2di (signed long, const void *);
    LXVD2X_V2DI vsx_load_v2di {ldvec}

  pure vsc __builtin_vsx_lxvw4x_v16qi (signed long, const void *);
    LXVW4X_V16QI vsx_load_v16qi {ldvec}

  pure vf __builtin_vsx_lxvw4x_v4sf (signed long, const void *);
    LXVW4X_V4SF vsx_load_v4sf {ldvec}

  pure vsi __builtin_vsx_lxvw4x_v4si (signed long, const void *);
    LXVW4X_V4SI vsx_load_v4si {ldvec}

  pure vss __builtin_vsx_lxvw4x_v8hi (signed long, const void *);
    LXVW4X_V8HI vsx_load_v8hi {ldvec}

  const vd __builtin_vsx_mergeh_2df (vd, vd);
    VEC_MERGEH_V2DF vsx_mergeh_v2df {}

  const vsll __builtin_vsx_mergeh_2di (vsll, vsll);
    VEC_MERGEH_V2DI vsx_mergeh_v2di {}

  const vd __builtin_vsx_mergel_2df (vd, vd);
    VEC_MERGEL_V2DF vsx_mergel_v2df {}

  const vsll __builtin_vsx_mergel_2di (vsll, vsll);
    VEC_MERGEL_V2DI vsx_mergel_v2di {}

  const vsll __builtin_vsx_mul_2di (vsll, vsll);
    MUL_V2DI vsx_mul_v2di {}

  const vsq __builtin_vsx_set_1ti (vsq, signed __int128, const int<0,0>);
    SET_1TI vsx_set_v1ti {set}

  const vd __builtin_vsx_set_2df (vd, double, const int<0,1>);
    SET_2DF vsx_set_v2df {set}

  const vsll __builtin_vsx_set_2di (vsll, signed long long, const int<0,1>);
    SET_2DI vsx_set_v2di {set}

  const vd __builtin_vsx_splat_2df (double);
    SPLAT_2DF vsx_splat_v2df {}

  const vsll __builtin_vsx_splat_2di (signed long long);
    SPLAT_2DI vsx_splat_v2di {}

  void __builtin_vsx_st_elemrev_v1ti (vsq, signed long, void *);
    ST_ELEMREV_V1TI vsx_st_elemrev_v1ti {stvec,endian}

  void __builtin_vsx_st_elemrev_v2df (vd, signed long, void *);
    ST_ELEMREV_V2DF vsx_st_elemrev_v2df {stvec,endian}

  void __builtin_vsx_st_elemrev_v2di (vsll, signed long, void *);
    ST_ELEMREV_V2DI vsx_st_elemrev_v2di {stvec,endian}

  void __builtin_vsx_st_elemrev_v4sf (vf, signed long, void *);
    ST_ELEMREV_V4SF vsx_st_elemrev_v4sf {stvec,endian}

  void __builtin_vsx_st_elemrev_v4si (vsi, signed long, void *);
    ST_ELEMREV_V4SI vsx_st_elemrev_v4si {stvec,endian}

  void __builtin_vsx_st_elemrev_v8hi (vss, signed long, void *);
    ST_ELEMREV_V8HI vsx_st_elemrev_v8hi {stvec,endian}

  void __builtin_vsx_st_elemrev_v16qi (vsc, signed long, void *);
    ST_ELEMREV_V16QI vsx_st_elemrev_v16qi {stvec,endian}

  void __builtin_vsx_stxvd2x_v1ti (vsq, signed long, void *);
    STXVD2X_V1TI vsx_store_v1ti {stvec}

  void __builtin_vsx_stxvd2x_v2df (vd, signed long, void *);
    STXVD2X_V2DF vsx_store_v2df {stvec}

  void __builtin_vsx_stxvd2x_v2di (vsll, signed long, void *);
    STXVD2X_V2DI vsx_store_v2di {stvec}

  void __builtin_vsx_stxvw4x_v4sf (vf, signed long, void *);
    STXVW4X_V4SF vsx_store_v4sf {stvec}

  void __builtin_vsx_stxvw4x_v4si (vsi, signed long, void *);
    STXVW4X_V4SI vsx_store_v4si {stvec}

  void __builtin_vsx_stxvw4x_v8hi (vss, signed long, void *);
    STXVW4X_V8HI vsx_store_v8hi {stvec}

  void __builtin_vsx_stxvw4x_v16qi (vsc, signed long, void *);
    STXVW4X_V16QI vsx_store_v16qi {stvec}

  const vull __builtin_vsx_udiv_2di (vull, vull);
    UDIV_V2DI vsx_udiv_v2di {}

  const vd __builtin_vsx_uns_doublee_v4si (vsi);
    UNS_DOUBLEE_V4SI unsdoubleev4si2 {}

  const vd __builtin_vsx_uns_doubleh_v4si (vsi);
    UNS_DOUBLEH_V4SI unsdoublehv4si2 {}

  const vd __builtin_vsx_uns_doublel_v4si (vsi);
    UNS_DOUBLEL_V4SI unsdoublelv4si2 {}

  const vd __builtin_vsx_uns_doubleo_v4si (vsi);
    UNS_DOUBLEO_V4SI unsdoubleov4si2 {}

  const vf __builtin_vsx_uns_floate_v2di (vsll);
    UNS_FLOATE_V2DI unsfloatev2di {}

  const vf __builtin_vsx_uns_floato_v2di (vsll);
    UNS_FLOATO_V2DI unsfloatov2di {}

; These are duplicates of __builtin_altivec_* counterparts, and are being
; kept for backwards compatibility.  The reason for their existence is
; unclear.  TODO: Consider deprecation/removal at some point.
  const vsc __builtin_vsx_vperm_16qi (vsc, vsc, vuc);
    VPERM_16QI_X altivec_vperm_v16qi {}

  const vuc __builtin_vsx_vperm_16qi_uns (vuc, vuc, vuc);
    VPERM_16QI_UNS_X altivec_vperm_v16qi_uns {}

  const vsq __builtin_vsx_vperm_1ti (vsq, vsq, vsc);
    VPERM_1TI_X altivec_vperm_v1ti {}

  const vsq __builtin_vsx_vperm_1ti_uns (vsq, vsq, vsc);
    VPERM_1TI_UNS_X altivec_vperm_v1ti_uns {}

  const vd __builtin_vsx_vperm_2df (vd, vd, vuc);
    VPERM_2DF_X altivec_vperm_v2df {}

  const vsll __builtin_vsx_vperm_2di (vsll, vsll, vuc);
    VPERM_2DI_X altivec_vperm_v2di {}

  const vull __builtin_vsx_vperm_2di_uns (vull, vull, vuc);
    VPERM_2DI_UNS_X altivec_vperm_v2di_uns {}

  const vf __builtin_vsx_vperm_4sf (vf, vf, vuc);
    VPERM_4SF_X altivec_vperm_v4sf {}

  const vsi __builtin_vsx_vperm_4si (vsi, vsi, vuc);
    VPERM_4SI_X altivec_vperm_v4si {}

  const vui __builtin_vsx_vperm_4si_uns (vui, vui, vuc);
    VPERM_4SI_UNS_X altivec_vperm_v4si_uns {}

  const vss __builtin_vsx_vperm_8hi (vss, vss, vuc);
    VPERM_8HI_X altivec_vperm_v8hi {}

  const vus __builtin_vsx_vperm_8hi_uns (vus, vus, vuc);
    VPERM_8HI_UNS_X altivec_vperm_v8hi_uns {}

  const vsll __builtin_vsx_vsigned_v2df (vd);
    VEC_VSIGNED_V2DF vsx_xvcvdpsxds {}

  const vsi __builtin_vsx_vsigned_v4sf (vf);
    VEC_VSIGNED_V4SF vsx_xvcvspsxws {}

  const vsi __builtin_vsx_vsignede_v2df (vd);
    VEC_VSIGNEDE_V2DF vsignede_v2df {}

  const vsi __builtin_vsx_vsignedo_v2df (vd);
    VEC_VSIGNEDO_V2DF vsignedo_v2df {}

  const vsll __builtin_vsx_vunsigned_v2df (vd);
    VEC_VUNSIGNED_V2DF vsx_xvcvdpsxds {}

  const vsi __builtin_vsx_vunsigned_v4sf (vf);
    VEC_VUNSIGNED_V4SF vsx_xvcvspsxws {}

  const vsi __builtin_vsx_vunsignede_v2df (vd);
    VEC_VUNSIGNEDE_V2DF vunsignede_v2df {}

  const vsi __builtin_vsx_vunsignedo_v2df (vd);
    VEC_VUNSIGNEDO_V2DF vunsignedo_v2df {}

  const vf __builtin_vsx_xscvdpsp (double);
    XSCVDPSP vsx_xscvdpsp {}

  const double __builtin_vsx_xscvspdp (vf);
    XSCVSPDP vsx_xscvspdp {}

  const double __builtin_vsx_xsmaxdp (double, double);
    XSMAXDP fmaxdf3 {}

  const double __builtin_vsx_xsmindp (double, double);
    XSMINDP fmindf3 {}

  const double __builtin_vsx_xsrdpi (double);
    XSRDPI vsx_xsrdpi {}

  const double __builtin_vsx_xsrdpic (double);
    XSRDPIC vsx_xsrdpic {}

  const double __builtin_vsx_xsrdpim (double);
    XSRDPIM floordf2 {}

  const double __builtin_vsx_xsrdpip (double);
    XSRDPIP ceildf2 {}

  const double __builtin_vsx_xsrdpiz (double);
    XSRDPIZ btruncdf2 {}

  const signed int __builtin_vsx_xstdivdp_fe (double, double);
    XSTDIVDP_FE vsx_tdivdf3_fe {}

  const signed int __builtin_vsx_xstdivdp_fg (double, double);
    XSTDIVDP_FG vsx_tdivdf3_fg {}

  const signed int __builtin_vsx_xstsqrtdp_fe (double);
    XSTSQRTDP_FE vsx_tsqrtdf2_fe {}

  const signed int __builtin_vsx_xstsqrtdp_fg (double);
    XSTSQRTDP_FG vsx_tsqrtdf2_fg {}

  const vd __builtin_vsx_xvabsdp (vd);
    XVABSDP absv2df2 {}

  const vf __builtin_vsx_xvabssp (vf);
    XVABSSP absv4sf2 {}

  fpmath vd __builtin_vsx_xvadddp (vd, vd);
    XVADDDP addv2df3 {}

  fpmath vf __builtin_vsx_xvaddsp (vf, vf);
    XVADDSP addv4sf3 {}

  const vd __builtin_vsx_xvcmpeqdp (vd, vd);
    XVCMPEQDP vector_eqv2df {}

  const signed int __builtin_vsx_xvcmpeqdp_p (signed int, vd, vd);
    XVCMPEQDP_P vector_eq_v2df_p {pred}

  const vf __builtin_vsx_xvcmpeqsp (vf, vf);
    XVCMPEQSP vector_eqv4sf {}

  const signed int __builtin_vsx_xvcmpeqsp_p (signed int, vf, vf);
    XVCMPEQSP_P vector_eq_v4sf_p {pred}

  const vd __builtin_vsx_xvcmpgedp (vd, vd);
    XVCMPGEDP vector_gev2df {}

  const signed int __builtin_vsx_xvcmpgedp_p (signed int, vd, vd);
    XVCMPGEDP_P vector_ge_v2df_p {pred}

  const vf __builtin_vsx_xvcmpgesp (vf, vf);
    XVCMPGESP vector_gev4sf {}

  const signed int __builtin_vsx_xvcmpgesp_p (signed int, vf, vf);
    XVCMPGESP_P vector_ge_v4sf_p {pred}

  const vd __builtin_vsx_xvcmpgtdp (vd, vd);
    XVCMPGTDP vector_gtv2df {}

  const signed int __builtin_vsx_xvcmpgtdp_p (signed int, vd, vd);
    XVCMPGTDP_P vector_gt_v2df_p {pred}

  const vf __builtin_vsx_xvcmpgtsp (vf, vf);
    XVCMPGTSP vector_gtv4sf {}

  const signed int __builtin_vsx_xvcmpgtsp_p (signed int, vf, vf);
    XVCMPGTSP_P vector_gt_v4sf_p {pred}

  const vf __builtin_vsx_xvcvdpsp (vd);
    XVCVDPSP vsx_xvcvdpsp {}

  const vsll __builtin_vsx_xvcvdpsxds (vd);
    XVCVDPSXDS vsx_fix_truncv2dfv2di2 {}

  const vsll __builtin_vsx_xvcvdpsxds_scale (vd, const int);
    XVCVDPSXDS_SCALE vsx_xvcvdpsxds_scale {}

  const vsi __builtin_vsx_xvcvdpsxws (vd);
    XVCVDPSXWS vsx_xvcvdpsxws {}

  const vsll __builtin_vsx_xvcvdpuxds (vd);
    XVCVDPUXDS vsx_fixuns_truncv2dfv2di2 {}

  const vsll __builtin_vsx_xvcvdpuxds_scale (vd, const int);
    XVCVDPUXDS_SCALE vsx_xvcvdpuxds_scale {}

  const vull __builtin_vsx_xvcvdpuxds_uns (vd);
    XVCVDPUXDS_UNS vsx_fixuns_truncv2dfv2di2 {}

  const vsi __builtin_vsx_xvcvdpuxws (vd);
    XVCVDPUXWS vsx_xvcvdpuxws {}

  const vd __builtin_vsx_xvcvspdp (vf);
    XVCVSPDP vsx_xvcvspdp {}

  const vsll __builtin_vsx_xvcvspsxds (vf);
    XVCVSPSXDS vsx_xvcvspsxds {}

  const vsi __builtin_vsx_xvcvspsxws (vf);
    XVCVSPSXWS vsx_fix_truncv4sfv4si2 {}

  const vsll __builtin_vsx_xvcvspuxds (vf);
    XVCVSPUXDS vsx_xvcvspuxds {}

  const vsi __builtin_vsx_xvcvspuxws (vf);
    XVCVSPUXWS vsx_fixuns_truncv4sfv4si2 {}

  const vd __builtin_vsx_xvcvsxddp (vsll);
    XVCVSXDDP vsx_floatv2div2df2 {}

  const vd __builtin_vsx_xvcvsxddp_scale (vsll, const int<5>);
    XVCVSXDDP_SCALE vsx_xvcvsxddp_scale {}

  const vf __builtin_vsx_xvcvsxdsp (vsll);
    XVCVSXDSP vsx_xvcvsxdsp {}

  const vd __builtin_vsx_xvcvsxwdp (vsi);
    XVCVSXWDP vsx_xvcvsxwdp {}

  const vf __builtin_vsx_xvcvsxwsp (vsi);
    XVCVSXWSP vsx_floatv4siv4sf2 {}

  const vd __builtin_vsx_xvcvuxddp (vsll);
    XVCVUXDDP vsx_floatunsv2div2df2 {}

  const vd __builtin_vsx_xvcvuxddp_scale (vsll, const int<5>);
    XVCVUXDDP_SCALE vsx_xvcvuxddp_scale {}

  const vd __builtin_vsx_xvcvuxddp_uns (vull);
    XVCVUXDDP_UNS vsx_floatunsv2div2df2 {}

  const vf __builtin_vsx_xvcvuxdsp (vull);
    XVCVUXDSP vsx_xvcvuxdsp {}

  const vd __builtin_vsx_xvcvuxwdp (vsi);
    XVCVUXWDP vsx_xvcvuxwdp {}

  const vf __builtin_vsx_xvcvuxwsp (vsi);
    XVCVUXWSP vsx_floatunsv4siv4sf2 {}

  fpmath vd __builtin_vsx_xvdivdp (vd, vd);
    XVDIVDP divv2df3 {}

  fpmath vf __builtin_vsx_xvdivsp (vf, vf);
    XVDIVSP divv4sf3 {}

  const vd __builtin_vsx_xvmadddp (vd, vd, vd);
    XVMADDDP fmav2df4 {}

  const vf __builtin_vsx_xvmaddsp (vf, vf, vf);
    XVMADDSP fmav4sf4 {}

  const vd __builtin_vsx_xvmaxdp (vd, vd);
    XVMAXDP smaxv2df3 {}

  const vf __builtin_vsx_xvmaxsp (vf, vf);
    XVMAXSP smaxv4sf3 {}

  const vd __builtin_vsx_xvmindp (vd, vd);
    XVMINDP sminv2df3 {}

  const vf __builtin_vsx_xvminsp (vf, vf);
    XVMINSP sminv4sf3 {}

  const vd __builtin_vsx_xvmsubdp (vd, vd, vd);
    XVMSUBDP fmsv2df4 {}

  const vf __builtin_vsx_xvmsubsp (vf, vf, vf);
    XVMSUBSP fmsv4sf4 {}

  fpmath vd __builtin_vsx_xvmuldp (vd, vd);
    XVMULDP mulv2df3 {}

  fpmath vf __builtin_vsx_xvmulsp (vf, vf);
    XVMULSP mulv4sf3 {}

  const vd __builtin_vsx_xvnabsdp (vd);
    XVNABSDP vsx_nabsv2df2 {}

  const vf __builtin_vsx_xvnabssp (vf);
    XVNABSSP vsx_nabsv4sf2 {}

  const vd __builtin_vsx_xvnegdp (vd);
    XVNEGDP negv2df2 {}

  const vf __builtin_vsx_xvnegsp (vf);
    XVNEGSP negv4sf2 {}

  const vd __builtin_vsx_xvnmadddp (vd, vd, vd);
    XVNMADDDP nfmav2df4 {}

  const vf __builtin_vsx_xvnmaddsp (vf, vf, vf);
    XVNMADDSP nfmav4sf4 {}

  const vd __builtin_vsx_xvnmsubdp (vd, vd, vd);
    XVNMSUBDP nfmsv2df4 {}

  const vf __builtin_vsx_xvnmsubsp (vf, vf, vf);
    XVNMSUBSP nfmsv4sf4 {}

  const vd __builtin_vsx_xvrdpi (vd);
    XVRDPI vsx_xvrdpi {}

  const vd __builtin_vsx_xvrdpic (vd);
    XVRDPIC vsx_xvrdpic {}

  const vd __builtin_vsx_xvrdpim (vd);
    XVRDPIM vsx_floorv2df2 {}

  const vd __builtin_vsx_xvrdpip (vd);
    XVRDPIP vsx_ceilv2df2 {}

  const vd __builtin_vsx_xvrdpiz (vd);
    XVRDPIZ vsx_btruncv2df2 {}

  fpmath vd __builtin_vsx_xvrecipdivdp (vd, vd);
    RECIP_V2DF recipv2df3 {}

  fpmath vf __builtin_vsx_xvrecipdivsp (vf, vf);
    RECIP_V4SF recipv4sf3 {}

  const vd __builtin_vsx_xvredp (vd);
    XVREDP vsx_frev2df2 {}

  const vf __builtin_vsx_xvresp (vf);
    XVRESP vsx_frev4sf2 {}

  const vf __builtin_vsx_xvrspi (vf);
    XVRSPI vsx_xvrspi {}

  const vf __builtin_vsx_xvrspic (vf);
    XVRSPIC vsx_xvrspic {}

  const vf __builtin_vsx_xvrspim (vf);
    XVRSPIM vsx_floorv4sf2 {}

  const vf __builtin_vsx_xvrspip (vf);
    XVRSPIP vsx_ceilv4sf2 {}

  const vf __builtin_vsx_xvrspiz (vf);
    XVRSPIZ vsx_btruncv4sf2 {}

  const vd __builtin_vsx_xvrsqrtdp (vd);
    RSQRT_2DF rsqrtv2df2 {}

  const vf __builtin_vsx_xvrsqrtsp (vf);
    RSQRT_4SF rsqrtv4sf2 {}

  const vd __builtin_vsx_xvrsqrtedp (vd);
    XVRSQRTEDP rsqrtev2df2 {}

  const vf __builtin_vsx_xvrsqrtesp (vf);
    XVRSQRTESP rsqrtev4sf2 {}

  const vd __builtin_vsx_xvsqrtdp (vd);
    XVSQRTDP sqrtv2df2 {}

  const vf __builtin_vsx_xvsqrtsp (vf);
    XVSQRTSP sqrtv4sf2 {}

  fpmath vd __builtin_vsx_xvsubdp (vd, vd);
    XVSUBDP subv2df3 {}

  fpmath vf __builtin_vsx_xvsubsp (vf, vf);
    XVSUBSP subv4sf3 {}

  const signed int __builtin_vsx_xvtdivdp_fe (vd, vd);
    XVTDIVDP_FE vsx_tdivv2df3_fe {}

  const signed int __builtin_vsx_xvtdivdp_fg (vd, vd);
    XVTDIVDP_FG vsx_tdivv2df3_fg {}

  const signed int __builtin_vsx_xvtdivsp_fe (vf, vf);
    XVTDIVSP_FE vsx_tdivv4sf3_fe {}

  const signed int __builtin_vsx_xvtdivsp_fg (vf, vf);
    XVTDIVSP_FG vsx_tdivv4sf3_fg {}

  const signed int __builtin_vsx_xvtsqrtdp_fe (vd);
    XVTSQRTDP_FE vsx_tsqrtv2df2_fe {}

  const signed int __builtin_vsx_xvtsqrtdp_fg (vd);
    XVTSQRTDP_FG vsx_tsqrtv2df2_fg {}

  const signed int __builtin_vsx_xvtsqrtsp_fe (vf);
    XVTSQRTSP_FE vsx_tsqrtv4sf2_fe {}

  const signed int __builtin_vsx_xvtsqrtsp_fg (vf);
    XVTSQRTSP_FG vsx_tsqrtv4sf2_fg {}

  const vf __builtin_vsx_xxmrghw (vf, vf);
    XXMRGHW_4SF vsx_xxmrghw_v4sf {}

  const vsi __builtin_vsx_xxmrghw_4si (vsi, vsi);
    XXMRGHW_4SI vsx_xxmrghw_v4si {}

  const vf __builtin_vsx_xxmrglw (vf, vf);
    XXMRGLW_4SF vsx_xxmrglw_v4sf {}

  const vsi __builtin_vsx_xxmrglw_4si (vsi, vsi);
    XXMRGLW_4SI vsx_xxmrglw_v4si {}

  const vsc __builtin_vsx_xxpermdi_16qi (vsc, vsc, const int<2>);
    XXPERMDI_16QI vsx_xxpermdi_v16qi {}

  const vsq __builtin_vsx_xxpermdi_1ti (vsq, vsq, const int<2>);
    XXPERMDI_1TI vsx_xxpermdi_v1ti {}

  const vd __builtin_vsx_xxpermdi_2df (vd, vd, const int<2>);
    XXPERMDI_2DF vsx_xxpermdi_v2df {}

  const vsll __builtin_vsx_xxpermdi_2di (vsll, vsll, const int<2>);
    XXPERMDI_2DI vsx_xxpermdi_v2di {}

  const vf __builtin_vsx_xxpermdi_4sf (vf, vf, const int<2>);
    XXPERMDI_4SF vsx_xxpermdi_v4sf {}

  const vsi __builtin_vsx_xxpermdi_4si (vsi, vsi, const int<2>);
    XXPERMDI_4SI vsx_xxpermdi_v4si {}

  const vss __builtin_vsx_xxpermdi_8hi (vss, vss, const int<2>);
    XXPERMDI_8HI vsx_xxpermdi_v8hi {}

  const vsc __builtin_vsx_xxsel_16qi (vsc, vsc, vsc);
    XXSEL_16QI vector_select_v16qi {}

  const vuc __builtin_vsx_xxsel_16qi_uns (vuc, vuc, vuc);
    XXSEL_16QI_UNS vector_select_v16qi_uns {}

  const vsq __builtin_vsx_xxsel_1ti (vsq, vsq, vsq);
    XXSEL_1TI vector_select_v1ti {}

  const vsq __builtin_vsx_xxsel_1ti_uns (vsq, vsq, vsq);
    XXSEL_1TI_UNS vector_select_v1ti_uns {}

  const vd __builtin_vsx_xxsel_2df (vd, vd, vd);
    XXSEL_2DF vector_select_v2df {}

  const vsll __builtin_vsx_xxsel_2di (vsll, vsll, vsll);
    XXSEL_2DI vector_select_v2di {}

  const vull __builtin_vsx_xxsel_2di_uns (vull, vull, vull);
    XXSEL_2DI_UNS vector_select_v2di_uns {}

  const vf __builtin_vsx_xxsel_4sf (vf, vf, vf);
    XXSEL_4SF vector_select_v4sf {}

  const vsi __builtin_vsx_xxsel_4si (vsi, vsi, vsi);
    XXSEL_4SI vector_select_v4si {}

  const vui __builtin_vsx_xxsel_4si_uns (vui, vui, vui);
    XXSEL_4SI_UNS vector_select_v4si_uns {}

  const vss __builtin_vsx_xxsel_8hi (vss, vss, vss);
    XXSEL_8HI vector_select_v8hi {}

  const vus __builtin_vsx_xxsel_8hi_uns (vus, vus, vus);
    XXSEL_8HI_UNS vector_select_v8hi_uns {}

  const vsc __builtin_vsx_xxsldwi_16qi (vsc, vsc, const int<2>);
    XXSLDWI_16QI vsx_xxsldwi_v16qi {}

  const vd __builtin_vsx_xxsldwi_2df (vd, vd, const int<2>);
    XXSLDWI_2DF vsx_xxsldwi_v2df {}

  const vsll __builtin_vsx_xxsldwi_2di (vsll, vsll, const int<2>);
    XXSLDWI_2DI vsx_xxsldwi_v2di {}

  const vf __builtin_vsx_xxsldwi_4sf (vf, vf, const int<2>);
    XXSLDWI_4SF vsx_xxsldwi_v4sf {}

  const vsi __builtin_vsx_xxsldwi_4si (vsi, vsi, const int<2>);
    XXSLDWI_4SI vsx_xxsldwi_v4si {}

  const vss __builtin_vsx_xxsldwi_8hi (vss, vss, const int<2>);
    XXSLDWI_8HI vsx_xxsldwi_v8hi {}

  const vd __builtin_vsx_xxspltd_2df (vd, const int<1>);
    XXSPLTD_V2DF vsx_xxspltd_v2df {}

  const vsll __builtin_vsx_xxspltd_2di (vsll, const int<1>);
    XXSPLTD_V2DI vsx_xxspltd_v2di {}

  const vsq __builtin_pack_vector_int128 (unsigned long long, \
                                          unsigned long long);
    PACK_V1TI packv1ti {}

  const unsigned long __builtin_unpack_vector_int128 (vsq, const int<1>);
    UNPACK_V1TI unpackv1ti {}


; Power7 builtins (ISA 2.06).
[power7]
  const unsigned int __builtin_addg6s (unsigned int, unsigned int);
    ADDG6S addg6s {}

  const signed long __builtin_bpermd (signed long, signed long);
    BPERMD bpermd_di {32bit}

  const unsigned int __builtin_cbcdtd (unsigned int);
    CBCDTD cbcdtd {}

  const unsigned int __builtin_cdtbcd (unsigned int);
    CDTBCD cdtbcd {}

  const signed int __builtin_divwe (signed int, signed int);
    DIVWE dive_si {}

  const unsigned int __builtin_divweu (unsigned int, unsigned int);
    DIVWEU diveu_si {}

  void __builtin_ppc_speculation_barrier ();
    SPECBARR speculation_barrier {}


; Power7 builtins requiring 64-bit GPRs (even with 32-bit addressing).
[power7-64]
  const signed long long __builtin_divde (signed long long, signed long long);
    DIVDE dive_di {}

  const unsigned long long __builtin_divdeu (unsigned long long, \
                                             unsigned long long);
    DIVDEU diveu_di {}


; Power8 vector built-ins.
[power8-vector]
  const vsll __builtin_altivec_abs_v2di (vsll);
    ABS_V2DI absv2di2 {}

  const vsc __builtin_altivec_bcddiv10_v16qi (vsc);
    BCDDIV10_V16QI bcddiv10_v16qi {}

  const vsc __builtin_altivec_bcdmul10_v16qi (vsc);
    BCDMUL10_V16QI bcdmul10_v16qi {}

  const vsc __builtin_altivec_eqv_v16qi (vsc, vsc);
    EQV_V16QI eqvv16qi3 {}

  const vuc __builtin_altivec_eqv_v16qi_uns (vuc, vuc);
    EQV_V16QI_UNS eqvv16qi3 {}

  const vsq __builtin_altivec_eqv_v1ti (vsq, vsq);
    EQV_V1TI eqvv1ti3 {}

  const vuq __builtin_altivec_eqv_v1ti_uns (vuq, vuq);
    EQV_V1TI_UNS eqvv1ti3 {}

  const vd __builtin_altivec_eqv_v2df (vd, vd);
    EQV_V2DF eqvv2df3 {}

  const vsll __builtin_altivec_eqv_v2di (vsll, vsll);
    EQV_V2DI eqvv2di3 {}

  const vull __builtin_altivec_eqv_v2di_uns (vull, vull);
    EQV_V2DI_UNS eqvv2di3 {}

  const vf __builtin_altivec_eqv_v4sf (vf, vf);
    EQV_V4SF eqvv4sf3 {}

  const vsi __builtin_altivec_eqv_v4si (vsi, vsi);
    EQV_V4SI eqvv4si3 {}

  const vui __builtin_altivec_eqv_v4si_uns (vui, vui);
    EQV_V4SI_UNS eqvv4si3 {}

  const vss __builtin_altivec_eqv_v8hi (vss, vss);
    EQV_V8HI eqvv8hi3 {}

  const vus __builtin_altivec_eqv_v8hi_uns (vus, vus);
    EQV_V8HI_UNS eqvv8hi3 {}

  const vsc __builtin_altivec_nand_v16qi (vsc, vsc);
    NAND_V16QI nandv16qi3 {}

  const vuc __builtin_altivec_nand_v16qi_uns (vuc, vuc);
    NAND_V16QI_UNS nandv16qi3 {}

  const vsq __builtin_altivec_nand_v1ti (vsq, vsq);
    NAND_V1TI nandv1ti3 {}

  const vuq __builtin_altivec_nand_v1ti_uns (vuq, vuq);
    NAND_V1TI_UNS nandv1ti3 {}

  const vd __builtin_altivec_nand_v2df (vd, vd);
    NAND_V2DF nandv2df3 {}

  const vsll __builtin_altivec_nand_v2di (vsll, vsll);
    NAND_V2DI nandv2di3 {}

  const vull __builtin_altivec_nand_v2di_uns (vull, vull);
    NAND_V2DI_UNS nandv2di3 {}

  const vf __builtin_altivec_nand_v4sf (vf, vf);
    NAND_V4SF nandv4sf3 {}

  const vsi __builtin_altivec_nand_v4si (vsi, vsi);
    NAND_V4SI nandv4si3 {}

  const vui __builtin_altivec_nand_v4si_uns (vui, vui);
    NAND_V4SI_UNS nandv4si3 {}

  const vss __builtin_altivec_nand_v8hi (vss, vss);
    NAND_V8HI nandv8hi3 {}

  const vus __builtin_altivec_nand_v8hi_uns (vus, vus);
    NAND_V8HI_UNS nandv8hi3 {}

  const vsll __builtin_altivec_neg_v2di (vsll);
    NEG_V2DI negv2di2 {}

  const vsc __builtin_altivec_orc_v16qi (vsc, vsc);
    ORC_V16QI orcv16qi3 {}

  const vuc __builtin_altivec_orc_v16qi_uns (vuc, vuc);
    ORC_V16QI_UNS orcv16qi3 {}

  const vsq __builtin_altivec_orc_v1ti (vsq, vsq);
    ORC_V1TI orcv1ti3 {}

  const vuq __builtin_altivec_orc_v1ti_uns (vuq, vuq);
    ORC_V1TI_UNS orcv1ti3 {}

  const vd __builtin_altivec_orc_v2df (vd, vd);
    ORC_V2DF orcv2df3 {}

  const vsll __builtin_altivec_orc_v2di (vsll, vsll);
    ORC_V2DI orcv2di3 {}

  const vull __builtin_altivec_orc_v2di_uns (vull, vull);
    ORC_V2DI_UNS orcv2di3 {}

  const vf __builtin_altivec_orc_v4sf (vf, vf);
    ORC_V4SF orcv4sf3 {}

  const vsi __builtin_altivec_orc_v4si (vsi, vsi);
    ORC_V4SI orcv4si3 {}

  const vui __builtin_altivec_orc_v4si_uns (vui, vui);
    ORC_V4SI_UNS orcv4si3 {}

  const vss __builtin_altivec_orc_v8hi (vss, vss);
    ORC_V8HI orcv8hi3 {}

  const vus __builtin_altivec_orc_v8hi_uns (vus, vus);
    ORC_V8HI_UNS orcv8hi3 {}

  const vsc __builtin_altivec_vclzb (vsc);
    VCLZB clzv16qi2 {}

  const vsll __builtin_altivec_vclzd (vsll);
    VCLZD clzv2di2 {}

  const vss __builtin_altivec_vclzh (vss);
    VCLZH clzv8hi2 {}

  const vsi __builtin_altivec_vclzw (vsi);
    VCLZW clzv4si2 {}

  const vuc __builtin_altivec_vgbbd (vuc);
    VGBBD p8v_vgbbd {}

  const vsq __builtin_altivec_vaddcuq (vsq, vsq);
    VADDCUQ altivec_vaddcuq {}

  const vsq __builtin_altivec_vaddecuq (vsq, vsq, vsq);
    VADDECUQ altivec_vaddecuq {}

  const vsq __builtin_altivec_vaddeuqm (vsq, vsq, vsq);
    VADDEUQM altivec_vaddeuqm {}

  const vsll __builtin_altivec_vaddudm (vsll, vsll);
    VADDUDM addv2di3 {}

  const vsq __builtin_altivec_vadduqm (vsq, vsq);
    VADDUQM altivec_vadduqm {}

  const vsll __builtin_altivec_vbpermq (vsc, vsc);
    VBPERMQ altivec_vbpermq {}

  const vsc __builtin_altivec_vbpermq2 (vsc, vsc);
    VBPERMQ2 altivec_vbpermq2 {}

  const vsll __builtin_altivec_vcmpequd (vull, vull);
    VCMPEQUD vector_eqv2di {}

  const int __builtin_altivec_vcmpequd_p (int, vsll, vsll);
    VCMPEQUD_P vector_eq_v2di_p {pred}

  const vsll __builtin_altivec_vcmpgtsd (vsll, vsll);
    VCMPGTSD vector_gtv2di {}

  const int __builtin_altivec_vcmpgtsd_p (int, vsll, vsll);
    VCMPGTSD_P vector_gt_v2di_p {pred}

  const vsll __builtin_altivec_vcmpgtud (vull, vull);
    VCMPGTUD vector_gtuv2di {}

  const int __builtin_altivec_vcmpgtud_p (int, vsll, vsll);
    VCMPGTUD_P vector_gtu_v2di_p {pred}

  const vsll __builtin_altivec_vmaxsd (vsll, vsll);
    VMAXSD smaxv2di3 {}

  const vull __builtin_altivec_vmaxud (vull, vull);
    VMAXUD umaxv2di3 {}

  const vsll __builtin_altivec_vminsd (vsll, vsll);
    VMINSD sminv2di3 {}

  const vull __builtin_altivec_vminud (vull, vull);
    VMINUD uminv2di3 {}

  const vd __builtin_altivec_vmrgew_v2df (vd, vd);
    VMRGEW_V2DF p8_vmrgew_v2df {}

  const vsll __builtin_altivec_vmrgew_v2di (vsll, vsll);
    VMRGEW_V2DI p8_vmrgew_v2di {}

  const vf __builtin_altivec_vmrgew_v4sf (vf, vf);
    VMRGEW_V4SF p8_vmrgew_v4sf {}

  const vsi __builtin_altivec_vmrgew_v4si (vsi, vsi);
    VMRGEW_V4SI p8_vmrgew_v4si {}

  const vd __builtin_altivec_vmrgow_v2df (vd, vd);
    VMRGOW_V2DF p8_vmrgow_v2df {}

  const vsll __builtin_altivec_vmrgow_v2di (vsll, vsll);
    VMRGOW_V2DI p8_vmrgow_v2di {}

  const vf __builtin_altivec_vmrgow_v4sf (vf, vf);
    VMRGOW_V4SF p8_vmrgow_v4sf {}

  const vsi __builtin_altivec_vmrgow_v4si (vsi, vsi);
    VMRGOW_V4SI p8_vmrgow_v4si {}

  const vsc __builtin_altivec_vpermxor (vsc, vsc, vsc);
    VPERMXOR altivec_vpermxor {}

  const vsi __builtin_altivec_vpksdss (vsll, vsll);
    VPKSDSS altivec_vpksdss {}

  const vsi __builtin_altivec_vpksdus (vsll, vsll);
    VPKSDUS altivec_vpksdus {}

  const vsi __builtin_altivec_vpkudum (vsll, vsll);
    VPKUDUM altivec_vpkudum {}

  const vsi __builtin_altivec_vpkudus (vsll, vsll);
    VPKUDUS altivec_vpkudus {}

  const vsc __builtin_altivec_vpmsumb (vsc, vsc);
    VPMSUMB_A crypto_vpmsumb {}

  const vsll __builtin_altivec_vpmsumd (vsll, vsll);
    VPMSUMD_A crypto_vpmsumd {}

  const vss __builtin_altivec_vpmsumh (vss, vss);
    VPMSUMH_A crypto_vpmsumh {}

  const vsi __builtin_altivec_vpmsumw (vsi, vsi);
    VPMSUMW_A crypto_vpmsumw {}

  const vsc __builtin_altivec_vpopcntb (vsc);
    VPOPCNTB popcountv16qi2 {}

  const vsll __builtin_altivec_vpopcntd (vsll);
    VPOPCNTD popcountv2di2 {}

  const vss __builtin_altivec_vpopcnth (vss);
    VPOPCNTH popcountv8hi2 {}

  const vsc __builtin_altivec_vpopcntub (vsc);
    VPOPCNTUB popcountv16qi2 {}

  const vsll __builtin_altivec_vpopcntud (vsll);
    VPOPCNTUD popcountv2di2 {}

  const vss __builtin_altivec_vpopcntuh (vss);
    VPOPCNTUH popcountv8hi2 {}

  const vsi __builtin_altivec_vpopcntuw (vsi);
    VPOPCNTUW popcountv4si2 {}

  const vsi __builtin_altivec_vpopcntw (vsi);
    VPOPCNTW popcountv4si2 {}

  const vsll __builtin_altivec_vrld (vsll, vsll);
    VRLD vrotlv2di3 {}

  const vsll __builtin_altivec_vsld (vsll, vsll);
    VSLD vashlv2di3 {}

  const vsll __builtin_altivec_vsrad (vsll, vsll);
    VSRAD vashrv2di3 {}

  const vsll __builtin_altivec_vsrd (vsll, vull);
    VSRD vlshrv2di3 {}

  const vsq __builtin_altivec_vsubcuq (vsq, vsq);
    VSUBCUQ altivec_vsubcuq {}

  const vsq __builtin_altivec_vsubecuq (vsq, vsq, vsq);
    VSUBECUQ altivec_vsubecuq {}

  const vsq __builtin_altivec_vsubeuqm (vsq, vsq, vsq);
    VSUBEUQM altivec_vsubeuqm {}

  const vsll __builtin_altivec_vsubudm (vsll, vsll);
    VSUBUDM subv2di3 {}

  const vsq __builtin_altivec_vsubuqm (vsq, vsq);
    VSUBUQM altivec_vsubuqm {}

  const vsll __builtin_altivec_vupkhsw (vsi);
    VUPKHSW altivec_vupkhsw {}

  const vsll __builtin_altivec_vupklsw (vsi);
    VUPKLSW altivec_vupklsw {}

  const vsq __builtin_bcdadd_v1ti (vsq, vsq, const int<1>);
    BCDADD_V1TI bcdadd_v1ti {}

  const vsc __builtin_bcdadd_v16qi (vsc, vsc, const int<1>);
    BCDADD_V16QI bcdadd_v16qi {}

  const signed int __builtin_bcdadd_eq_v1ti (vsq, vsq, const int<1>);
    BCDADD_EQ_V1TI bcdadd_eq_v1ti {}

  const signed int __builtin_bcdadd_eq_v16qi (vsc, vsc, const int<1>);
    BCDADD_EQ_V16QI bcdadd_eq_v16qi {}

  const signed int __builtin_bcdadd_gt_v1ti (vsq, vsq, const int<1>);
    BCDADD_GT_V1TI bcdadd_gt_v1ti {}

  const signed int __builtin_bcdadd_gt_v16qi (vsc, vsc, const int<1>);
    BCDADD_GT_V16QI bcdadd_gt_v16qi {}

  const signed int __builtin_bcdadd_lt_v1ti (vsq, vsq, const int<1>);
    BCDADD_LT_V1TI bcdadd_lt_v1ti {}

  const signed int __builtin_bcdadd_lt_v16qi (vsc, vsc, const int<1>);
    BCDADD_LT_V16QI bcdadd_lt_v16qi {}

  const signed int __builtin_bcdadd_ov_v1ti (vsq, vsq, const int<1>);
    BCDADD_OV_V1TI bcdadd_unordered_v1ti {}

  const signed int __builtin_bcdadd_ov_v16qi (vsc, vsc, const int<1>);
    BCDADD_OV_V16QI bcdadd_unordered_v16qi {}

  const signed int __builtin_bcdinvalid_v1ti (vsq);
    BCDINVALID_V1TI bcdinvalid_v1ti {}

  const signed int __builtin_bcdinvalid_v16qi (vsc);
    BCDINVALID_V16QI bcdinvalid_v16qi {}

  const vsq __builtin_bcdsub_v1ti (vsq, vsq, const int<1>);
    BCDSUB_V1TI bcdsub_v1ti {}

  const vsc __builtin_bcdsub_v16qi (vsc, vsc, const int<1>);
    BCDSUB_V16QI bcdsub_v16qi {}

  const signed int __builtin_bcdsub_eq_v1ti (vsq, vsq, const int<1>);
    BCDSUB_EQ_V1TI bcdsub_eq_v1ti {}

  const signed int __builtin_bcdsub_eq_v16qi (vsc, vsc, const int<1>);
    BCDSUB_EQ_V16QI bcdsub_eq_v16qi {}

  const signed int __builtin_bcdsub_ge_v1ti (vsq, vsq, const int<1>);
    BCDSUB_GE_V1TI bcdsub_ge_v1ti {}

  const signed int __builtin_bcdsub_ge_v16qi (vsc, vsc, const int<1>);
    BCDSUB_GE_V16QI bcdsub_ge_v16qi {}

  const signed int __builtin_bcdsub_gt_v1ti (vsq, vsq, const int<1>);
    BCDSUB_GT_V1TI bcdsub_gt_v1ti {}

  const signed int __builtin_bcdsub_gt_v16qi (vsc, vsc, const int<1>);
    BCDSUB_GT_V16QI bcdsub_gt_v16qi {}

  const signed int __builtin_bcdsub_le_v1ti (vsq, vsq, const int<1>);
    BCDSUB_LE_V1TI bcdsub_le_v1ti {}

  const signed int __builtin_bcdsub_le_v16qi (vsc, vsc, const int<1>);
    BCDSUB_LE_V16QI bcdsub_le_v16qi {}

  const signed int __builtin_bcdsub_lt_v1ti (vsq, vsq, const int<1>);
    BCDSUB_LT_V1TI bcdsub_lt_v1ti {}

  const signed int __builtin_bcdsub_lt_v16qi (vsc, vsc, const int<1>);
    BCDSUB_LT_V16QI bcdsub_lt_v16qi {}

  const signed int __builtin_bcdsub_ov_v1ti (vsq, vsq, const int<1>);
    BCDSUB_OV_V1TI bcdsub_unordered_v1ti {}

  const signed int __builtin_bcdsub_ov_v16qi (vsc, vsc, const int<1>);
    BCDSUB_OV_V16QI bcdsub_unordered_v16qi {}

  const vuc __builtin_crypto_vpermxor_v16qi (vuc, vuc, vuc);
    VPERMXOR_V16QI crypto_vpermxor_v16qi {}

  const vull __builtin_crypto_vpermxor_v2di (vull, vull, vull);
    VPERMXOR_V2DI crypto_vpermxor_v2di {}

  const vui __builtin_crypto_vpermxor_v4si (vui, vui, vui);
    VPERMXOR_V4SI crypto_vpermxor_v4si {}

  const vus __builtin_crypto_vpermxor_v8hi (vus, vus, vus);
    VPERMXOR_V8HI crypto_vpermxor_v8hi {}

  const vuc __builtin_crypto_vpmsumb (vuc, vuc);
    VPMSUMB crypto_vpmsumb {}

  const vull __builtin_crypto_vpmsumd (vull, vull);
    VPMSUMD crypto_vpmsumd {}

  const vus __builtin_crypto_vpmsumh (vus, vus);
    VPMSUMH crypto_vpmsumh {}

  const vui __builtin_crypto_vpmsumw (vui, vui);
    VPMSUMW crypto_vpmsumw {}

  const vf __builtin_vsx_float2_v2df (vd, vd);
    FLOAT2_V2DF float2_v2df {}

  const vf __builtin_vsx_float2_v2di (vsll, vsll);
    FLOAT2_V2DI float2_v2di {}

  const vsc __builtin_vsx_revb_v16qi (vsc);
    REVB_V16QI revb_v16qi {}

  const vsq __builtin_vsx_revb_v1ti (vsq);
    REVB_V1TI revb_v1ti {}

  const vd __builtin_vsx_revb_v2df (vd);
    REVB_V2DF revb_v2df {}

  const vsll __builtin_vsx_revb_v2di (vsll);
    REVB_V2DI revb_v2di {}

  const vf __builtin_vsx_revb_v4sf (vf);
    REVB_V4SF revb_v4sf {}

  const vsi __builtin_vsx_revb_v4si (vsi);
    REVB_V4SI revb_v4si {}

  const vss __builtin_vsx_revb_v8hi (vss);
    REVB_V8HI revb_v8hi {}

  const vf __builtin_vsx_uns_float2_v2di (vsll, vsll);
    UNS_FLOAT2_V2DI uns_float2_v2di {}

  const vsi __builtin_vsx_vsigned2_v2df (vd, vd);
    VEC_VSIGNED2_V2DF vsigned2_v2df {}

  const vsi __builtin_vsx_vunsigned2_v2df (vd, vd);
    VEC_VUNSIGNED2_V2DF vunsigned2_v2df {}

  const vf __builtin_vsx_xscvdpspn (double);
    XSCVDPSPN vsx_xscvdpspn {}

  const double __builtin_vsx_xscvspdpn (vf);
    XSCVSPDPN vsx_xscvspdpn {}


; Power9 vector builtins.
[power9-vector]
  const vss __builtin_altivec_convert_4f32_8f16 (vf, vf);
    CONVERT_4F32_8F16 convert_4f32_8f16 {}

  const vss __builtin_altivec_convert_4f32_8i16 (vf, vf);
    CONVERT_4F32_8I16 convert_4f32_8i16 {}

  const signed int __builtin_altivec_first_match_index_v16qi (vsc, vsc);
    VFIRSTMATCHINDEX_V16QI first_match_index_v16qi {}

  const signed int __builtin_altivec_first_match_index_v8hi (vss, vss);
    VFIRSTMATCHINDEX_V8HI first_match_index_v8hi {}

  const signed int __builtin_altivec_first_match_index_v4si (vsi, vsi);
    VFIRSTMATCHINDEX_V4SI first_match_index_v4si {}

  const signed int __builtin_altivec_first_match_or_eos_index_v16qi (vsc, vsc);
    VFIRSTMATCHOREOSINDEX_V16QI first_match_or_eos_index_v16qi {}

  const signed int __builtin_altivec_first_match_or_eos_index_v8hi (vss, vss);
    VFIRSTMATCHOREOSINDEX_V8HI first_match_or_eos_index_v8hi {}

  const signed int __builtin_altivec_first_match_or_eos_index_v4si (vsi, vsi);
    VFIRSTMATCHOREOSINDEX_V4SI first_match_or_eos_index_v4si {}

  const signed int __builtin_altivec_first_mismatch_index_v16qi (vsc, vsc);
    VFIRSTMISMATCHINDEX_V16QI first_mismatch_index_v16qi {}

  const signed int __builtin_altivec_first_mismatch_index_v8hi (vss, vss);
    VFIRSTMISMATCHINDEX_V8HI first_mismatch_index_v8hi {}

  const signed int __builtin_altivec_first_mismatch_index_v4si (vsi, vsi);
    VFIRSTMISMATCHINDEX_V4SI first_mismatch_index_v4si {}

  const signed int \
      __builtin_altivec_first_mismatch_or_eos_index_v16qi (vsc, vsc);
    VFIRSTMISMATCHOREOSINDEX_V16QI first_mismatch_or_eos_index_v16qi {}

  const signed int \
      __builtin_altivec_first_mismatch_or_eos_index_v8hi (vss, vss);
    VFIRSTMISMATCHOREOSINDEX_V8HI first_mismatch_or_eos_index_v8hi {}

  const signed int \
      __builtin_altivec_first_mismatch_or_eos_index_v4si (vsi, vsi);
    VFIRSTMISMATCHOREOSINDEX_V4SI first_mismatch_or_eos_index_v4si {}

  const vsc __builtin_altivec_vadub (vsc, vsc);
    VADUB vaduv16qi3 {}

  const vss __builtin_altivec_vaduh (vss, vss);
    VADUH vaduv8hi3 {}

  const vsi __builtin_altivec_vaduw (vsi, vsi);
    VADUW vaduv4si3 {}

  const vsll __builtin_altivec_vbpermd (vsll, vsc);
    VBPERMD altivec_vbpermd {}

  const signed int __builtin_altivec_vclzlsbb_v16qi (vsc);
    VCLZLSBB_V16QI vctzlsbb_v16qi {endian}

  const signed int __builtin_altivec_vclzlsbb_v4si (vsi);
    VCLZLSBB_V4SI vctzlsbb_v4si {endian}

  const signed int __builtin_altivec_vclzlsbb_v8hi (vss);
    VCLZLSBB_V8HI vctzlsbb_v8hi {endian}

  const vsc __builtin_altivec_vctzb (vsc);
    VCTZB ctzv16qi2 {}

  const vsll __builtin_altivec_vctzd (vsll);
    VCTZD ctzv2di2 {}

  const vss __builtin_altivec_vctzh (vss);
    VCTZH ctzv8hi2 {}

  const vsi __builtin_altivec_vctzw (vsi);
    VCTZW ctzv4si2 {}

  const signed int __builtin_altivec_vctzlsbb_v16qi (vsc);
    VCTZLSBB_V16QI vclzlsbb_v16qi {endian}

  const signed int __builtin_altivec_vctzlsbb_v4si (vsi);
    VCTZLSBB_V4SI vclzlsbb_v4si {endian}

  const signed int __builtin_altivec_vctzlsbb_v8hi (vss);
    VCTZLSBB_V8HI vclzlsbb_v8hi {endian}

  const signed int __builtin_altivec_vcmpaeb_p (vsc, vsc);
    VCMPAEB_P vector_ae_v16qi_p {}

  const signed int __builtin_altivec_vcmpaed_p (vsll, vsll);
    VCMPAED_P vector_ae_v2di_p {}

  const signed int __builtin_altivec_vcmpaedp_p (vd, vd);
    VCMPAEDP_P vector_ae_v2df_p {}

  const signed int __builtin_altivec_vcmpaefp_p (vf, vf);
    VCMPAEFP_P vector_ae_v4sf_p {}

  const signed int __builtin_altivec_vcmpaeh_p (vss, vss);
    VCMPAEH_P vector_ae_v8hi_p {}

  const signed int __builtin_altivec_vcmpaew_p (vsi, vsi);
    VCMPAEW_P vector_ae_v4si_p {}

  const signed int __builtin_altivec_vcmpneb_p (vsc, vsc);
    VCMPNEB_P vector_ne_v16qi_p {}

  const signed int __builtin_altivec_vcmpned_p (vsll, vsll);
    VCMPNED_P vector_ne_v2di_p {}

  const signed int __builtin_altivec_vcmpnedp_p (vd, vd);
    VCMPNEDP_P vector_ne_v2df_p {}

  const signed int __builtin_altivec_vcmpnefp_p (vf, vf);
    VCMPNEFP_P vector_ne_v4sf_p {}

  const signed int __builtin_altivec_vcmpneh_p (vss, vss);
    VCMPNEH_P vector_ne_v8hi_p {}

  const signed int __builtin_altivec_vcmpnew_p (vsi, vsi);
    VCMPNEW_P vector_ne_v4si_p {}

  const vsc __builtin_altivec_vcmpnezb (vsc, vsc);
    CMPNEZB vcmpnezb {}

  const signed int __builtin_altivec_vcmpnezb_p (signed int, vsc, vsc);
    VCMPNEZB_P vector_nez_v16qi_p {pred}

  const vss __builtin_altivec_vcmpnezh (vss, vss);
    CMPNEZH vcmpnezh {}

  const signed int __builtin_altivec_vcmpnezh_p (signed int, vss, vss);
    VCMPNEZH_P vector_nez_v8hi_p {pred}

  const vsi __builtin_altivec_vcmpnezw (vsi, vsi);
    CMPNEZW vcmpnezw {}

  const signed int __builtin_altivec_vcmpnezw_p (signed int, vsi, vsi);
    VCMPNEZW_P vector_nez_v4si_p {pred}

  const signed int __builtin_altivec_vextublx (signed int, vsc);
    VEXTUBLX vextublx {}

  const signed int __builtin_altivec_vextubrx (signed int, vsc);
    VEXTUBRX vextubrx {}

  const signed int __builtin_altivec_vextuhlx (signed int, vss);
    VEXTUHLX vextuhlx {}

  const signed int __builtin_altivec_vextuhrx (signed int, vss);
    VEXTUHRX vextuhrx {}

  const signed int __builtin_altivec_vextuwlx (signed int, vsi);
    VEXTUWLX vextuwlx {}

  const signed int __builtin_altivec_vextuwrx (signed int, vsi);
    VEXTUWRX vextuwrx {}

  const vsq __builtin_altivec_vmsumudm (vsll, vsll, vsq);
    VMSUMUDM altivec_vmsumudm {}

  const vsll __builtin_altivec_vprtybd (vsll);
    VPRTYBD rs6000_vprtybv2di2 {}

  const vsq __builtin_altivec_vprtybq (vsq);
    VPRTYBQ rs6000_vprtybv1ti2 {}

  const vsi __builtin_altivec_vprtybw (vsi);
    VPRTYBW rs6000_vprtybv4si2 {}

  const vsll __builtin_altivec_vrldmi (vsll, vsll, vsll);
    VRLDMI altivec_vrldmi {}

  const vsll __builtin_altivec_vrldnm (vsll, vsll);
    VRLDNM altivec_vrldnm {}

  const vsi __builtin_altivec_vrlwmi (vsi, vsi, vsi);
    VRLWMI altivec_vrlwmi {}

  const vsi __builtin_altivec_vrlwnm (vsi, vsi);
    VRLWNM altivec_vrlwnm {}

  const vsll __builtin_altivec_vsignextsb2d (vsc);
    VSIGNEXTSB2D vsx_sign_extend_v16qi_v2di {}

  const vsi __builtin_altivec_vsignextsb2w (vsc);
    VSIGNEXTSB2W vsx_sign_extend_v16qi_v4si {}

  const vsll __builtin_altivec_visgnextsh2d (vss);
    VSIGNEXTSH2D vsx_sign_extend_v8hi_v2di {}

  const vsi __builtin_altivec_vsignextsh2w (vss);
    VSIGNEXTSH2W vsx_sign_extend_v8hi_v4si {}

  const vsll __builtin_altivec_vsignextsw2d (vsi);
    VSIGNEXTSW2D vsx_sign_extend_v4si_v2di {}

  const vsc __builtin_altivec_vslv (vsc, vsc);
    VSLV vslv {}

  const vsc __builtin_altivec_vsrv (vsc, vsc);
    VSRV vsrv {}

  const signed int __builtin_scalar_byte_in_range (signed int, signed int);
    CMPRB cmprb {}

  const signed int \
      __builtin_scalar_byte_in_either_range (signed int, signed int);
    CMPRB2 cmprb2 {}

  const vsll __builtin_vsx_extract4b (vsc, const int[0,12]);
    EXTRACT4B extract4b {}

  const vd __builtin_vsx_extract_exp_dp (vd);
    VEEDP xvxexpdp {}

  const vf __builtin_vsx_extract_exp_sp (vf);
    VEESP xvxexpsp {}

  const vd __builtin_vsx_extract_sig_dp (vd);
    VESDP xvxsigdp {}

  const vf __builtin_vsx_extract_sig_sp (vf);
    VESSP xvxsigsp {}

  const vsc __builtin_vsx_insert4b (vsi, vsc, const int[0,12]);
    INSERT4B insert4b {}

  const vd __builtin_vsx_insert_exp_dp (vd, vd);
    VIEDP xviexpdp {}

  const vf __builtin_vsx_insert_exp_sp (vf, vf);
    VIESP xviexpsp {}

  const signed int __builtin_vsx_scalar_cmp_exp_dp_eq (double, double);
    VSCEDPEQ xscmpexpdp_eq {}

  const signed int __builtin_vsx_scalar_cmp_exp_dp_gt (double, double);
    VSCEDPGT xscmpexpdp_gt {}

  const signed int __builtin_vsx_scalar_cmp_exp_dp_lt (double, double);
    VSCEDPLT xscmpexpdp_lt {}

  const signed int __builtin_vsx_scalar_cmp_exp_dp_unordered (double, double);
    VSCEDPUO xscmpexpdp_unordered {}

  const signed int \
      __builtin_vsx_scalar_test_data_class_dp (double, const int<7>);
    VSTDCDP xststdcdp {}

  const signed int \
      __builtin_vsx_scalar_test_data_class_sp (float, const int<7>);
    VSTDCSP xststdcsp {}

  const signed int __builtin_vsx_scalar_test_neg_dp (double);
    VSTDCNDP xststdcnegdp {}

  const signed int __builtin_vsx_scalar_test_neg_sp (float);
    VSTDCNSP xststdcnegsp {}

  const vsll __builtin_vsx_test_data_class_dp (vd, const int<7>);
    VTDCDP xvtstdcdp {}

  const vsi __builtin_vsx_test_data_class_sp (vf, const int<7>);
    VTDCSP xvtstdcsp {}

  const vf __builtin_vsx_vextract_fp_from_shorth (vss);
    VEXTRACT_FP_FROM_SHORTH vextract_fp_from_shorth {}

  const vf __builtin_vsx_vextract_fp_from_shortl (vss);
    VEXTRACT_FP_FROM_SHORTL vextract_fp_from_shortl {}

  const vd __builtin_vsx_xxbrd_v2df (vd);
    XXBRD_V2DF p9_xxbrd_v2df {}

  const vsll __builtin_vsx_xxbrd_v2di (vsll);
    XXBRD_V2DI p9_xxbrd_v2di {}

  const vss __builtin_vsx_xxbrh_v8hi (vss);
    XXBRH_V8HI p9_xxbrh_v8hi {}

  const vsc __builtin_vsx_xxbrq_v16qi (vsc);
    XXBRQ_V16QI p9_xxbrq_v16qi {}

  const vsq __builtin_vsx_xxbrq_v1ti (vsq);
    XXBRQ_V1TI p9_xxbrq_v1ti {}

  const vf __builtin_vsx_xxbrw_v4sf (vf);
    XXBRW_V4SF p9_xxbrw_v4sf {}

  const vsi __builtin_vsx_xxbrw_v4si (vsi);
    XXBRW_V4SI p9_xxbrw_v4si {}

  const signed int __builtin_vsx_scalar_cmp_exp_qp_eq (_Float128, _Float128);
    VSCEQPEQ xscmpexpqp_eq_kf {}

  const signed int __builtin_vsx_scalar_cmp_exp_qp_gt (_Float128, _Float128);
    VSCEQPGT xscmpexpqp_gt_kf {}

  const signed int __builtin_vsx_scalar_cmp_exp_qp_lt (_Float128, _Float128);
    VSCEQPLT xscmpexpqp_lt_kf {}

  const signed int \
      __builtin_vsx_scalar_cmp_exp_qp_unordered (_Float128, _Float128);
    VSCEQPUO xscmpexpqp_unordered_kf {}


; Miscellaneous P9 functions
[power9]
  signed long __builtin_darn ();
    DARN darn_64_di {32bit}

  signed long __builtin_darn_32 ();
    DARN_32 darn_32_di {32bit}

  signed long __builtin_darn_raw ();
    DARN_RAW darn_raw_di {32bit}

  const signed int __builtin_dtstsfi_eq_dd (const int<6>, _Decimal64);
    TSTSFI_EQ_DD dfptstsfi_eq_dd {}

  const signed int __builtin_dtstsfi_eq_td (const int<6>, _Decimal128);
    TSTSFI_EQ_TD dfptstsfi_eq_td {}

  const signed int __builtin_dtstsfi_gt_dd (const int<6>, _Decimal64);
    TSTSFI_GT_DD dfptstsfi_gt_dd {}

  const signed int __builtin_dtstsfi_gt_td (const int<6>, _Decimal128);
    TSTSFI_GT_TD dfptstsfi_gt_td {}

  const signed int __builtin_dtstsfi_lt_dd (const int<6>, _Decimal64);
    TSTSFI_LT_DD dfptstsfi_lt_dd {}

  const signed int __builtin_dtstsfi_lt_td (const int<6>, _Decimal128);
    TSTSFI_LT_TD dfptstsfi_lt_td {}

  const signed int __builtin_dtstsfi_ov_dd (const int<6>, _Decimal64);
    TSTSFI_OV_DD dfptstsfi_unordered_dd {}

  const signed int __builtin_dtstsfi_ov_td (const int<6>, _Decimal128);
    TSTSFI_OV_TD dfptstsfi_unordered_td {}

  const signed int  __builtin_vsx_scalar_extract_exp (double);
    VSEEDP xsxexpdp_si {}

[power9-64]
  void __builtin_altivec_xst_len_r (vsc, void *, long);
    XST_LEN_R xst_len_r {}

  void __builtin_altivec_stxvl (vsc, void *, long);
    STXVL stxvl {}

  const signed int __builtin_scalar_byte_in_set (signed int, signed long long);
    CMPEQB cmpeqb {}

  pure vsc __builtin_vsx_lxvl (const void *, signed long);
    LXVL lxvl {}

  const signed long long __builtin_vsx_scalar_extract_sig (double);
    VSESDP xsxsigdp {}

  const double __builtin_vsx_scalar_insert_exp (unsigned long long, \
                                                unsigned long long);
    VSIEDP xsiexpdp_di {}

  const double __builtin_vsx_scalar_insert_exp_dp (double, unsigned long long);
    VSIEDPF xsiexpdpf_di {}

  pure vsc __builtin_vsx_xl_len_r (void *, signed long);
    XL_LEN_R xl_len_r {}


; Builtins requiring hardware support for IEEE-128 floating-point.
[ieee128-hw]
  fpmath _Float128 __builtin_addf128_round_to_odd (_Float128, _Float128);
    ADDF128_ODD addkf3_odd {}

  fpmath _Float128 __builtin_divf128_round_to_odd (_Float128, _Float128);
    DIVF128_ODD divkf3_odd {}

  fpmath _Float128 __builtin_fmaf128_round_to_odd (_Float128, _Float128, \
                                                   _Float128);
    FMAF128_ODD fmakf4_odd {}

  fpmath _Float128 __builtin_mulf128_round_to_odd (_Float128, _Float128);
    MULF128_ODD mulkf3_odd {}

  fpmath _Float128 __builtin_sqrtf128_round_to_odd (_Float128);
    SQRTF128_ODD sqrtkf2_odd {}

  fpmath _Float128 __builtin_subf128_round_to_odd (_Float128, _Float128);
    SUBF128_ODD subkf3_odd {}

  fpmath double __builtin_truncf128_round_to_odd (_Float128);
    TRUNCF128_ODD trunckfdf2_odd {}

  const signed long long __builtin_vsx_scalar_extract_expq (_Float128);
    VSEEQP xsxexpqp_kf_di {}

  vull __builtin_vsx_scalar_extract_exp_to_vec (_Float128);
    VSEEQPV xsxexpqp_kf_v2di {}

  const signed __int128 __builtin_vsx_scalar_extract_sigq (_Float128);
    VSESQP xsxsigqp_kf_ti {}

  vuq __builtin_vsx_scalar_extract_sig_to_vec (_Float128);
    VSESQPV xsxsigqp_kf_v1ti {}

  const _Float128 __builtin_vsx_scalar_insert_exp_q (unsigned __int128, \
                                                     unsigned long long);
    VSIEQP xsiexpqp_kf_di {}

  const _Float128 __builtin_vsx_scalar_insert_exp_qp (_Float128, \
                                                      unsigned long long);
    VSIEQPF xsiexpqpf_kf {}

  const _Float128 __builtin_vsx_scalar_insert_exp_vqp (vuq, vull);
    VSIEQPV xsiexpqp_kf_v2di {}

  const signed int __builtin_vsx_scalar_test_data_class_qp (_Float128, \
                                                            const int<7>);
    VSTDCQP xststdcqp_kf {}

  const signed int __builtin_vsx_scalar_test_neg_qp (_Float128);
    VSTDCNQP xststdcnegqp_kf {}



; Decimal floating-point builtins.
[dfp]
  const _Decimal64 __builtin_ddedpd (const int<2>, _Decimal64);
    DDEDPD dfp_ddedpd_dd {}

  const _Decimal128 __builtin_ddedpdq (const int<2>, _Decimal128);
    DDEDPDQ dfp_ddedpd_td {}

  const _Decimal64 __builtin_denbcd (const int<1>, _Decimal64);
    DENBCD dfp_denbcd_dd {}

  const _Decimal128 __builtin_denbcdq (const int<1>, _Decimal128);
    DENBCDQ dfp_denbcd_td {}

  const _Decimal128 __builtin_denb2dfp_v16qi (vsc);
    DENB2DFP_V16QI dfp_denbcd_v16qi {}

  const _Decimal64 __builtin_diex (signed long long, _Decimal64);
    DIEX dfp_diex_dd {}

  const _Decimal128 __builtin_diexq (signed long long, _Decimal128);
    DIEXQ dfp_diex_td {}

  const _Decimal64 __builtin_dscli (_Decimal64, const int<6>);
    DSCLI dfp_dscli_dd {}

  const _Decimal128 __builtin_dscliq (_Decimal128, const int<6>);
    DSCLIQ dfp_dscli_td {}

  const _Decimal64 __builtin_dscri (_Decimal64, const int<6>);
    DSCRI dfp_dscri_dd {}

  const _Decimal128 __builtin_dscriq (_Decimal128, const int<6>);
    DSCRIQ dfp_dscri_td {}

  const signed long long __builtin_dxex (_Decimal64);
    DXEX dfp_dxex_dd {}

  const signed long long __builtin_dxexq (_Decimal128);
    DXEXQ dfp_dxex_td {}

  const _Decimal128 __builtin_pack_dec128 (unsigned long long, \
                                           unsigned long long);
    PACK_TD packtd {}

  void __builtin_set_fpscr_drn (const int[0,7]);
    SET_FPSCR_DRN rs6000_set_fpscr_drn {nosoft,no32bit}

  const unsigned long long __builtin_unpack_dec128 (_Decimal128, const int<1>);
    UNPACK_TD unpacktd {}

  const _Decimal64 __builtin_dfp_dqua (_Decimal64, _Decimal64, \
				       const int<2>);
    DFPQUAN_64 dfp_dqua_dd {}

  const _Decimal64 __builtin_dfp_dquai (const int<5>, _Decimal64, \
					const int<2>);
    DFPQUAN_64i dfp_dquai_dd {}

  const _Decimal128 __builtin_dfp_dquaq (_Decimal128, _Decimal128, \
					 const int<2>);
    DFPQUAN_128 dfp_dqua_td {}

  const _Decimal128 __builtin_dfp_dquaqi (const int<5>, _Decimal128, \
					  const int<2>);
    DFPQUAN_128i dfp_dquai_td {}

[crypto]
  const vull __builtin_crypto_vcipher (vull, vull);
    VCIPHER crypto_vcipher_v2di {}

  const vuc __builtin_crypto_vcipher_be (vuc, vuc);
    VCIPHER_BE crypto_vcipher_v16qi {}

  const vull __builtin_crypto_vcipherlast (vull, vull);
    VCIPHERLAST crypto_vcipherlast_v2di {}

  const vuc __builtin_crypto_vcipherlast_be (vuc, vuc);
    VCIPHERLAST_BE crypto_vcipherlast_v16qi {}

  const vull __builtin_crypto_vncipher (vull, vull);
    VNCIPHER crypto_vncipher_v2di {}

  const vuc __builtin_crypto_vncipher_be (vuc, vuc);
    VNCIPHER_BE crypto_vncipher_v16qi {}

  const vull __builtin_crypto_vncipherlast (vull, vull);
    VNCIPHERLAST crypto_vncipherlast_v2di {}

  const vuc __builtin_crypto_vncipherlast_be (vuc, vuc);
    VNCIPHERLAST_BE crypto_vncipherlast_v16qi {}

  const vull __builtin_crypto_vsbox (vull);
    VSBOX crypto_vsbox_v2di {}

  const vuc __builtin_crypto_vsbox_be (vuc);
    VSBOX_BE crypto_vsbox_v16qi {}

  const vull __builtin_crypto_vshasigmad (vull, const int<1>, const int<4>);
    VSHASIGMAD crypto_vshasigmad {}

  const vui __builtin_crypto_vshasigmaw (vui, const int<1>, const int<4>);
    VSHASIGMAW crypto_vshasigmaw {}


[htm]
  unsigned long __builtin_get_texasr ();
    GET_TEXASR nothing {htm,htmspr}

  unsigned long __builtin_get_texasru ();
    GET_TEXASRU nothing {htm,htmspr}

  unsigned long __builtin_get_tfhar ();
    GET_TFHAR nothing {htm,htmspr}

  unsigned long __builtin_get_tfiar ();
    GET_TFIAR nothing {htm,htmspr}

  void __builtin_set_texasr (unsigned long);
    SET_TEXASR nothing {htm,htmspr}

  void __builtin_set_texasru (unsigned long);
    SET_TEXASRU nothing {htm,htmspr}

  void __builtin_set_tfhar (unsigned long);
    SET_TFHAR nothing {htm,htmspr}

  void __builtin_set_tfiar (unsigned long);
    SET_TFIAR nothing {htm,htmspr}

  unsigned int __builtin_tabort (unsigned int);
    TABORT tabort {htm,htmcr}

  unsigned int __builtin_tabortdc (unsigned long, unsigned long, \
                                   unsigned long);
    TABORTDC tabortdc {htm,htmcr}

  unsigned int __builtin_tabortdci (unsigned long, unsigned long, \
                                    unsigned long);
    TABORTDCI tabortdci {htm,htmcr}

  unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int);
    TABORTWC tabortwc {htm,htmcr}

  unsigned int __builtin_tabortwci (unsigned int, unsigned int, unsigned int);
    TABORTWCI tabortwci {htm,htmcr}

  unsigned int __builtin_tbegin (unsigned int);
    TBEGIN tbegin {htm,htmcr}

  unsigned int __builtin_tcheck ();
    TCHECK tcheck {htm,htmcr}

  unsigned int __builtin_tend (unsigned int);
    TEND tend {htm,htmcr}

  unsigned int __builtin_tendall ();
    TENDALL tend {htm,htmcr}

  unsigned int __builtin_trechkpt ();
    TRECHKPT trechkpt {htm,htmcr}

  unsigned int __builtin_treclaim (unsigned int);
    TRECLAIM treclaim {htm,htmcr}

  unsigned int __builtin_tresume ();
    TRESUME tsr {htm,htmcr}

  unsigned int __builtin_tsr (unsigned int);
    TSR tsr {htm,htmcr}

  unsigned int __builtin_tsuspend ();
    TSUSPEND tsr {htm,htmcr}

  unsigned int __builtin_ttest ();
    TTEST ttest {htm,htmcr}


[power10]
  const vbq __builtin_altivec_cmpge_1ti (vsq, vsq);
    CMPGE_1TI vector_nltv1ti {}

  const vbq __builtin_altivec_cmpge_u1ti (vuq, vuq);
    CMPGE_U1TI vector_nltuv1ti {}

  const vbq __builtin_altivec_cmple_1ti (vsq, vsq);
    CMPLE_1TI vector_ngtv1ti {}

  const vbq __builtin_altivec_cmple_u1ti (vuq, vuq);
    CMPLE_U1TI vector_ngtuv1ti {}

  const unsigned long long __builtin_altivec_cntmbb (vuc, const int<1>);
    VCNTMBB vec_cntmb_v16qi {}

  const unsigned long long __builtin_altivec_cntmbd (vull, const int<1>);
    VCNTMBD vec_cntmb_v2di {}

  const unsigned long long __builtin_altivec_cntmbh (vus, const int<1>);
    VCNTMBH vec_cntmb_v8hi {}

  const unsigned long long __builtin_altivec_cntmbw (vui, const int<1>);
    VCNTMBW vec_cntmb_v4si {}

  const vsq __builtin_altivec_div_v1ti (vsq, vsq);
    DIV_V1TI vsx_div_v1ti {}

  const vsq __builtin_altivec_dives (vsq, vsq);
    DIVES_V1TI vsx_dives_v1ti {}

  const vuq __builtin_altivec_diveu (vuq, vuq);
    DIVEU_V1TI vsx_diveu_v1ti {}

  const vsq __builtin_altivec_mods (vsq, vsq);
    MODS_V1TI vsx_mods_v1ti {}

  const vuq __builtin_altivec_modu (vuq, vuq);
    MODU_V1TI vsx_modu_v1ti {}

  const vuc __builtin_altivec_mtvsrbm (unsigned long long);
    MTVSRBM vec_mtvsr_v16qi {}

  const vull __builtin_altivec_mtvsrdm (unsigned long long);
    MTVSRDM vec_mtvsr_v2di {}

  const vus __builtin_altivec_mtvsrhm (unsigned long long);
    MTVSRHM vec_mtvsr_v8hi {}

  const vuq __builtin_altivec_mtvsrqm (unsigned long long);
    MTVSRQM vec_mtvsr_v1ti {}

  const vui __builtin_altivec_mtvsrwm (unsigned long long);
    MTVSRWM vec_mtvsr_v4si {}

  pure signed __int128 __builtin_altivec_se_lxvrbx (signed long, \
                                                    const signed char *);
    SE_LXVRBX vsx_lxvrbx {lxvrse}

  pure signed __int128 __builtin_altivec_se_lxvrhx (signed long, \
                                                    const signed short *);
    SE_LXVRHX vsx_lxvrhx {lxvrse}

  pure signed __int128 __builtin_altivec_se_lxvrwx (signed long, \
                                                    const signed int *);
    SE_LXVRWX vsx_lxvrwx {lxvrse}

  pure signed __int128 __builtin_altivec_se_lxvrdx (signed long, \
                                                    const signed long long *);
    SE_LXVRDX vsx_lxvrdx {lxvrse}

  void __builtin_altivec_tr_stxvrbx (vsq, signed long, signed char *);
    TR_STXVRBX vsx_stxvrbx {stvec}

  void __builtin_altivec_tr_stxvrhx (vsq, signed long, signed short *);
    TR_STXVRHX vsx_stxvrhx {stvec}

  void __builtin_altivec_tr_stxvrwx (vsq, signed long, signed int *);
    TR_STXVRWX vsx_stxvrwx {stvec}

  void __builtin_altivec_tr_stxvrdx (vsq, signed long, signed long long *);
    TR_STXVRDX vsx_stxvrdx {stvec}

  const vuq __builtin_altivec_udiv_v1ti (vuq, vuq);
    UDIV_V1TI vsx_udiv_v1ti {}

  const vull __builtin_altivec_vcfuged (vull, vull);
    VCFUGED vcfuged {}

  const vsc __builtin_altivec_vclrlb (vsc, signed int);
    VCLRLB vclrlb {}

  const vsc __builtin_altivec_vclrrb (vsc, signed int);
    VCLRRB vclrrb {}

  const signed int __builtin_altivec_vcmpaet_p (vsq, vsq);
    VCMPAET_P vector_ae_v1ti_p {}

  const vbq __builtin_altivec_vcmpequt (vsq, vsq);
    VCMPEQUT vector_eqv1ti {}

  const signed int __builtin_altivec_vcmpequt_p (signed int, vsq, vsq);
    VCMPEQUT_P vector_eq_v1ti_p {pred}

  const vbq __builtin_altivec_vcmpgtst (vsq, vsq);
    VCMPGTST vector_gtv1ti {}

  const signed int __builtin_altivec_vcmpgtst_p (signed int, vsq, vsq);
    VCMPGTST_P vector_gt_v1ti_p {pred}

  const vbq __builtin_altivec_vcmpgtut (vuq, vuq);
    VCMPGTUT vector_gtuv1ti {}

  const signed int __builtin_altivec_vcmpgtut_p (signed int, vuq, vuq);
    VCMPGTUT_P vector_gtu_v1ti_p {pred}

  const vbq __builtin_altivec_vcmpnet (vsq, vsq);
    VCMPNET vcmpnet {}

  const signed int __builtin_altivec_vcmpnet_p (vsq, vsq);
    VCMPNET_P vector_ne_v1ti_p {}

  const vull __builtin_altivec_vclzdm (vull, vull);
    VCLZDM vclzdm {}

  const vull __builtin_altivec_vctzdm (vull, vull);
    VCTZDM vctzdm {}

  const vsll __builtin_altivec_vdivesd (vsll, vsll);
    VDIVESD dives_v2di {}

  const vsi __builtin_altivec_vdivesw (vsi, vsi);
    VDIVESW dives_v4si {}

  const vull __builtin_altivec_vdiveud (vull, vull);
    VDIVEUD diveu_v2di {}

  const vui __builtin_altivec_vdiveuw (vui, vui);
    VDIVEUW diveu_v4si {}

  const vsll __builtin_altivec_vdivsd (vsll, vsll);
    VDIVSD divv2di3 {}

  const vsi __builtin_altivec_vdivsw (vsi, vsi);
    VDIVSW divv4si3 {}

  const vull __builtin_altivec_vdivud (vull, vull);
    VDIVUD udivv2di3 {}

  const vui __builtin_altivec_vdivuw (vui, vui);
    VDIVUW udivv4si3 {}

  const vuc __builtin_altivec_vexpandmb (vuc);
    VEXPANDMB vec_expand_v16qi {}

  const vull __builtin_altivec_vexpandmd (vull);
    VEXPANDMD vec_expand_v2di {}

  const vus __builtin_altivec_vexpandmh (vus);
    VEXPANDMH vec_expand_v8hi {}

  const vuq __builtin_altivec_vexpandmq (vuq);
    VEXPANDMQ vec_expand_v1ti {}

  const vui __builtin_altivec_vexpandmw (vui);
    VEXPANDMW vec_expand_v4si {}

  const vull __builtin_altivec_vextddvhx (vull, vull, unsigned int);
    VEXTRACTDR vextractrv2di {}

  const vull __builtin_altivec_vextddvlx (vull, vull, unsigned int);
    VEXTRACTDL vextractlv2di {}

  const vull __builtin_altivec_vextdubvhx (vuc, vuc, unsigned int);
    VEXTRACTBR vextractrv16qi {}

  const vull __builtin_altivec_vextdubvlx (vuc, vuc, unsigned int);
    VEXTRACTBL vextractlv16qi {}

  const vull __builtin_altivec_vextduhvhx (vus, vus, unsigned int);
    VEXTRACTHR vextractrv8hi {}

  const vull __builtin_altivec_vextduhvlx (vus, vus, unsigned int);
    VEXTRACTHL vextractlv8hi {}

  const vull __builtin_altivec_vextduwvhx (vui, vui, unsigned int);
    VEXTRACTWR vextractrv4si {}

  const vull __builtin_altivec_vextduwvlx (vui, vui, unsigned int);
    VEXTRACTWL vextractlv4si {}

  const signed int __builtin_altivec_vextractmb (vsc);
    VEXTRACTMB vec_extract_v16qi {}

  const signed int __builtin_altivec_vextractmd (vsll);
    VEXTRACTMD vec_extract_v2di {}

  const signed int __builtin_altivec_vextractmh (vss);
    VEXTRACTMH vec_extract_v8hi {}

  const signed int __builtin_altivec_vextractmq (vsq);
    VEXTRACTMQ vec_extract_v1ti {}

  const signed int __builtin_altivec_vextractmw (vsi);
    VEXTRACTMW vec_extract_v4si {}

  const unsigned long long __builtin_altivec_vgnb (vull, const int <2,7>);
    VGNB vgnb {}

  const vuc __builtin_altivec_vinsgubvlx (unsigned int, vuc, unsigned int);
    VINSERTGPRBL vinsertgl_v16qi {}

  const vsc __builtin_altivec_vinsgubvrx (signed int, vsc, signed int);
    VINSERTGPRBR vinsertgr_v16qi {}

  const vull __builtin_altivec_vinsgudvlx (unsigned int, vull, unsigned int);
    VINSERTGPRDL vinsertgl_v2di {}

  const vsll __builtin_altivec_vinsgudvrx (signed int, vsll, signed int);
    VINSERTGPRDR vinsertgr_v2di {}

  const vus __builtin_altivec_vinsguhvlx (unsigned int, vus, unsigned int);
    VINSERTGPRHL vinsertgl_v8hi {}

  const vss __builtin_altivec_vinsguhvrx (signed int, vss, signed int);
    VINSERTGPRHR vinsertgr_v8hi {}

  const vui __builtin_altivec_vinsguwvlx (unsigned int, vui, unsigned int);
    VINSERTGPRWL vinsertgl_v4si {}

  const vsi __builtin_altivec_vinsguwvrx (signed int, vsi, signed int);
    VINSERTGPRWR vinsertgr_v4si {}

  const vuc __builtin_altivec_vinsvubvlx (vuc, vuc, unsigned int);
    VINSERTVPRBL vinsertvl_v16qi {}

  const vsc __builtin_altivec_vinsvubvrx (vsc, vsc, signed int);
    VINSERTVPRBR vinsertvr_v16qi {}

  const vus __builtin_altivec_vinsvuhvlx (vus, vus, unsigned int);
    VINSERTVPRHL vinsertvl_v8hi {}

  const vss __builtin_altivec_vinsvuhvrx (vss, vss, signed int);
    VINSERTVPRHR vinsertvr_v8hi {}

  const vui __builtin_altivec_vinsvuwvlx (vui, vui, unsigned int);
    VINSERTVPRWL vinsertvl_v4si {}

  const vsi __builtin_altivec_vinsvuwvrx (vsi, vsi, signed int);
    VINSERTVPRWR vinsertvr_v4si {}

  const vsll __builtin_altivec_vmodsd (vsll, vsll);
    VMODSD modv2di3 {}

  const vsi __builtin_altivec_vmodsw (vsi, vsi);
    VMODSW modv4si3 {}

  const vull __builtin_altivec_vmodud (vull, vull);
    VMODUD umodv2di3 {}

  const vui __builtin_altivec_vmoduw (vui, vui);
    VMODUW umodv4si3 {}

  const vsq __builtin_altivec_vmulesd (vsll, vsll);
    VMULESD vec_widen_smult_even_v2di {}

  const vuq __builtin_altivec_vmuleud (vull, vull);
    VMULEUD vec_widen_umult_even_v2di {}

  const vsll __builtin_altivec_vmulhsd (vsll, vsll);
    VMULHSD smulv2di3_highpart {}

  const vsi __builtin_altivec_vmulhsw (vsi, vsi);
    VMULHSW smulv4si3_highpart {}

  const vull __builtin_altivec_vmulhud (vull, vull);
    VMULHUD umulv2di3_highpart {}

  const vui __builtin_altivec_vmulhuw (vui, vui);
    VMULHUW umulv4si3_highpart {}

  const vsll __builtin_altivec_vmulld (vsll, vsll);
    VMULLD mulv2di3 {}

  const vsq __builtin_altivec_vmulosd (vsll, vsll);
    VMULOSD vec_widen_smult_odd_v2di {}

  const vuq __builtin_altivec_vmuloud (vull, vull);
    VMULOUD vec_widen_umult_odd_v2di {}

  const vsq __builtin_altivec_vnor_v1ti (vsq, vsq);
    VNOR_V1TI norv1ti3 {}

  const vuq __builtin_altivec_vnor_v1ti_uns (vuq, vuq);
    VNOR_V1TI_UNS norv1ti3 {}

  const vull __builtin_altivec_vpdepd (vull, vull);
    VPDEPD vpdepd {}

  const vull __builtin_altivec_vpextd (vull, vull);
    VPEXTD vpextd {}

  const vuc __builtin_altivec_vreplace_un_udi (vuc, unsigned long long, \
                                               const int<4>);
    VREPLACE_UN_UDI vreplace_un_di {}

  const vuc __builtin_altivec_vreplace_un_usi (vuc, unsigned int, \
                                               const int<4>);
    VREPLACE_UN_USI vreplace_un_si {}

  const vuc __builtin_altivec_vreplace_un_df (vuc, double, const int<4>);
    VREPLACE_UN_DF vreplace_un_df {}

  const vuc __builtin_altivec_vreplace_un_di (vuc, signed long long, \
                                                const int<4>);
    VREPLACE_UN_DI vreplace_un_di {}

  const vuc __builtin_altivec_vreplace_un_sf (vuc, float, const int<4>);
    VREPLACE_UN_SF vreplace_un_sf {}

  const vuc __builtin_altivec_vreplace_un_si (vuc, signed int, const int<4>);
    VREPLACE_UN_SI vreplace_un_si {}

  const vull __builtin_altivec_vreplace_uv2di (vull, unsigned long long, \
                                               const int<1>);
    VREPLACE_ELT_UV2DI vreplace_elt_v2di {}

  const vui __builtin_altivec_vreplace_uv4si (vui, unsigned int, const int<2>);
    VREPLACE_ELT_UV4SI vreplace_elt_v4si {}

  const vd __builtin_altivec_vreplace_v2df (vd, double, const int<1>);
    VREPLACE_ELT_V2DF vreplace_elt_v2df {}

  const vsll __builtin_altivec_vreplace_v2di (vsll, signed long long, \
                                              const int<1>);
    VREPLACE_ELT_V2DI vreplace_elt_v2di {}

  const vf __builtin_altivec_vreplace_v4sf (vf, float, const int<2>);
    VREPLACE_ELT_V4SF vreplace_elt_v4sf {}

  const vsi __builtin_altivec_vreplace_v4si (vsi, signed int, const int<2>);
    VREPLACE_ELT_V4SI vreplace_elt_v4si {}

  const vsq __builtin_altivec_vrlq (vsq, vuq);
    VRLQ vrotlv1ti3 {}

  const vsq __builtin_altivec_vrlqmi (vsq, vsq, vuq);
    VRLQMI altivec_vrlqmi {}

  const vsq __builtin_altivec_vrlqnm (vsq, vuq);
    VRLQNM altivec_vrlqnm {}

  const vsq __builtin_altivec_vsignext (vsll);
    VSIGNEXTSD2Q vsx_sign_extend_v2di_v1ti {}

  const vsc __builtin_altivec_vsldb_v16qi (vsc, vsc, const int<3>);
    VSLDB_V16QI vsldb_v16qi {}

  const vsll __builtin_altivec_vsldb_v2di (vsll, vsll, const int<3>);
    VSLDB_V2DI vsldb_v2di {}

  const vsi __builtin_altivec_vsldb_v4si (vsi, vsi, const int<3>);
    VSLDB_V4SI vsldb_v4si {}

  const vss __builtin_altivec_vsldb_v8hi (vss, vss, const int<3>);
    VSLDB_V8HI vsldb_v8hi {}

  const vsq __builtin_altivec_vslq (vsq, vuq);
    VSLQ vashlv1ti3 {}

  const vsq __builtin_altivec_vsraq (vsq, vuq);
    VSRAQ vashrv1ti3 {}

  const vsc __builtin_altivec_vsrdb_v16qi (vsc, vsc, const int<3>);
    VSRDB_V16QI vsrdb_v16qi {}

  const vsll __builtin_altivec_vsrdb_v2di (vsll, vsll, const int<3>);
    VSRDB_V2DI vsrdb_v2di {}

  const vsi __builtin_altivec_vsrdb_v4si (vsi, vsi, const int<3>);
    VSRDB_V4SI vsrdb_v4si {}

  const vss __builtin_altivec_vsrdb_v8hi (vss, vss, const int<3>);
    VSRDB_V8HI vsrdb_v8hi {}

  const vsq __builtin_altivec_vsrq (vsq, vuq);
    VSRQ vlshrv1ti3 {}

  const vsc __builtin_altivec_vstribl (vsc);
    VSTRIBL vstril_v16qi {}

  const signed int __builtin_altivec_vstribl_p (vsc);
    VSTRIBL_P vstril_p_v16qi {}

  const vsc __builtin_altivec_vstribr (vsc);
    VSTRIBR vstrir_v16qi {}

  const signed int __builtin_altivec_vstribr_p (vsc);
    VSTRIBR_P vstrir_p_v16qi {}

  const vss __builtin_altivec_vstrihl (vss);
    VSTRIHL vstril_v8hi {}

  const signed int __builtin_altivec_vstrihl_p (vss);
    VSTRIHL_P vstril_p_v8hi {}

  const vss __builtin_altivec_vstrihr (vss);
    VSTRIHR vstrir_v8hi {}

  const signed int __builtin_altivec_vstrihr_p (vss);
    VSTRIHR_P vstrir_p_v8hi {}

  const vuq __builtin_vsx_vmsumcud (vull, vull, vuq);
    VMSUMCUD vmsumcud {}

  const signed int __builtin_vsx_xvtlsbb_all_ones (vsc);
    XVTLSBB_ONES xvtlsbbo {}

  const signed int __builtin_vsx_xvtlsbb_all_zeros (vsc);
    XVTLSBB_ZEROS xvtlsbbz {}

  const vf __builtin_vsx_vxxsplti32dx_v4sf (vf, const int<1>, float);
    VXXSPLTI32DX_V4SF xxsplti32dx_v4sf {}

  const vsi __builtin_vsx_vxxsplti32dx_v4si (vsi, const int<1>, signed int);
    VXXSPLTI32DX_V4SI xxsplti32dx_v4si {}

  const vd __builtin_vsx_vxxspltidp (float);
    VXXSPLTIDP xxspltidp_v2df {}

  const vf __builtin_vsx_vxxspltiw_v4sf (float);
    VXXSPLTIW_V4SF xxspltiw_v4sf {}

  const vsi __builtin_vsx_vxxspltiw_v4si (signed int);
    VXXSPLTIW_V4SI xxspltiw_v4si {}

  const vuc __builtin_vsx_xvcvbf16spn (vuc);
    XVCVBF16SPN vsx_xvcvbf16spn {}

  const vuc __builtin_vsx_xvcvspbf16 (vuc);
    XVCVSPBF16 vsx_xvcvspbf16 {}

  const vuc __builtin_vsx_xxblend_v16qi (vuc, vuc, vuc);
    VXXBLEND_V16QI xxblend_v16qi {}

  const vd __builtin_vsx_xxblend_v2df (vd, vd, vd);
    VXXBLEND_V2DF xxblend_v2df {}

  const vull __builtin_vsx_xxblend_v2di (vull, vull, vull);
    VXXBLEND_V2DI xxblend_v2di {}

  const vf __builtin_vsx_xxblend_v4sf (vf, vf, vf);
    VXXBLEND_V4SF xxblend_v4sf {}

  const vui __builtin_vsx_xxblend_v4si (vui, vui, vui);
    VXXBLEND_V4SI xxblend_v4si {}

  const vus __builtin_vsx_xxblend_v8hi (vus, vus, vus);
    VXXBLEND_V8HI xxblend_v8hi {}

  const vull __builtin_vsx_xxeval (vull, vull, vull, const int <8>);
    XXEVAL xxeval {}

  const vuc __builtin_vsx_xxgenpcvm_v16qi (vuc, const int <2>);
    XXGENPCVM_V16QI xxgenpcvm_v16qi {}

  const vull __builtin_vsx_xxgenpcvm_v2di (vull, const int <2>);
    XXGENPCVM_V2DI xxgenpcvm_v2di {}

  const vui __builtin_vsx_xxgenpcvm_v4si (vui, const int <2>);
    XXGENPCVM_V4SI xxgenpcvm_v4si {}

  const vus __builtin_vsx_xxgenpcvm_v8hi (vus, const int <2>);
    XXGENPCVM_V8HI xxgenpcvm_v8hi {}

  const vuc __builtin_vsx_xxpermx_uv16qi (vuc, vuc, vuc, const int<3>);
    XXPERMX_UV16QI xxpermx {}

  const vull __builtin_vsx_xxpermx_uv2di (vull, vull, vuc, const int<3>);
    XXPERMX_UV2DI xxpermx {}

  const vui __builtin_vsx_xxpermx_uv4si (vui, vui, vuc, const int<3>);
    XXPERMX_UV4SI xxpermx {}

  const vus __builtin_vsx_xxpermx_uv8hi (vus, vus, vuc, const int<3>);
    XXPERMX_UV8HI xxpermx {}

  const vsc __builtin_vsx_xxpermx_v16qi (vsc, vsc, vuc, const int<3>);
    XXPERMX_V16QI xxpermx {}

  const vd __builtin_vsx_xxpermx_v2df (vd, vd, vuc, const int<3>);
    XXPERMX_V2DF xxpermx {}

  const vsll __builtin_vsx_xxpermx_v2di (vsll, vsll, vuc, const int<3>);
    XXPERMX_V2DI xxpermx {}

  const vf __builtin_vsx_xxpermx_v4sf (vf, vf, vuc, const int<3>);
    XXPERMX_V4SF xxpermx {}

  const vsi __builtin_vsx_xxpermx_v4si (vsi, vsi, vuc, const int<3>);
    XXPERMX_V4SI xxpermx {}

  const vss __builtin_vsx_xxpermx_v8hi (vss, vss, vuc, const int<3>);
    XXPERMX_V8HI xxpermx {}

  pure unsigned __int128 __builtin_altivec_ze_lxvrbx (signed long, \
                                                      const unsigned char *);
    ZE_LXVRBX vsx_lxvrbx {lxvrze}

  pure unsigned __int128 __builtin_altivec_ze_lxvrhx (signed long, \
                                                      const unsigned short *);
    ZE_LXVRHX vsx_lxvrhx {lxvrze}

  pure unsigned __int128 __builtin_altivec_ze_lxvrwx (signed long, \
                                                      const unsigned int *);
    ZE_LXVRWX vsx_lxvrwx {lxvrze}

  pure unsigned __int128 \
      __builtin_altivec_ze_lxvrdx (signed long, const unsigned long long *);
    ZE_LXVRDX vsx_lxvrdx {lxvrze}


[power10-64]
  const unsigned long long __builtin_cfuged (unsigned long long, \
                                             unsigned long long);
    CFUGED cfuged {}

  const unsigned long long __builtin_cntlzdm (unsigned long long, \
                                              unsigned long long);
    CNTLZDM cntlzdm {}

  const unsigned long long __builtin_cnttzdm (unsigned long long, \
                                              unsigned long long);
    CNTTZDM cnttzdm {}

  const unsigned long long __builtin_pdepd (unsigned long long, \
                                            unsigned long long);
    PDEPD pdepd {}

  const unsigned long long __builtin_pextd (unsigned long long, \
                                            unsigned long long);
    PEXTD pextd {}


[mma]
  void __builtin_mma_assemble_acc (v512 *, vuc, vuc, vuc, vuc);
    ASSEMBLE_ACC nothing {mma,mmaint}

  v512 __builtin_mma_assemble_acc_internal (vuc, vuc, vuc, vuc);
    ASSEMBLE_ACC_INTERNAL mma_assemble_acc {mma}

  void __builtin_mma_assemble_pair (v256 *, vuc, vuc);
    ASSEMBLE_PAIR nothing {mma,mmaint}

  v256 __builtin_mma_assemble_pair_internal (vuc, vuc);
    ASSEMBLE_PAIR_INTERNAL vsx_assemble_pair {mma}

  void __builtin_mma_build_acc (v512 *, vuc, vuc, vuc, vuc);
    BUILD_ACC nothing {mma,mmaint}

  v512 __builtin_mma_build_acc_internal (vuc, vuc, vuc, vuc);
    BUILD_ACC_INTERNAL mma_assemble_acc {mma}

  void __builtin_mma_disassemble_acc (void *, v512 *);
    DISASSEMBLE_ACC nothing {mma,quad,mmaint}

  vuc __builtin_mma_disassemble_acc_internal (v512, const int<2>);
    DISASSEMBLE_ACC_INTERNAL mma_disassemble_acc {mma}

  void __builtin_mma_disassemble_pair (void *, v256 *);
    DISASSEMBLE_PAIR nothing {mma,pair,mmaint}

  vuc __builtin_mma_disassemble_pair_internal (v256, const int<2>);
    DISASSEMBLE_PAIR_INTERNAL vsx_disassemble_pair {mma}

  void __builtin_mma_pmxvbf16ger2 (v512 *, vuc, vuc, const int<4>, \
                                   const int<4>, const int<2>);
    PMXVBF16GER2 nothing {mma,mmaint}

  v512 __builtin_mma_pmxvbf16ger2_internal (vuc, vuc, const int<4>, \
                                            const int<4>, const int<2>);
    PMXVBF16GER2_INTERNAL mma_pmxvbf16ger2 {mma}

  void __builtin_mma_pmxvbf16ger2nn (v512 *, vuc, vuc, const int<4>, \
                                     const int<4>, const int<2>);
    PMXVBF16GER2NN nothing {mma,quad,mmaint}

  v512 __builtin_mma_pmxvbf16ger2nn_internal (v512, vuc, vuc, const int<4>, \
                                              const int<4>, const int<2>);
    PMXVBF16GER2NN_INTERNAL mma_pmxvbf16ger2nn {mma,quad}

  void __builtin_mma_pmxvbf16ger2np (v512 *, vuc, vuc, const int<4>, \
                                     const int<4>, const int<2>);
    PMXVBF16GER2NP nothing {mma,quad,mmaint}

  v512 __builtin_mma_pmxvbf16ger2np_internal (v512, vuc, vuc, const int<4>, \
                                              const int<4>, const int<2>);
    PMXVBF16GER2NP_INTERNAL mma_pmxvbf16ger2np {mma,quad}

  void __builtin_mma_pmxvbf16ger2pn (v512 *, vuc, vuc, const int<4>, \
                                     const int<4>, const int<2>);
    PMXVBF16GER2PN nothing {mma,quad,mmaint}

  v512 __builtin_mma_pmxvbf16ger2pn_internal (v512, vuc, vuc, const int<4>, \
                                              const int<4>, const int<2>);
    PMXVBF16GER2PN_INTERNAL mma_pmxvbf16ger2pn {mma,quad}

  void __builtin_mma_pmxvbf16ger2pp (v512 *, vuc, vuc, const int<4>, \
                                     const int<4>, const int<2>);
    PMXVBF16GER2PP nothing {mma,quad,mmaint}

  v512 __builtin_mma_pmxvbf16ger2pp_internal (v512, vuc, vuc, const int<4>, \
                                              const int<4>, const int<2>);
    PMXVBF16GER2PP_INTERNAL mma_pmxvbf16ger2pp {mma,quad}

  void __builtin_mma_pmxvf16ger2 (v512 *, vuc, vuc, const int<4>, \
                                  const int<4>, const int<2>);
    PMXVF16GER2 nothing {mma,mmaint}

  v512 __builtin_mma_pmxvf16ger2_internal (vuc, vuc, const int<4>, \
                                           const int<4>, const int<2>);
    PMXVF16GER2_INTERNAL mma_pmxvf16ger2 {mma}

  void __builtin_mma_pmxvf16ger2nn (v512 *, vuc, vuc, const int<4>, \
                                    const int<4>, const int<2>);
    PMXVF16GER2NN nothing {mma,quad,mmaint}

  v512 __builtin_mma_pmxvf16ger2nn_internal (v512, vuc, vuc, const int<4>, \
                                             const int<4>, const int<2>);
    PMXVF16GER2NN_INTERNAL mma_pmxvf16ger2nn {mma,quad}

  void __builtin_mma_pmxvf16ger2np (v512 *, vuc, vuc, const int<4>, \
                                    const int<4>, const int<2>);
    PMXVF16GER2NP nothing {mma,quad,mmaint}

  v512 __builtin_mma_pmxvf16ger2np_internal (v512, vuc, vuc, const int<4>, \
                                             const int<4>, const int<2>);
    PMXVF16GER2NP_INTERNAL mma_pmxvf16ger2np {mma,quad}

  void __builtin_mma_pmxvf16ger2pn (v512 *, vuc, vuc, const int<4>, \
                                    const int<4>, const int<2>);
    PMXVF16GER2PN nothing {mma,quad,mmaint}

  v512 __builtin_mma_pmxvf16ger2pn_internal (v512, vuc, vuc, const int<4>, \
                                             const int<4>, const int<2>);
    PMXVF16GER2PN_INTERNAL mma_pmxvf16ger2pn {mma,quad}

  void __builtin_mma_pmxvf16ger2pp (v512 *, vuc, vuc, const int<4>, \
                                    const int<4>, const int<2>);
    PMXVF16GER2PP nothing {mma,quad,mmaint}

  v512 __builtin_mma_pmxvf16ger2pp_internal (v512, vuc, vuc, const int<4>, \
                                             const int<4>, const int<2>);
    PMXVF16GER2PP_INTERNAL mma_pmxvf16ger2pp {mma,quad}

  void __builtin_mma_pmxvf32ger (v512 *, vuc, vuc, const int<4>, const int<4>);
    PMXVF32GER nothing {mma,mmaint}

  v512 __builtin_mma_pmxvf32ger_internal (vuc, vuc, const int<4>, \
                                          const int<4>);
    PMXVF32GER_INTERNAL mma_pmxvf32ger {mma}

  void __builtin_mma_pmxvf32gernn (v512 *, vuc, vuc, const int<4>, \
                                   const int<4>);
    PMXVF32GERNN nothing {mma,quad,mmaint}

  v512 __builtin_mma_pmxvf32gernn_internal (v512, vuc, vuc, const int<4>, \
                                            const int<4>);
    PMXVF32GERNN_INTERNAL mma_pmxvf32gernn {mma,quad}

  void __builtin_mma_pmxvf32gernp (v512 *, vuc, vuc, const int<4>, \
                                   const int<4>);
    PMXVF32GERNP nothing {mma,quad,mmaint}

  v512 __builtin_mma_pmxvf32gernp_internal (v512, vuc, vuc, const int<4>, \
                                            const int<4>);
    PMXVF32GERNP_INTERNAL mma_pmxvf32gernp {mma,quad}

  void __builtin_mma_pmxvf32gerpn (v512 *, vuc, vuc, const int<4>, \
                                   const int<4>);
    PMXVF32GERPN nothing {mma,quad,mmaint}

  v512 __builtin_mma_pmxvf32gerpn_internal (v512, vuc, vuc, const int<4>, \
                                            const int<4>);
    PMXVF32GERPN_INTERNAL mma_pmxvf32gerpn {mma,quad}

  void __builtin_mma_pmxvf32gerpp (v512 *, vuc, vuc, const int<4>, \
                                   const int<4>);
    PMXVF32GERPP nothing {mma,quad,mmaint}

  v512 __builtin_mma_pmxvf32gerpp_internal (v512, vuc, vuc, const int<4>, \
                                            const int<4>);
    PMXVF32GERPP_INTERNAL mma_pmxvf32gerpp {mma,quad}

  void __builtin_mma_pmxvf64ger (v512 *, v256, vuc, const int<4>, \
                                 const int<2>);
    PMXVF64GER nothing {mma,pair,mmaint}

  v512 __builtin_mma_pmxvf64ger_internal (v256, vuc, const int<4>, \
                                          const int<2>);
    PMXVF64GER_INTERNAL mma_pmxvf64ger {mma,pair}

  void __builtin_mma_pmxvf64gernn (v512 *, v256, vuc, const int<4>, \
                                   const int<2>);
    PMXVF64GERNN nothing {mma,pair,quad,mmaint}

  v512 __builtin_mma_pmxvf64gernn_internal (v512, v256, vuc, const int<4>, \
                                            const int<2>);
    PMXVF64GERNN_INTERNAL mma_pmxvf64gernn {mma,pair,quad}

  void __builtin_mma_pmxvf64gernp (v512 *, v256, vuc, const int<4>, \
                                   const int<2>);
    PMXVF64GERNP nothing {mma,pair,quad,mmaint}

  v512 __builtin_mma_pmxvf64gernp_internal (v512, v256, vuc, const int<4>, \
                                            const int<2>);
    PMXVF64GERNP_INTERNAL mma_pmxvf64gernp {mma,pair,quad}

  void __builtin_mma_pmxvf64gerpn (v512 *, v256, vuc, const int<4>, \
                                   const int<2>);
    PMXVF64GERPN nothing {mma,pair,quad,mmaint}

  v512 __builtin_mma_pmxvf64gerpn_internal (v512, v256, vuc, const int<4>, \
                                            const int<2>);
    PMXVF64GERPN_INTERNAL mma_pmxvf64gerpn {mma,pair,quad}

  void __builtin_mma_pmxvf64gerpp (v512 *, v256, vuc, const int<4>, \
                                   const int<2>);
    PMXVF64GERPP nothing {mma,pair,quad,mmaint}

  v512 __builtin_mma_pmxvf64gerpp_internal (v512, v256, vuc, const int<4>, \
                                            const int<2>);
    PMXVF64GERPP_INTERNAL mma_pmxvf64gerpp {mma,pair,quad}

  void __builtin_mma_pmxvi16ger2 (v512 *, vuc, vuc, const int<4>, \
                                  const int<4>, const int<2>);
    PMXVI16GER2 nothing {mma,mmaint}

  v512 __builtin_mma_pmxvi16ger2_internal (vuc, vuc, const int<4>, \
                                           const int<4>, const int<2>);
    PMXVI16GER2_INTERNAL mma_pmxvi16ger2 {mma}

  void __builtin_mma_pmxvi16ger2pp (v512 *, vuc, vuc, const int<4>, \
                                    const int<4>, const int<2>);
    PMXVI16GER2PP nothing {mma,quad,mmaint}

  v512 __builtin_mma_pmxvi16ger2pp_internal (v512, vuc, vuc, const int<4>, \
                                             const int<4>, const int<2>);
    PMXVI16GER2PP_INTERNAL mma_pmxvi16ger2pp {mma,quad}

  void __builtin_mma_pmxvi16ger2s (v512 *, vuc, vuc, const int<4>, \
                                   const int<4>, const int<2>);
    PMXVI16GER2S nothing {mma,mmaint}

  v512 __builtin_mma_pmxvi16ger2s_internal (vuc, vuc, const int<4>, \
                                            const int<4>, const int<2>);
    PMXVI16GER2S_INTERNAL mma_pmxvi16ger2s {mma}

  void __builtin_mma_pmxvi16ger2spp (v512 *, vuc, vuc, const int<4>, \
                                     const int<4>, const int<2>);
    PMXVI16GER2SPP nothing {mma,quad,mmaint}

  v512 __builtin_mma_pmxvi16ger2spp_internal (v512, vuc, vuc, const int<4>, \
                                              const int<4>, const int<2>);
    PMXVI16GER2SPP_INTERNAL mma_pmxvi16ger2spp {mma,quad}

  void __builtin_mma_pmxvi4ger8 (v512 *, vuc, vuc, const int<4>, \
                                 const int<4>, const int<8>);
    PMXVI4GER8 nothing {mma,mmaint}

  v512 __builtin_mma_pmxvi4ger8_internal (vuc, vuc, const int<4>, \
                                          const int<4>, const int<8>);
    PMXVI4GER8_INTERNAL mma_pmxvi4ger8 {mma}

  void __builtin_mma_pmxvi4ger8pp (v512 *, vuc, vuc, const int<4>, \
                                   const int<4>, const int<4>);
    PMXVI4GER8PP nothing {mma,quad,mmaint}

  v512 __builtin_mma_pmxvi4ger8pp_internal (v512, vuc, vuc, const int<4>, \
                                            const int<4>, const int<4>);
    PMXVI4GER8PP_INTERNAL mma_pmxvi4ger8pp {mma,quad}

  void __builtin_mma_pmxvi8ger4 (v512 *, vuc, vuc, const int<4>, \
                                 const int<4>, const int<4>);
    PMXVI8GER4 nothing {mma,mmaint}

  v512 __builtin_mma_pmxvi8ger4_internal (vuc, vuc, const int<4>, \
                                          const int<4>, const int<4>);
    PMXVI8GER4_INTERNAL mma_pmxvi8ger4 {mma}

  void __builtin_mma_pmxvi8ger4pp (v512 *, vuc, vuc, const int<4>, \
                                   const int<4>, const int<4>);
    PMXVI8GER4PP nothing {mma,quad,mmaint}

  v512 __builtin_mma_pmxvi8ger4pp_internal (v512, vuc, vuc, const int<4>, \
                                            const int<4>, const int<4>);
    PMXVI8GER4PP_INTERNAL mma_pmxvi8ger4pp {mma,quad}

  void __builtin_mma_pmxvi8ger4spp (v512 *, vuc, vuc, const int<4>, \
                                    const int<4>, const int<4>);
    PMXVI8GER4SPP nothing {mma,quad,mmaint}

  v512 __builtin_mma_pmxvi8ger4spp_internal (v512, vuc, vuc, const int<4>, \
                                             const int<4>, const int<4>);
    PMXVI8GER4SPP_INTERNAL mma_pmxvi8ger4spp {mma,quad}

  void __builtin_mma_xvbf16ger2 (v512 *, vuc, vuc);
    XVBF16GER2 nothing {mma,mmaint}

  v512 __builtin_mma_xvbf16ger2_internal (vuc, vuc);
    XVBF16GER2_INTERNAL mma_xvbf16ger2 {mma}

  void __builtin_mma_xvbf16ger2nn (v512 *, vuc, vuc);
    XVBF16GER2NN nothing {mma,quad,mmaint}

  v512 __builtin_mma_xvbf16ger2nn_internal (v512, vuc, vuc);
    XVBF16GER2NN_INTERNAL mma_xvbf16ger2nn {mma,quad}

  void __builtin_mma_xvbf16ger2np (v512 *, vuc, vuc);
    XVBF16GER2NP nothing {mma,quad,mmaint}

  v512 __builtin_mma_xvbf16ger2np_internal (v512, vuc, vuc);
    XVBF16GER2NP_INTERNAL mma_xvbf16ger2np {mma,quad}

  void __builtin_mma_xvbf16ger2pn (v512 *, vuc, vuc);
    XVBF16GER2PN nothing {mma,quad,mmaint}

  v512 __builtin_mma_xvbf16ger2pn_internal (v512, vuc, vuc);
    XVBF16GER2PN_INTERNAL mma_xvbf16ger2pn {mma,quad}

  void __builtin_mma_xvbf16ger2pp (v512 *, vuc, vuc);
    XVBF16GER2PP nothing {mma,quad,mmaint}

  v512 __builtin_mma_xvbf16ger2pp_internal (v512, vuc, vuc);
    XVBF16GER2PP_INTERNAL mma_xvbf16ger2pp {mma,quad}

  void __builtin_mma_xvf16ger2 (v512 *, vuc, vuc);
    XVF16GER2 nothing {mma,mmaint}

  v512 __builtin_mma_xvf16ger2_internal (vuc, vuc);
    XVF16GER2_INTERNAL mma_xvf16ger2 {mma}

  void __builtin_mma_xvf16ger2nn (v512 *, vuc, vuc);
    XVF16GER2NN nothing {mma,quad,mmaint}

  v512 __builtin_mma_xvf16ger2nn_internal (v512, vuc, vuc);
    XVF16GER2NN_INTERNAL mma_xvf16ger2nn {mma,quad}

  void __builtin_mma_xvf16ger2np (v512 *, vuc, vuc);
    XVF16GER2NP nothing {mma,quad,mmaint}

  v512 __builtin_mma_xvf16ger2np_internal (v512, vuc, vuc);
    XVF16GER2NP_INTERNAL mma_xvf16ger2np {mma,quad}

  void __builtin_mma_xvf16ger2pn (v512 *, vuc, vuc);
    XVF16GER2PN nothing {mma,quad,mmaint}

  v512 __builtin_mma_xvf16ger2pn_internal (v512, vuc, vuc);
    XVF16GER2PN_INTERNAL mma_xvf16ger2pn {mma,quad}

  void __builtin_mma_xvf16ger2pp (v512 *, vuc, vuc);
    XVF16GER2PP nothing {mma,quad,mmaint}

  v512 __builtin_mma_xvf16ger2pp_internal (v512, vuc, vuc);
    XVF16GER2PP_INTERNAL mma_xvf16ger2pp {mma,quad}

  void __builtin_mma_xvf32ger (v512 *, vuc, vuc);
    XVF32GER nothing {mma,mmaint}

  v512 __builtin_mma_xvf32ger_internal (vuc, vuc);
    XVF32GER_INTERNAL mma_xvf32ger {mma}

  void __builtin_mma_xvf32gernn (v512 *, vuc, vuc);
    XVF32GERNN nothing {mma,quad,mmaint}

  v512 __builtin_mma_xvf32gernn_internal (v512, vuc, vuc);
    XVF32GERNN_INTERNAL mma_xvf32gernn {mma,quad}

  void __builtin_mma_xvf32gernp (v512 *, vuc, vuc);
    XVF32GERNP nothing {mma,quad,mmaint}

  v512 __builtin_mma_xvf32gernp_internal (v512, vuc, vuc);
    XVF32GERNP_INTERNAL mma_xvf32gernp {mma,quad}

  void __builtin_mma_xvf32gerpn (v512 *, vuc, vuc);
    XVF32GERPN nothing {mma,quad,mmaint}

  v512 __builtin_mma_xvf32gerpn_internal (v512, vuc, vuc);
    XVF32GERPN_INTERNAL mma_xvf32gerpn {mma,quad}

  void __builtin_mma_xvf32gerpp (v512 *, vuc, vuc);
    XVF32GERPP nothing {mma,quad,mmaint}

  v512 __builtin_mma_xvf32gerpp_internal (v512, vuc, vuc);
    XVF32GERPP_INTERNAL mma_xvf32gerpp {mma,quad}

  void __builtin_mma_xvf64ger (v512 *, v256, vuc);
    XVF64GER nothing {mma,pair,mmaint}

  v512 __builtin_mma_xvf64ger_internal (v256, vuc);
    XVF64GER_INTERNAL mma_xvf64ger {mma,pair}

  void __builtin_mma_xvf64gernn (v512 *, v256, vuc);
    XVF64GERNN nothing {mma,pair,quad,mmaint}

  v512 __builtin_mma_xvf64gernn_internal (v512, v256, vuc);
    XVF64GERNN_INTERNAL mma_xvf64gernn {mma,pair,quad}

  void __builtin_mma_xvf64gernp (v512 *, v256, vuc);
    XVF64GERNP nothing {mma,pair,quad,mmaint}

  v512 __builtin_mma_xvf64gernp_internal (v512, v256, vuc);
    XVF64GERNP_INTERNAL mma_xvf64gernp {mma,pair,quad}

  void __builtin_mma_xvf64gerpn (v512 *, v256, vuc);
    XVF64GERPN nothing {mma,pair,quad,mmaint}

  v512 __builtin_mma_xvf64gerpn_internal (v512, v256, vuc);
    XVF64GERPN_INTERNAL mma_xvf64gerpn {mma,pair,quad}

  void __builtin_mma_xvf64gerpp (v512 *, v256, vuc);
    XVF64GERPP nothing {mma,pair,quad,mmaint}

  v512 __builtin_mma_xvf64gerpp_internal (v512, v256, vuc);
    XVF64GERPP_INTERNAL mma_xvf64gerpp {mma,pair,quad}

  void __builtin_mma_xvi16ger2 (v512 *, vuc, vuc);
    XVI16GER2 nothing {mma,mmaint}

  v512 __builtin_mma_xvi16ger2_internal (vuc, vuc);
    XVI16GER2_INTERNAL mma_xvi16ger2 {mma}

  void __builtin_mma_xvi16ger2pp (v512 *, vuc, vuc);
    XVI16GER2PP nothing {mma,quad,mmaint}

  v512 __builtin_mma_xvi16ger2pp_internal (v512, vuc, vuc);
    XVI16GER2PP_INTERNAL mma_xvi16ger2pp {mma,quad}

  void __builtin_mma_xvi16ger2s (v512 *, vuc, vuc);
    XVI16GER2S nothing {mma,mmaint}

  v512 __builtin_mma_xvi16ger2s_internal (vuc, vuc);
    XVI16GER2S_INTERNAL mma_xvi16ger2s {mma}

  void __builtin_mma_xvi16ger2spp (v512 *, vuc, vuc);
    XVI16GER2SPP nothing {mma,quad,mmaint}

  v512 __builtin_mma_xvi16ger2spp_internal (v512, vuc, vuc);
    XVI16GER2SPP_INTERNAL mma_xvi16ger2spp {mma,quad}

  void __builtin_mma_xvi4ger8 (v512 *, vuc, vuc);
    XVI4GER8 nothing {mma,mmaint}

  v512 __builtin_mma_xvi4ger8_internal (vuc, vuc);
    XVI4GER8_INTERNAL mma_xvi4ger8 {mma}

  void __builtin_mma_xvi4ger8pp (v512 *, vuc, vuc);
    XVI4GER8PP nothing {mma,quad,mmaint}

  v512 __builtin_mma_xvi4ger8pp_internal (v512, vuc, vuc);
    XVI4GER8PP_INTERNAL mma_xvi4ger8pp {mma,quad}

  void __builtin_mma_xvi8ger4 (v512 *, vuc, vuc);
    XVI8GER4 nothing {mma,mmaint}

  v512 __builtin_mma_xvi8ger4_internal (vuc, vuc);
    XVI8GER4_INTERNAL mma_xvi8ger4 {mma}

  void __builtin_mma_xvi8ger4pp (v512 *, vuc, vuc);
    XVI8GER4PP nothing {mma,quad,mmaint}

  v512 __builtin_mma_xvi8ger4pp_internal (v512, vuc, vuc);
    XVI8GER4PP_INTERNAL mma_xvi8ger4pp {mma,quad}

  void __builtin_mma_xvi8ger4spp (v512 *, vuc, vuc);
    XVI8GER4SPP nothing {mma,quad,mmaint}

  v512 __builtin_mma_xvi8ger4spp_internal (v512, vuc, vuc);
    XVI8GER4SPP_INTERNAL mma_xvi8ger4spp {mma,quad}

  void __builtin_mma_xxmfacc (v512 *);
    XXMFACC nothing {mma,quad,mmaint}

  v512 __builtin_mma_xxmfacc_internal (v512);
    XXMFACC_INTERNAL mma_xxmfacc {mma,quad}

  void __builtin_mma_xxmtacc (v512 *);
    XXMTACC nothing {mma,quad,mmaint}

  v512 __builtin_mma_xxmtacc_internal (v512);
    XXMTACC_INTERNAL mma_xxmtacc {mma,quad}

  void __builtin_mma_xxsetaccz (v512 *);
    XXSETACCZ nothing {mma,mmaint}

  v512 __builtin_mma_xxsetaccz_internal ();
    XXSETACCZ_INTERNAL mma_xxsetaccz {mma}

  void __builtin_vsx_assemble_pair (v256 *, vuc, vuc);
    ASSEMBLE_PAIR_V nothing {mma,mmaint}

  v256 __builtin_vsx_assemble_pair_internal (vuc, vuc);
    ASSEMBLE_PAIR_V_INTERNAL vsx_assemble_pair {mma}

  void __builtin_vsx_build_pair (v256 *, vuc, vuc);
    BUILD_PAIR nothing {mma,mmaint}

  v256 __builtin_vsx_build_pair_internal (vuc, vuc);
    BUILD_PAIR_INTERNAL vsx_assemble_pair {mma}

  void __builtin_vsx_disassemble_pair (void *, v256 *);
    DISASSEMBLE_PAIR_V nothing {mma,pair,mmaint}

  vuc __builtin_vsx_disassemble_pair_internal (v256, const int<2>);
    DISASSEMBLE_PAIR_V_INTERNAL vsx_disassemble_pair {mma}

  v256 __builtin_vsx_lxvp (unsigned long, const v256 *);
    LXVP nothing {mma}

  void __builtin_vsx_stxvp (v256, unsigned long, const v256 *);
    STXVP nothing {mma,pair}
