aboutsummaryrefslogtreecommitdiffstats
path: root/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106794.patch
diff options
context:
space:
mode:
Diffstat (limited to 'toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106794.patch')
-rw-r--r--toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106794.patch2648
1 files changed, 0 insertions, 2648 deletions
diff --git a/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106794.patch b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106794.patch
deleted file mode 100644
index 29663c64a0..0000000000
--- a/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106794.patch
+++ /dev/null
@@ -1,2648 +0,0 @@
-2011-08-24 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
-
- gcc/
- * config/arm/arm.c (arm_init_neon_builtins): Use
- n_operands instead of n_generator_args.
-
-2011-08-24 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
-
- Backport from mainline
- 2011-04-18 Jie Zhang <jie@codesourcery.com>
- Richard Earnshaw <rearnsha@arm.com>
-
- * arm.c (neon_builtin_type_bits): Remove.
- (typedef enum neon_builtin_mode): New.
- (T_MAX): Don't define.
- (typedef enum neon_builtin_datum): Remove bits, codes[],
- num_vars and base_fcode. Add mode, code and fcode.
- (VAR1, VAR2, VAR3, VAR4, VAR5, VAR6, VAR7, VAR8, VAR9
- VAR10): Change accordingly.
- (neon_builtin_data[]): Change accordingly
- (arm_init_neon_builtins): Change accordingly.
- (neon_builtin_compare): Remove.
- (locate_neon_builtin_icode): Remove.
- (arm_expand_neon_builtin): Change accordingly.
-
- * arm.h (enum arm_builtins): Move to ...
- * arm.c (enum arm_builtins): ... here; and rearrange builtin code.
-
- * arm.c (arm_builtin_decl): Declare.
- (TARGET_BUILTIN_DECL): Define.
- (enum arm_builtins): Correct ARM_BUILTIN_MAX.
- (arm_builtin_decls[]): New.
- (arm_init_neon_builtins): Store builtin declarations in
- arm_builtin_decls[].
- (arm_init_tls_builtins): Likewise.
- (arm_init_iwmmxt_builtins): Likewise. Refactor initialization code.
- (arm_builtin_decl): New.
-
-=== modified file 'gcc/config/arm/arm.c'
---- old/gcc/config/arm/arm.c 2011-08-18 13:53:37 +0000
-+++ new/gcc/config/arm/arm.c 2011-08-24 17:35:16 +0000
-@@ -162,6 +162,7 @@
- static rtx arm_expand_binop_builtin (enum insn_code, tree, rtx);
- static rtx arm_expand_unop_builtin (enum insn_code, tree, rtx, int);
- static rtx arm_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
-+static tree arm_builtin_decl (unsigned, bool);
- static void emit_constant_insn (rtx cond, rtx pattern);
- static rtx emit_set_insn (rtx, rtx);
- static int arm_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
-@@ -415,6 +416,8 @@
- #define TARGET_INIT_BUILTINS arm_init_builtins
- #undef TARGET_EXPAND_BUILTIN
- #define TARGET_EXPAND_BUILTIN arm_expand_builtin
-+#undef TARGET_BUILTIN_DECL
-+#define TARGET_BUILTIN_DECL arm_builtin_decl
-
- #undef TARGET_INIT_LIBFUNCS
- #define TARGET_INIT_LIBFUNCS arm_init_libfuncs
-@@ -18147,505 +18150,31 @@
- return value;
- }
-
--#define def_mbuiltin(MASK, NAME, TYPE, CODE) \
-- do \
-- { \
-- if ((MASK) & insn_flags) \
-- add_builtin_function ((NAME), (TYPE), (CODE), \
-- BUILT_IN_MD, NULL, NULL_TREE); \
-- } \
-- while (0)
--
--struct builtin_description
--{
-- const unsigned int mask;
-- const enum insn_code icode;
-- const char * const name;
-- const enum arm_builtins code;
-- const enum rtx_code comparison;
-- const unsigned int flag;
--};
--
--static const struct builtin_description bdesc_2arg[] =
--{
--#define IWMMXT_BUILTIN(code, string, builtin) \
-- { FL_IWMMXT, CODE_FOR_##code, "__builtin_arm_" string, \
-- ARM_BUILTIN_##builtin, UNKNOWN, 0 },
--
-- IWMMXT_BUILTIN (addv8qi3, "waddb", WADDB)
-- IWMMXT_BUILTIN (addv4hi3, "waddh", WADDH)
-- IWMMXT_BUILTIN (addv2si3, "waddw", WADDW)
-- IWMMXT_BUILTIN (subv8qi3, "wsubb", WSUBB)
-- IWMMXT_BUILTIN (subv4hi3, "wsubh", WSUBH)
-- IWMMXT_BUILTIN (subv2si3, "wsubw", WSUBW)
-- IWMMXT_BUILTIN (ssaddv8qi3, "waddbss", WADDSSB)
-- IWMMXT_BUILTIN (ssaddv4hi3, "waddhss", WADDSSH)
-- IWMMXT_BUILTIN (ssaddv2si3, "waddwss", WADDSSW)
-- IWMMXT_BUILTIN (sssubv8qi3, "wsubbss", WSUBSSB)
-- IWMMXT_BUILTIN (sssubv4hi3, "wsubhss", WSUBSSH)
-- IWMMXT_BUILTIN (sssubv2si3, "wsubwss", WSUBSSW)
-- IWMMXT_BUILTIN (usaddv8qi3, "waddbus", WADDUSB)
-- IWMMXT_BUILTIN (usaddv4hi3, "waddhus", WADDUSH)
-- IWMMXT_BUILTIN (usaddv2si3, "waddwus", WADDUSW)
-- IWMMXT_BUILTIN (ussubv8qi3, "wsubbus", WSUBUSB)
-- IWMMXT_BUILTIN (ussubv4hi3, "wsubhus", WSUBUSH)
-- IWMMXT_BUILTIN (ussubv2si3, "wsubwus", WSUBUSW)
-- IWMMXT_BUILTIN (mulv4hi3, "wmulul", WMULUL)
-- IWMMXT_BUILTIN (smulv4hi3_highpart, "wmulsm", WMULSM)
-- IWMMXT_BUILTIN (umulv4hi3_highpart, "wmulum", WMULUM)
-- IWMMXT_BUILTIN (eqv8qi3, "wcmpeqb", WCMPEQB)
-- IWMMXT_BUILTIN (eqv4hi3, "wcmpeqh", WCMPEQH)
-- IWMMXT_BUILTIN (eqv2si3, "wcmpeqw", WCMPEQW)
-- IWMMXT_BUILTIN (gtuv8qi3, "wcmpgtub", WCMPGTUB)
-- IWMMXT_BUILTIN (gtuv4hi3, "wcmpgtuh", WCMPGTUH)
-- IWMMXT_BUILTIN (gtuv2si3, "wcmpgtuw", WCMPGTUW)
-- IWMMXT_BUILTIN (gtv8qi3, "wcmpgtsb", WCMPGTSB)
-- IWMMXT_BUILTIN (gtv4hi3, "wcmpgtsh", WCMPGTSH)
-- IWMMXT_BUILTIN (gtv2si3, "wcmpgtsw", WCMPGTSW)
-- IWMMXT_BUILTIN (umaxv8qi3, "wmaxub", WMAXUB)
-- IWMMXT_BUILTIN (smaxv8qi3, "wmaxsb", WMAXSB)
-- IWMMXT_BUILTIN (umaxv4hi3, "wmaxuh", WMAXUH)
-- IWMMXT_BUILTIN (smaxv4hi3, "wmaxsh", WMAXSH)
-- IWMMXT_BUILTIN (umaxv2si3, "wmaxuw", WMAXUW)
-- IWMMXT_BUILTIN (smaxv2si3, "wmaxsw", WMAXSW)
-- IWMMXT_BUILTIN (uminv8qi3, "wminub", WMINUB)
-- IWMMXT_BUILTIN (sminv8qi3, "wminsb", WMINSB)
-- IWMMXT_BUILTIN (uminv4hi3, "wminuh", WMINUH)
-- IWMMXT_BUILTIN (sminv4hi3, "wminsh", WMINSH)
-- IWMMXT_BUILTIN (uminv2si3, "wminuw", WMINUW)
-- IWMMXT_BUILTIN (sminv2si3, "wminsw", WMINSW)
-- IWMMXT_BUILTIN (iwmmxt_anddi3, "wand", WAND)
-- IWMMXT_BUILTIN (iwmmxt_nanddi3, "wandn", WANDN)
-- IWMMXT_BUILTIN (iwmmxt_iordi3, "wor", WOR)
-- IWMMXT_BUILTIN (iwmmxt_xordi3, "wxor", WXOR)
-- IWMMXT_BUILTIN (iwmmxt_uavgv8qi3, "wavg2b", WAVG2B)
-- IWMMXT_BUILTIN (iwmmxt_uavgv4hi3, "wavg2h", WAVG2H)
-- IWMMXT_BUILTIN (iwmmxt_uavgrndv8qi3, "wavg2br", WAVG2BR)
-- IWMMXT_BUILTIN (iwmmxt_uavgrndv4hi3, "wavg2hr", WAVG2HR)
-- IWMMXT_BUILTIN (iwmmxt_wunpckilb, "wunpckilb", WUNPCKILB)
-- IWMMXT_BUILTIN (iwmmxt_wunpckilh, "wunpckilh", WUNPCKILH)
-- IWMMXT_BUILTIN (iwmmxt_wunpckilw, "wunpckilw", WUNPCKILW)
-- IWMMXT_BUILTIN (iwmmxt_wunpckihb, "wunpckihb", WUNPCKIHB)
-- IWMMXT_BUILTIN (iwmmxt_wunpckihh, "wunpckihh", WUNPCKIHH)
-- IWMMXT_BUILTIN (iwmmxt_wunpckihw, "wunpckihw", WUNPCKIHW)
-- IWMMXT_BUILTIN (iwmmxt_wmadds, "wmadds", WMADDS)
-- IWMMXT_BUILTIN (iwmmxt_wmaddu, "wmaddu", WMADDU)
--
--#define IWMMXT_BUILTIN2(code, builtin) \
-- { FL_IWMMXT, CODE_FOR_##code, NULL, ARM_BUILTIN_##builtin, UNKNOWN, 0 },
--
-- IWMMXT_BUILTIN2 (iwmmxt_wpackhss, WPACKHSS)
-- IWMMXT_BUILTIN2 (iwmmxt_wpackwss, WPACKWSS)
-- IWMMXT_BUILTIN2 (iwmmxt_wpackdss, WPACKDSS)
-- IWMMXT_BUILTIN2 (iwmmxt_wpackhus, WPACKHUS)
-- IWMMXT_BUILTIN2 (iwmmxt_wpackwus, WPACKWUS)
-- IWMMXT_BUILTIN2 (iwmmxt_wpackdus, WPACKDUS)
-- IWMMXT_BUILTIN2 (ashlv4hi3_di, WSLLH)
-- IWMMXT_BUILTIN2 (ashlv4hi3_iwmmxt, WSLLHI)
-- IWMMXT_BUILTIN2 (ashlv2si3_di, WSLLW)
-- IWMMXT_BUILTIN2 (ashlv2si3_iwmmxt, WSLLWI)
-- IWMMXT_BUILTIN2 (ashldi3_di, WSLLD)
-- IWMMXT_BUILTIN2 (ashldi3_iwmmxt, WSLLDI)
-- IWMMXT_BUILTIN2 (lshrv4hi3_di, WSRLH)
-- IWMMXT_BUILTIN2 (lshrv4hi3_iwmmxt, WSRLHI)
-- IWMMXT_BUILTIN2 (lshrv2si3_di, WSRLW)
-- IWMMXT_BUILTIN2 (lshrv2si3_iwmmxt, WSRLWI)
-- IWMMXT_BUILTIN2 (lshrdi3_di, WSRLD)
-- IWMMXT_BUILTIN2 (lshrdi3_iwmmxt, WSRLDI)
-- IWMMXT_BUILTIN2 (ashrv4hi3_di, WSRAH)
-- IWMMXT_BUILTIN2 (ashrv4hi3_iwmmxt, WSRAHI)
-- IWMMXT_BUILTIN2 (ashrv2si3_di, WSRAW)
-- IWMMXT_BUILTIN2 (ashrv2si3_iwmmxt, WSRAWI)
-- IWMMXT_BUILTIN2 (ashrdi3_di, WSRAD)
-- IWMMXT_BUILTIN2 (ashrdi3_iwmmxt, WSRADI)
-- IWMMXT_BUILTIN2 (rorv4hi3_di, WRORH)
-- IWMMXT_BUILTIN2 (rorv4hi3, WRORHI)
-- IWMMXT_BUILTIN2 (rorv2si3_di, WRORW)
-- IWMMXT_BUILTIN2 (rorv2si3, WRORWI)
-- IWMMXT_BUILTIN2 (rordi3_di, WRORD)
-- IWMMXT_BUILTIN2 (rordi3, WRORDI)
-- IWMMXT_BUILTIN2 (iwmmxt_wmacuz, WMACUZ)
-- IWMMXT_BUILTIN2 (iwmmxt_wmacsz, WMACSZ)
--};
--
--static const struct builtin_description bdesc_1arg[] =
--{
-- IWMMXT_BUILTIN (iwmmxt_tmovmskb, "tmovmskb", TMOVMSKB)
-- IWMMXT_BUILTIN (iwmmxt_tmovmskh, "tmovmskh", TMOVMSKH)
-- IWMMXT_BUILTIN (iwmmxt_tmovmskw, "tmovmskw", TMOVMSKW)
-- IWMMXT_BUILTIN (iwmmxt_waccb, "waccb", WACCB)
-- IWMMXT_BUILTIN (iwmmxt_wacch, "wacch", WACCH)
-- IWMMXT_BUILTIN (iwmmxt_waccw, "waccw", WACCW)
-- IWMMXT_BUILTIN (iwmmxt_wunpckehub, "wunpckehub", WUNPCKEHUB)
-- IWMMXT_BUILTIN (iwmmxt_wunpckehuh, "wunpckehuh", WUNPCKEHUH)
-- IWMMXT_BUILTIN (iwmmxt_wunpckehuw, "wunpckehuw", WUNPCKEHUW)
-- IWMMXT_BUILTIN (iwmmxt_wunpckehsb, "wunpckehsb", WUNPCKEHSB)
-- IWMMXT_BUILTIN (iwmmxt_wunpckehsh, "wunpckehsh", WUNPCKEHSH)
-- IWMMXT_BUILTIN (iwmmxt_wunpckehsw, "wunpckehsw", WUNPCKEHSW)
-- IWMMXT_BUILTIN (iwmmxt_wunpckelub, "wunpckelub", WUNPCKELUB)
-- IWMMXT_BUILTIN (iwmmxt_wunpckeluh, "wunpckeluh", WUNPCKELUH)
-- IWMMXT_BUILTIN (iwmmxt_wunpckeluw, "wunpckeluw", WUNPCKELUW)
-- IWMMXT_BUILTIN (iwmmxt_wunpckelsb, "wunpckelsb", WUNPCKELSB)
-- IWMMXT_BUILTIN (iwmmxt_wunpckelsh, "wunpckelsh", WUNPCKELSH)
-- IWMMXT_BUILTIN (iwmmxt_wunpckelsw, "wunpckelsw", WUNPCKELSW)
--};
--
--/* Set up all the iWMMXt builtins. This is
-- not called if TARGET_IWMMXT is zero. */
--
--static void
--arm_init_iwmmxt_builtins (void)
--{
-- const struct builtin_description * d;
-- size_t i;
-- tree endlink = void_list_node;
--
-- tree V2SI_type_node = build_vector_type_for_mode (intSI_type_node, V2SImode);
-- tree V4HI_type_node = build_vector_type_for_mode (intHI_type_node, V4HImode);
-- tree V8QI_type_node = build_vector_type_for_mode (intQI_type_node, V8QImode);
--
-- tree int_ftype_int
-- = build_function_type (integer_type_node,
-- tree_cons (NULL_TREE, integer_type_node, endlink));
-- tree v8qi_ftype_v8qi_v8qi_int
-- = build_function_type (V8QI_type_node,
-- tree_cons (NULL_TREE, V8QI_type_node,
-- tree_cons (NULL_TREE, V8QI_type_node,
-- tree_cons (NULL_TREE,
-- integer_type_node,
-- endlink))));
-- tree v4hi_ftype_v4hi_int
-- = build_function_type (V4HI_type_node,
-- tree_cons (NULL_TREE, V4HI_type_node,
-- tree_cons (NULL_TREE, integer_type_node,
-- endlink)));
-- tree v2si_ftype_v2si_int
-- = build_function_type (V2SI_type_node,
-- tree_cons (NULL_TREE, V2SI_type_node,
-- tree_cons (NULL_TREE, integer_type_node,
-- endlink)));
-- tree v2si_ftype_di_di
-- = build_function_type (V2SI_type_node,
-- tree_cons (NULL_TREE, long_long_integer_type_node,
-- tree_cons (NULL_TREE, long_long_integer_type_node,
-- endlink)));
-- tree di_ftype_di_int
-- = build_function_type (long_long_integer_type_node,
-- tree_cons (NULL_TREE, long_long_integer_type_node,
-- tree_cons (NULL_TREE, integer_type_node,
-- endlink)));
-- tree di_ftype_di_int_int
-- = build_function_type (long_long_integer_type_node,
-- tree_cons (NULL_TREE, long_long_integer_type_node,
-- tree_cons (NULL_TREE, integer_type_node,
-- tree_cons (NULL_TREE,
-- integer_type_node,
-- endlink))));
-- tree int_ftype_v8qi
-- = build_function_type (integer_type_node,
-- tree_cons (NULL_TREE, V8QI_type_node,
-- endlink));
-- tree int_ftype_v4hi
-- = build_function_type (integer_type_node,
-- tree_cons (NULL_TREE, V4HI_type_node,
-- endlink));
-- tree int_ftype_v2si
-- = build_function_type (integer_type_node,
-- tree_cons (NULL_TREE, V2SI_type_node,
-- endlink));
-- tree int_ftype_v8qi_int
-- = build_function_type (integer_type_node,
-- tree_cons (NULL_TREE, V8QI_type_node,
-- tree_cons (NULL_TREE, integer_type_node,
-- endlink)));
-- tree int_ftype_v4hi_int
-- = build_function_type (integer_type_node,
-- tree_cons (NULL_TREE, V4HI_type_node,
-- tree_cons (NULL_TREE, integer_type_node,
-- endlink)));
-- tree int_ftype_v2si_int
-- = build_function_type (integer_type_node,
-- tree_cons (NULL_TREE, V2SI_type_node,
-- tree_cons (NULL_TREE, integer_type_node,
-- endlink)));
-- tree v8qi_ftype_v8qi_int_int
-- = build_function_type (V8QI_type_node,
-- tree_cons (NULL_TREE, V8QI_type_node,
-- tree_cons (NULL_TREE, integer_type_node,
-- tree_cons (NULL_TREE,
-- integer_type_node,
-- endlink))));
-- tree v4hi_ftype_v4hi_int_int
-- = build_function_type (V4HI_type_node,
-- tree_cons (NULL_TREE, V4HI_type_node,
-- tree_cons (NULL_TREE, integer_type_node,
-- tree_cons (NULL_TREE,
-- integer_type_node,
-- endlink))));
-- tree v2si_ftype_v2si_int_int
-- = build_function_type (V2SI_type_node,
-- tree_cons (NULL_TREE, V2SI_type_node,
-- tree_cons (NULL_TREE, integer_type_node,
-- tree_cons (NULL_TREE,
-- integer_type_node,
-- endlink))));
-- /* Miscellaneous. */
-- tree v8qi_ftype_v4hi_v4hi
-- = build_function_type (V8QI_type_node,
-- tree_cons (NULL_TREE, V4HI_type_node,
-- tree_cons (NULL_TREE, V4HI_type_node,
-- endlink)));
-- tree v4hi_ftype_v2si_v2si
-- = build_function_type (V4HI_type_node,
-- tree_cons (NULL_TREE, V2SI_type_node,
-- tree_cons (NULL_TREE, V2SI_type_node,
-- endlink)));
-- tree v2si_ftype_v4hi_v4hi
-- = build_function_type (V2SI_type_node,
-- tree_cons (NULL_TREE, V4HI_type_node,
-- tree_cons (NULL_TREE, V4HI_type_node,
-- endlink)));
-- tree v2si_ftype_v8qi_v8qi
-- = build_function_type (V2SI_type_node,
-- tree_cons (NULL_TREE, V8QI_type_node,
-- tree_cons (NULL_TREE, V8QI_type_node,
-- endlink)));
-- tree v4hi_ftype_v4hi_di
-- = build_function_type (V4HI_type_node,
-- tree_cons (NULL_TREE, V4HI_type_node,
-- tree_cons (NULL_TREE,
-- long_long_integer_type_node,
-- endlink)));
-- tree v2si_ftype_v2si_di
-- = build_function_type (V2SI_type_node,
-- tree_cons (NULL_TREE, V2SI_type_node,
-- tree_cons (NULL_TREE,
-- long_long_integer_type_node,
-- endlink)));
-- tree void_ftype_int_int
-- = build_function_type (void_type_node,
-- tree_cons (NULL_TREE, integer_type_node,
-- tree_cons (NULL_TREE, integer_type_node,
-- endlink)));
-- tree di_ftype_void
-- = build_function_type (long_long_unsigned_type_node, endlink);
-- tree di_ftype_v8qi
-- = build_function_type (long_long_integer_type_node,
-- tree_cons (NULL_TREE, V8QI_type_node,
-- endlink));
-- tree di_ftype_v4hi
-- = build_function_type (long_long_integer_type_node,
-- tree_cons (NULL_TREE, V4HI_type_node,
-- endlink));
-- tree di_ftype_v2si
-- = build_function_type (long_long_integer_type_node,
-- tree_cons (NULL_TREE, V2SI_type_node,
-- endlink));
-- tree v2si_ftype_v4hi
-- = build_function_type (V2SI_type_node,
-- tree_cons (NULL_TREE, V4HI_type_node,
-- endlink));
-- tree v4hi_ftype_v8qi
-- = build_function_type (V4HI_type_node,
-- tree_cons (NULL_TREE, V8QI_type_node,
-- endlink));
--
-- tree di_ftype_di_v4hi_v4hi
-- = build_function_type (long_long_unsigned_type_node,
-- tree_cons (NULL_TREE,
-- long_long_unsigned_type_node,
-- tree_cons (NULL_TREE, V4HI_type_node,
-- tree_cons (NULL_TREE,
-- V4HI_type_node,
-- endlink))));
--
-- tree di_ftype_v4hi_v4hi
-- = build_function_type (long_long_unsigned_type_node,
-- tree_cons (NULL_TREE, V4HI_type_node,
-- tree_cons (NULL_TREE, V4HI_type_node,
-- endlink)));
--
-- /* Normal vector binops. */
-- tree v8qi_ftype_v8qi_v8qi
-- = build_function_type (V8QI_type_node,
-- tree_cons (NULL_TREE, V8QI_type_node,
-- tree_cons (NULL_TREE, V8QI_type_node,
-- endlink)));
-- tree v4hi_ftype_v4hi_v4hi
-- = build_function_type (V4HI_type_node,
-- tree_cons (NULL_TREE, V4HI_type_node,
-- tree_cons (NULL_TREE, V4HI_type_node,
-- endlink)));
-- tree v2si_ftype_v2si_v2si
-- = build_function_type (V2SI_type_node,
-- tree_cons (NULL_TREE, V2SI_type_node,
-- tree_cons (NULL_TREE, V2SI_type_node,
-- endlink)));
-- tree di_ftype_di_di
-- = build_function_type (long_long_unsigned_type_node,
-- tree_cons (NULL_TREE, long_long_unsigned_type_node,
-- tree_cons (NULL_TREE,
-- long_long_unsigned_type_node,
-- endlink)));
--
-- /* Add all builtins that are more or less simple operations on two
-- operands. */
-- for (i = 0, d = bdesc_2arg; i < ARRAY_SIZE (bdesc_2arg); i++, d++)
-- {
-- /* Use one of the operands; the target can have a different mode for
-- mask-generating compares. */
-- enum machine_mode mode;
-- tree type;
--
-- if (d->name == 0)
-- continue;
--
-- mode = insn_data[d->icode].operand[1].mode;
--
-- switch (mode)
-- {
-- case V8QImode:
-- type = v8qi_ftype_v8qi_v8qi;
-- break;
-- case V4HImode:
-- type = v4hi_ftype_v4hi_v4hi;
-- break;
-- case V2SImode:
-- type = v2si_ftype_v2si_v2si;
-- break;
-- case DImode:
-- type = di_ftype_di_di;
-- break;
--
-- default:
-- gcc_unreachable ();
-- }
--
-- def_mbuiltin (d->mask, d->name, type, d->code);
-- }
--
-- /* Add the remaining MMX insns with somewhat more complicated types. */
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wzero", di_ftype_void, ARM_BUILTIN_WZERO);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_setwcx", void_ftype_int_int, ARM_BUILTIN_SETWCX);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_getwcx", int_ftype_int, ARM_BUILTIN_GETWCX);
--
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsllh", v4hi_ftype_v4hi_di, ARM_BUILTIN_WSLLH);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsllw", v2si_ftype_v2si_di, ARM_BUILTIN_WSLLW);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wslld", di_ftype_di_di, ARM_BUILTIN_WSLLD);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsllhi", v4hi_ftype_v4hi_int, ARM_BUILTIN_WSLLHI);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsllwi", v2si_ftype_v2si_int, ARM_BUILTIN_WSLLWI);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wslldi", di_ftype_di_int, ARM_BUILTIN_WSLLDI);
--
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrlh", v4hi_ftype_v4hi_di, ARM_BUILTIN_WSRLH);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrlw", v2si_ftype_v2si_di, ARM_BUILTIN_WSRLW);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrld", di_ftype_di_di, ARM_BUILTIN_WSRLD);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrlhi", v4hi_ftype_v4hi_int, ARM_BUILTIN_WSRLHI);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrlwi", v2si_ftype_v2si_int, ARM_BUILTIN_WSRLWI);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrldi", di_ftype_di_int, ARM_BUILTIN_WSRLDI);
--
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrah", v4hi_ftype_v4hi_di, ARM_BUILTIN_WSRAH);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsraw", v2si_ftype_v2si_di, ARM_BUILTIN_WSRAW);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrad", di_ftype_di_di, ARM_BUILTIN_WSRAD);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrahi", v4hi_ftype_v4hi_int, ARM_BUILTIN_WSRAHI);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrawi", v2si_ftype_v2si_int, ARM_BUILTIN_WSRAWI);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsradi", di_ftype_di_int, ARM_BUILTIN_WSRADI);
--
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrorh", v4hi_ftype_v4hi_di, ARM_BUILTIN_WRORH);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrorw", v2si_ftype_v2si_di, ARM_BUILTIN_WRORW);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrord", di_ftype_di_di, ARM_BUILTIN_WRORD);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrorhi", v4hi_ftype_v4hi_int, ARM_BUILTIN_WRORHI);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrorwi", v2si_ftype_v2si_int, ARM_BUILTIN_WRORWI);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrordi", di_ftype_di_int, ARM_BUILTIN_WRORDI);
--
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wshufh", v4hi_ftype_v4hi_int, ARM_BUILTIN_WSHUFH);
--
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsadb", v2si_ftype_v8qi_v8qi, ARM_BUILTIN_WSADB);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsadh", v2si_ftype_v4hi_v4hi, ARM_BUILTIN_WSADH);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsadbz", v2si_ftype_v8qi_v8qi, ARM_BUILTIN_WSADBZ);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsadhz", v2si_ftype_v4hi_v4hi, ARM_BUILTIN_WSADHZ);
--
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmsb", int_ftype_v8qi_int, ARM_BUILTIN_TEXTRMSB);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmsh", int_ftype_v4hi_int, ARM_BUILTIN_TEXTRMSH);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmsw", int_ftype_v2si_int, ARM_BUILTIN_TEXTRMSW);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmub", int_ftype_v8qi_int, ARM_BUILTIN_TEXTRMUB);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmuh", int_ftype_v4hi_int, ARM_BUILTIN_TEXTRMUH);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmuw", int_ftype_v2si_int, ARM_BUILTIN_TEXTRMUW);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tinsrb", v8qi_ftype_v8qi_int_int, ARM_BUILTIN_TINSRB);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tinsrh", v4hi_ftype_v4hi_int_int, ARM_BUILTIN_TINSRH);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tinsrw", v2si_ftype_v2si_int_int, ARM_BUILTIN_TINSRW);
--
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_waccb", di_ftype_v8qi, ARM_BUILTIN_WACCB);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wacch", di_ftype_v4hi, ARM_BUILTIN_WACCH);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_waccw", di_ftype_v2si, ARM_BUILTIN_WACCW);
--
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmovmskb", int_ftype_v8qi, ARM_BUILTIN_TMOVMSKB);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmovmskh", int_ftype_v4hi, ARM_BUILTIN_TMOVMSKH);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmovmskw", int_ftype_v2si, ARM_BUILTIN_TMOVMSKW);
--
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackhss", v8qi_ftype_v4hi_v4hi, ARM_BUILTIN_WPACKHSS);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackhus", v8qi_ftype_v4hi_v4hi, ARM_BUILTIN_WPACKHUS);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackwus", v4hi_ftype_v2si_v2si, ARM_BUILTIN_WPACKWUS);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackwss", v4hi_ftype_v2si_v2si, ARM_BUILTIN_WPACKWSS);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackdus", v2si_ftype_di_di, ARM_BUILTIN_WPACKDUS);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackdss", v2si_ftype_di_di, ARM_BUILTIN_WPACKDSS);
--
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehub", v4hi_ftype_v8qi, ARM_BUILTIN_WUNPCKEHUB);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehuh", v2si_ftype_v4hi, ARM_BUILTIN_WUNPCKEHUH);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehuw", di_ftype_v2si, ARM_BUILTIN_WUNPCKEHUW);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehsb", v4hi_ftype_v8qi, ARM_BUILTIN_WUNPCKEHSB);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehsh", v2si_ftype_v4hi, ARM_BUILTIN_WUNPCKEHSH);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehsw", di_ftype_v2si, ARM_BUILTIN_WUNPCKEHSW);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckelub", v4hi_ftype_v8qi, ARM_BUILTIN_WUNPCKELUB);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckeluh", v2si_ftype_v4hi, ARM_BUILTIN_WUNPCKELUH);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckeluw", di_ftype_v2si, ARM_BUILTIN_WUNPCKELUW);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckelsb", v4hi_ftype_v8qi, ARM_BUILTIN_WUNPCKELSB);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckelsh", v2si_ftype_v4hi, ARM_BUILTIN_WUNPCKELSH);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckelsw", di_ftype_v2si, ARM_BUILTIN_WUNPCKELSW);
--
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wmacs", di_ftype_di_v4hi_v4hi, ARM_BUILTIN_WMACS);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wmacsz", di_ftype_v4hi_v4hi, ARM_BUILTIN_WMACSZ);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wmacu", di_ftype_di_v4hi_v4hi, ARM_BUILTIN_WMACU);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wmacuz", di_ftype_v4hi_v4hi, ARM_BUILTIN_WMACUZ);
--
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_walign", v8qi_ftype_v8qi_v8qi_int, ARM_BUILTIN_WALIGN);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmia", di_ftype_di_int_int, ARM_BUILTIN_TMIA);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmiaph", di_ftype_di_int_int, ARM_BUILTIN_TMIAPH);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmiabb", di_ftype_di_int_int, ARM_BUILTIN_TMIABB);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmiabt", di_ftype_di_int_int, ARM_BUILTIN_TMIABT);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmiatb", di_ftype_di_int_int, ARM_BUILTIN_TMIATB);
-- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmiatt", di_ftype_di_int_int, ARM_BUILTIN_TMIATT);
--}
--
--static void
--arm_init_tls_builtins (void)
--{
-- tree ftype, decl;
--
-- ftype = build_function_type (ptr_type_node, void_list_node);
-- decl = add_builtin_function ("__builtin_thread_pointer", ftype,
-- ARM_BUILTIN_THREAD_POINTER, BUILT_IN_MD,
-- NULL, NULL_TREE);
-- TREE_NOTHROW (decl) = 1;
-- TREE_READONLY (decl) = 1;
--}
--
--enum neon_builtin_type_bits {
-- T_V8QI = 0x0001,
-- T_V4HI = 0x0002,
-- T_V2SI = 0x0004,
-- T_V2SF = 0x0008,
-- T_DI = 0x0010,
-- T_DREG = 0x001F,
-- T_V16QI = 0x0020,
-- T_V8HI = 0x0040,
-- T_V4SI = 0x0080,
-- T_V4SF = 0x0100,
-- T_V2DI = 0x0200,
-- T_TI = 0x0400,
-- T_QREG = 0x07E0,
-- T_EI = 0x0800,
-- T_OI = 0x1000
--};
-+typedef enum {
-+ T_V8QI,
-+ T_V4HI,
-+ T_V2SI,
-+ T_V2SF,
-+ T_DI,
-+ T_V16QI,
-+ T_V8HI,
-+ T_V4SI,
-+ T_V4SF,
-+ T_V2DI,
-+ T_TI,
-+ T_EI,
-+ T_OI,
-+ T_MAX /* Size of enum. Keep last. */
-+} neon_builtin_type_mode;
-+
-+#define TYPE_MODE_BIT(X) (1 << (X))
-+
-+#define TB_DREG (TYPE_MODE_BIT (T_V8QI) | TYPE_MODE_BIT (T_V4HI) \
-+ | TYPE_MODE_BIT (T_V2SI) | TYPE_MODE_BIT (T_V2SF) \
-+ | TYPE_MODE_BIT (T_DI))
-+#define TB_QREG (TYPE_MODE_BIT (T_V16QI) | TYPE_MODE_BIT (T_V8HI) \
-+ | TYPE_MODE_BIT (T_V4SI) | TYPE_MODE_BIT (T_V4SF) \
-+ | TYPE_MODE_BIT (T_V2DI) | TYPE_MODE_BIT (T_TI))
-
- #define v8qi_UP T_V8QI
- #define v4hi_UP T_V4HI
-@@ -18663,8 +18192,6 @@
-
- #define UP(X) X##_UP
-
--#define T_MAX 13
--
- typedef enum {
- NEON_BINOP,
- NEON_TERNOP,
-@@ -18708,49 +18235,42 @@
- typedef struct {
- const char *name;
- const neon_itype itype;
-- const int bits;
-- const enum insn_code codes[T_MAX];
-- const unsigned int num_vars;
-- unsigned int base_fcode;
-+ const neon_builtin_type_mode mode;
-+ const enum insn_code code;
-+ unsigned int fcode;
- } neon_builtin_datum;
-
- #define CF(N,X) CODE_FOR_neon_##N##X
-
- #define VAR1(T, N, A) \
-- #N, NEON_##T, UP (A), { CF (N, A) }, 1, 0
-+ {#N, NEON_##T, UP (A), CF (N, A), 0}
- #define VAR2(T, N, A, B) \
-- #N, NEON_##T, UP (A) | UP (B), { CF (N, A), CF (N, B) }, 2, 0
-+ VAR1 (T, N, A), \
-+ {#N, NEON_##T, UP (B), CF (N, B), 0}
- #define VAR3(T, N, A, B, C) \
-- #N, NEON_##T, UP (A) | UP (B) | UP (C), \
-- { CF (N, A), CF (N, B), CF (N, C) }, 3, 0
-+ VAR2 (T, N, A, B), \
-+ {#N, NEON_##T, UP (C), CF (N, C), 0}
- #define VAR4(T, N, A, B, C, D) \
-- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D), \
-- { CF (N, A), CF (N, B), CF (N, C), CF (N, D) }, 4, 0
-+ VAR3 (T, N, A, B, C), \
-+ {#N, NEON_##T, UP (D), CF (N, D), 0}
- #define VAR5(T, N, A, B, C, D, E) \
-- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E), \
-- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E) }, 5, 0
-+ VAR4 (T, N, A, B, C, D), \
-+ {#N, NEON_##T, UP (E), CF (N, E), 0}
- #define VAR6(T, N, A, B, C, D, E, F) \
-- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E) | UP (F), \
-- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E), CF (N, F) }, 6, 0
-+ VAR5 (T, N, A, B, C, D, E), \
-+ {#N, NEON_##T, UP (F), CF (N, F), 0}
- #define VAR7(T, N, A, B, C, D, E, F, G) \
-- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E) | UP (F) | UP (G), \
-- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E), CF (N, F), \
-- CF (N, G) }, 7, 0
-+ VAR6 (T, N, A, B, C, D, E, F), \
-+ {#N, NEON_##T, UP (G), CF (N, G), 0}
- #define VAR8(T, N, A, B, C, D, E, F, G, H) \
-- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E) | UP (F) | UP (G) \
-- | UP (H), \
-- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E), CF (N, F), \
-- CF (N, G), CF (N, H) }, 8, 0
-+ VAR7 (T, N, A, B, C, D, E, F, G), \
-+ {#N, NEON_##T, UP (H), CF (N, H), 0}
- #define VAR9(T, N, A, B, C, D, E, F, G, H, I) \
-- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E) | UP (F) | UP (G) \
-- | UP (H) | UP (I), \
-- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E), CF (N, F), \
-- CF (N, G), CF (N, H), CF (N, I) }, 9, 0
-+ VAR8 (T, N, A, B, C, D, E, F, G, H), \
-+ {#N, NEON_##T, UP (I), CF (N, I), 0}
- #define VAR10(T, N, A, B, C, D, E, F, G, H, I, J) \
-- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E) | UP (F) | UP (G) \
-- | UP (H) | UP (I) | UP (J), \
-- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E), CF (N, F), \
-- CF (N, G), CF (N, H), CF (N, I), CF (N, J) }, 10, 0
-+ VAR9 (T, N, A, B, C, D, E, F, G, H, I), \
-+ {#N, NEON_##T, UP (J), CF (N, J), 0}
-
- /* The mode entries in the following table correspond to the "key" type of the
- instruction variant, i.e. equivalent to that which would be specified after
-@@ -18758,192 +18278,190 @@
- (Signed/unsigned/polynomial types are not differentiated between though, and
- are all mapped onto the same mode for a given element size.) The modes
- listed per instruction should be the same as those defined for that
-- instruction's pattern in neon.md.
-- WARNING: Variants should be listed in the same increasing order as
-- neon_builtin_type_bits. */
-+ instruction's pattern in neon.md. */
-
- static neon_builtin_datum neon_builtin_data[] =
- {
-- { VAR10 (BINOP, vadd,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR3 (BINOP, vaddl, v8qi, v4hi, v2si) },
-- { VAR3 (BINOP, vaddw, v8qi, v4hi, v2si) },
-- { VAR6 (BINOP, vhadd, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
-- { VAR8 (BINOP, vqadd, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
-- { VAR3 (BINOP, vaddhn, v8hi, v4si, v2di) },
-- { VAR8 (BINOP, vmul, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
-- { VAR8 (TERNOP, vmla, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
-- { VAR3 (TERNOP, vmlal, v8qi, v4hi, v2si) },
-- { VAR8 (TERNOP, vmls, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
-- { VAR3 (TERNOP, vmlsl, v8qi, v4hi, v2si) },
-- { VAR4 (BINOP, vqdmulh, v4hi, v2si, v8hi, v4si) },
-- { VAR2 (TERNOP, vqdmlal, v4hi, v2si) },
-- { VAR2 (TERNOP, vqdmlsl, v4hi, v2si) },
-- { VAR3 (BINOP, vmull, v8qi, v4hi, v2si) },
-- { VAR2 (SCALARMULL, vmull_n, v4hi, v2si) },
-- { VAR2 (LANEMULL, vmull_lane, v4hi, v2si) },
-- { VAR2 (SCALARMULL, vqdmull_n, v4hi, v2si) },
-- { VAR2 (LANEMULL, vqdmull_lane, v4hi, v2si) },
-- { VAR4 (SCALARMULH, vqdmulh_n, v4hi, v2si, v8hi, v4si) },
-- { VAR4 (LANEMULH, vqdmulh_lane, v4hi, v2si, v8hi, v4si) },
-- { VAR2 (BINOP, vqdmull, v4hi, v2si) },
-- { VAR8 (BINOP, vshl, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
-- { VAR8 (BINOP, vqshl, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
-- { VAR8 (SHIFTIMM, vshr_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
-- { VAR3 (SHIFTIMM, vshrn_n, v8hi, v4si, v2di) },
-- { VAR3 (SHIFTIMM, vqshrn_n, v8hi, v4si, v2di) },
-- { VAR3 (SHIFTIMM, vqshrun_n, v8hi, v4si, v2di) },
-- { VAR8 (SHIFTIMM, vshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
-- { VAR8 (SHIFTIMM, vqshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
-- { VAR8 (SHIFTIMM, vqshlu_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
-- { VAR3 (SHIFTIMM, vshll_n, v8qi, v4hi, v2si) },
-- { VAR8 (SHIFTACC, vsra_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
-- { VAR10 (BINOP, vsub,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR3 (BINOP, vsubl, v8qi, v4hi, v2si) },
-- { VAR3 (BINOP, vsubw, v8qi, v4hi, v2si) },
-- { VAR8 (BINOP, vqsub, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
-- { VAR6 (BINOP, vhsub, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
-- { VAR3 (BINOP, vsubhn, v8hi, v4si, v2di) },
-- { VAR8 (BINOP, vceq, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
-- { VAR8 (BINOP, vcge, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
-- { VAR8 (BINOP, vcgt, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
-- { VAR2 (BINOP, vcage, v2sf, v4sf) },
-- { VAR2 (BINOP, vcagt, v2sf, v4sf) },
-- { VAR6 (BINOP, vtst, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
-- { VAR8 (BINOP, vabd, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
-- { VAR3 (BINOP, vabdl, v8qi, v4hi, v2si) },
-- { VAR6 (TERNOP, vaba, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
-- { VAR3 (TERNOP, vabal, v8qi, v4hi, v2si) },
-- { VAR8 (BINOP, vmax, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
-- { VAR8 (BINOP, vmin, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
-- { VAR4 (BINOP, vpadd, v8qi, v4hi, v2si, v2sf) },
-- { VAR6 (UNOP, vpaddl, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
-- { VAR6 (BINOP, vpadal, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
-- { VAR4 (BINOP, vpmax, v8qi, v4hi, v2si, v2sf) },
-- { VAR4 (BINOP, vpmin, v8qi, v4hi, v2si, v2sf) },
-- { VAR2 (BINOP, vrecps, v2sf, v4sf) },
-- { VAR2 (BINOP, vrsqrts, v2sf, v4sf) },
-- { VAR8 (SHIFTINSERT, vsri_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
-- { VAR8 (SHIFTINSERT, vsli_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
-- { VAR8 (UNOP, vabs, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
-- { VAR6 (UNOP, vqabs, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
-- { VAR8 (UNOP, vneg, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
-- { VAR6 (UNOP, vqneg, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
-- { VAR6 (UNOP, vcls, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
-- { VAR6 (UNOP, vclz, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
-- { VAR2 (UNOP, vcnt, v8qi, v16qi) },
-- { VAR4 (UNOP, vrecpe, v2si, v2sf, v4si, v4sf) },
-- { VAR4 (UNOP, vrsqrte, v2si, v2sf, v4si, v4sf) },
-- { VAR6 (UNOP, vmvn, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
-+ VAR10 (BINOP, vadd,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR3 (BINOP, vaddl, v8qi, v4hi, v2si),
-+ VAR3 (BINOP, vaddw, v8qi, v4hi, v2si),
-+ VAR6 (BINOP, vhadd, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
-+ VAR8 (BINOP, vqadd, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
-+ VAR3 (BINOP, vaddhn, v8hi, v4si, v2di),
-+ VAR8 (BINOP, vmul, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
-+ VAR8 (TERNOP, vmla, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
-+ VAR3 (TERNOP, vmlal, v8qi, v4hi, v2si),
-+ VAR8 (TERNOP, vmls, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
-+ VAR3 (TERNOP, vmlsl, v8qi, v4hi, v2si),
-+ VAR4 (BINOP, vqdmulh, v4hi, v2si, v8hi, v4si),
-+ VAR2 (TERNOP, vqdmlal, v4hi, v2si),
-+ VAR2 (TERNOP, vqdmlsl, v4hi, v2si),
-+ VAR3 (BINOP, vmull, v8qi, v4hi, v2si),
-+ VAR2 (SCALARMULL, vmull_n, v4hi, v2si),
-+ VAR2 (LANEMULL, vmull_lane, v4hi, v2si),
-+ VAR2 (SCALARMULL, vqdmull_n, v4hi, v2si),
-+ VAR2 (LANEMULL, vqdmull_lane, v4hi, v2si),
-+ VAR4 (SCALARMULH, vqdmulh_n, v4hi, v2si, v8hi, v4si),
-+ VAR4 (LANEMULH, vqdmulh_lane, v4hi, v2si, v8hi, v4si),
-+ VAR2 (BINOP, vqdmull, v4hi, v2si),
-+ VAR8 (BINOP, vshl, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
-+ VAR8 (BINOP, vqshl, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
-+ VAR8 (SHIFTIMM, vshr_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
-+ VAR3 (SHIFTIMM, vshrn_n, v8hi, v4si, v2di),
-+ VAR3 (SHIFTIMM, vqshrn_n, v8hi, v4si, v2di),
-+ VAR3 (SHIFTIMM, vqshrun_n, v8hi, v4si, v2di),
-+ VAR8 (SHIFTIMM, vshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
-+ VAR8 (SHIFTIMM, vqshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
-+ VAR8 (SHIFTIMM, vqshlu_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
-+ VAR3 (SHIFTIMM, vshll_n, v8qi, v4hi, v2si),
-+ VAR8 (SHIFTACC, vsra_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
-+ VAR10 (BINOP, vsub,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR3 (BINOP, vsubl, v8qi, v4hi, v2si),
-+ VAR3 (BINOP, vsubw, v8qi, v4hi, v2si),
-+ VAR8 (BINOP, vqsub, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
-+ VAR6 (BINOP, vhsub, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
-+ VAR3 (BINOP, vsubhn, v8hi, v4si, v2di),
-+ VAR8 (BINOP, vceq, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
-+ VAR8 (BINOP, vcge, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
-+ VAR8 (BINOP, vcgt, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
-+ VAR2 (BINOP, vcage, v2sf, v4sf),
-+ VAR2 (BINOP, vcagt, v2sf, v4sf),
-+ VAR6 (BINOP, vtst, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
-+ VAR8 (BINOP, vabd, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
-+ VAR3 (BINOP, vabdl, v8qi, v4hi, v2si),
-+ VAR6 (TERNOP, vaba, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
-+ VAR3 (TERNOP, vabal, v8qi, v4hi, v2si),
-+ VAR8 (BINOP, vmax, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
-+ VAR8 (BINOP, vmin, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
-+ VAR4 (BINOP, vpadd, v8qi, v4hi, v2si, v2sf),
-+ VAR6 (UNOP, vpaddl, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
-+ VAR6 (BINOP, vpadal, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
-+ VAR4 (BINOP, vpmax, v8qi, v4hi, v2si, v2sf),
-+ VAR4 (BINOP, vpmin, v8qi, v4hi, v2si, v2sf),
-+ VAR2 (BINOP, vrecps, v2sf, v4sf),
-+ VAR2 (BINOP, vrsqrts, v2sf, v4sf),
-+ VAR8 (SHIFTINSERT, vsri_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
-+ VAR8 (SHIFTINSERT, vsli_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
-+ VAR8 (UNOP, vabs, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
-+ VAR6 (UNOP, vqabs, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
-+ VAR8 (UNOP, vneg, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
-+ VAR6 (UNOP, vqneg, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
-+ VAR6 (UNOP, vcls, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
-+ VAR6 (UNOP, vclz, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
-+ VAR2 (UNOP, vcnt, v8qi, v16qi),
-+ VAR4 (UNOP, vrecpe, v2si, v2sf, v4si, v4sf),
-+ VAR4 (UNOP, vrsqrte, v2si, v2sf, v4si, v4sf),
-+ VAR6 (UNOP, vmvn, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
- /* FIXME: vget_lane supports more variants than this! */
-- { VAR10 (GETLANE, vget_lane,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR10 (SETLANE, vset_lane,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR5 (CREATE, vcreate, v8qi, v4hi, v2si, v2sf, di) },
-- { VAR10 (DUP, vdup_n,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR10 (DUPLANE, vdup_lane,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR5 (COMBINE, vcombine, v8qi, v4hi, v2si, v2sf, di) },
-- { VAR5 (SPLIT, vget_high, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR5 (SPLIT, vget_low, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR3 (UNOP, vmovn, v8hi, v4si, v2di) },
-- { VAR3 (UNOP, vqmovn, v8hi, v4si, v2di) },
-- { VAR3 (UNOP, vqmovun, v8hi, v4si, v2di) },
-- { VAR3 (UNOP, vmovl, v8qi, v4hi, v2si) },
-- { VAR6 (LANEMUL, vmul_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
-- { VAR6 (LANEMAC, vmla_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
-- { VAR2 (LANEMAC, vmlal_lane, v4hi, v2si) },
-- { VAR2 (LANEMAC, vqdmlal_lane, v4hi, v2si) },
-- { VAR6 (LANEMAC, vmls_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
-- { VAR2 (LANEMAC, vmlsl_lane, v4hi, v2si) },
-- { VAR2 (LANEMAC, vqdmlsl_lane, v4hi, v2si) },
-- { VAR6 (SCALARMUL, vmul_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
-- { VAR6 (SCALARMAC, vmla_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
-- { VAR2 (SCALARMAC, vmlal_n, v4hi, v2si) },
-- { VAR2 (SCALARMAC, vqdmlal_n, v4hi, v2si) },
-- { VAR6 (SCALARMAC, vmls_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
-- { VAR2 (SCALARMAC, vmlsl_n, v4hi, v2si) },
-- { VAR2 (SCALARMAC, vqdmlsl_n, v4hi, v2si) },
-- { VAR10 (BINOP, vext,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR8 (UNOP, vrev64, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
-- { VAR4 (UNOP, vrev32, v8qi, v4hi, v16qi, v8hi) },
-- { VAR2 (UNOP, vrev16, v8qi, v16qi) },
-- { VAR4 (CONVERT, vcvt, v2si, v2sf, v4si, v4sf) },
-- { VAR4 (FIXCONV, vcvt_n, v2si, v2sf, v4si, v4sf) },
-- { VAR10 (SELECT, vbsl,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR1 (VTBL, vtbl1, v8qi) },
-- { VAR1 (VTBL, vtbl2, v8qi) },
-- { VAR1 (VTBL, vtbl3, v8qi) },
-- { VAR1 (VTBL, vtbl4, v8qi) },
-- { VAR1 (VTBX, vtbx1, v8qi) },
-- { VAR1 (VTBX, vtbx2, v8qi) },
-- { VAR1 (VTBX, vtbx3, v8qi) },
-- { VAR1 (VTBX, vtbx4, v8qi) },
-- { VAR8 (RESULTPAIR, vtrn, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
-- { VAR8 (RESULTPAIR, vzip, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
-- { VAR8 (RESULTPAIR, vuzp, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
-- { VAR5 (REINTERP, vreinterpretv8qi, v8qi, v4hi, v2si, v2sf, di) },
-- { VAR5 (REINTERP, vreinterpretv4hi, v8qi, v4hi, v2si, v2sf, di) },
-- { VAR5 (REINTERP, vreinterpretv2si, v8qi, v4hi, v2si, v2sf, di) },
-- { VAR5 (REINTERP, vreinterpretv2sf, v8qi, v4hi, v2si, v2sf, di) },
-- { VAR5 (REINTERP, vreinterpretdi, v8qi, v4hi, v2si, v2sf, di) },
-- { VAR5 (REINTERP, vreinterpretv16qi, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR5 (REINTERP, vreinterpretv8hi, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR5 (REINTERP, vreinterpretv4si, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR5 (REINTERP, vreinterpretv4sf, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR5 (REINTERP, vreinterpretv2di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR10 (LOAD1, vld1,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR10 (LOAD1LANE, vld1_lane,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR10 (LOAD1, vld1_dup,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR10 (STORE1, vst1,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR10 (STORE1LANE, vst1_lane,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR9 (LOADSTRUCT,
-- vld2, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
-- { VAR7 (LOADSTRUCTLANE, vld2_lane,
-- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
-- { VAR5 (LOADSTRUCT, vld2_dup, v8qi, v4hi, v2si, v2sf, di) },
-- { VAR9 (STORESTRUCT, vst2,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
-- { VAR7 (STORESTRUCTLANE, vst2_lane,
-- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
-- { VAR9 (LOADSTRUCT,
-- vld3, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
-- { VAR7 (LOADSTRUCTLANE, vld3_lane,
-- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
-- { VAR5 (LOADSTRUCT, vld3_dup, v8qi, v4hi, v2si, v2sf, di) },
-- { VAR9 (STORESTRUCT, vst3,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
-- { VAR7 (STORESTRUCTLANE, vst3_lane,
-- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
-- { VAR9 (LOADSTRUCT, vld4,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
-- { VAR7 (LOADSTRUCTLANE, vld4_lane,
-- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
-- { VAR5 (LOADSTRUCT, vld4_dup, v8qi, v4hi, v2si, v2sf, di) },
-- { VAR9 (STORESTRUCT, vst4,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
-- { VAR7 (STORESTRUCTLANE, vst4_lane,
-- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
-- { VAR10 (LOGICBINOP, vand,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR10 (LOGICBINOP, vorr,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR10 (BINOP, veor,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR10 (LOGICBINOP, vbic,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
-- { VAR10 (LOGICBINOP, vorn,
-- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) }
-+ VAR10 (GETLANE, vget_lane,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR10 (SETLANE, vset_lane,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR5 (CREATE, vcreate, v8qi, v4hi, v2si, v2sf, di),
-+ VAR10 (DUP, vdup_n,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR10 (DUPLANE, vdup_lane,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR5 (COMBINE, vcombine, v8qi, v4hi, v2si, v2sf, di),
-+ VAR5 (SPLIT, vget_high, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR5 (SPLIT, vget_low, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR3 (UNOP, vmovn, v8hi, v4si, v2di),
-+ VAR3 (UNOP, vqmovn, v8hi, v4si, v2di),
-+ VAR3 (UNOP, vqmovun, v8hi, v4si, v2di),
-+ VAR3 (UNOP, vmovl, v8qi, v4hi, v2si),
-+ VAR6 (LANEMUL, vmul_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
-+ VAR6 (LANEMAC, vmla_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
-+ VAR2 (LANEMAC, vmlal_lane, v4hi, v2si),
-+ VAR2 (LANEMAC, vqdmlal_lane, v4hi, v2si),
-+ VAR6 (LANEMAC, vmls_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
-+ VAR2 (LANEMAC, vmlsl_lane, v4hi, v2si),
-+ VAR2 (LANEMAC, vqdmlsl_lane, v4hi, v2si),
-+ VAR6 (SCALARMUL, vmul_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
-+ VAR6 (SCALARMAC, vmla_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
-+ VAR2 (SCALARMAC, vmlal_n, v4hi, v2si),
-+ VAR2 (SCALARMAC, vqdmlal_n, v4hi, v2si),
-+ VAR6 (SCALARMAC, vmls_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
-+ VAR2 (SCALARMAC, vmlsl_n, v4hi, v2si),
-+ VAR2 (SCALARMAC, vqdmlsl_n, v4hi, v2si),
-+ VAR10 (BINOP, vext,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR8 (UNOP, vrev64, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
-+ VAR4 (UNOP, vrev32, v8qi, v4hi, v16qi, v8hi),
-+ VAR2 (UNOP, vrev16, v8qi, v16qi),
-+ VAR4 (CONVERT, vcvt, v2si, v2sf, v4si, v4sf),
-+ VAR4 (FIXCONV, vcvt_n, v2si, v2sf, v4si, v4sf),
-+ VAR10 (SELECT, vbsl,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR1 (VTBL, vtbl1, v8qi),
-+ VAR1 (VTBL, vtbl2, v8qi),
-+ VAR1 (VTBL, vtbl3, v8qi),
-+ VAR1 (VTBL, vtbl4, v8qi),
-+ VAR1 (VTBX, vtbx1, v8qi),
-+ VAR1 (VTBX, vtbx2, v8qi),
-+ VAR1 (VTBX, vtbx3, v8qi),
-+ VAR1 (VTBX, vtbx4, v8qi),
-+ VAR8 (RESULTPAIR, vtrn, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
-+ VAR8 (RESULTPAIR, vzip, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
-+ VAR8 (RESULTPAIR, vuzp, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
-+ VAR5 (REINTERP, vreinterpretv8qi, v8qi, v4hi, v2si, v2sf, di),
-+ VAR5 (REINTERP, vreinterpretv4hi, v8qi, v4hi, v2si, v2sf, di),
-+ VAR5 (REINTERP, vreinterpretv2si, v8qi, v4hi, v2si, v2sf, di),
-+ VAR5 (REINTERP, vreinterpretv2sf, v8qi, v4hi, v2si, v2sf, di),
-+ VAR5 (REINTERP, vreinterpretdi, v8qi, v4hi, v2si, v2sf, di),
-+ VAR5 (REINTERP, vreinterpretv16qi, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR5 (REINTERP, vreinterpretv8hi, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR5 (REINTERP, vreinterpretv4si, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR5 (REINTERP, vreinterpretv4sf, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR5 (REINTERP, vreinterpretv2di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR10 (LOAD1, vld1,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR10 (LOAD1LANE, vld1_lane,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR10 (LOAD1, vld1_dup,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR10 (STORE1, vst1,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR10 (STORE1LANE, vst1_lane,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR9 (LOADSTRUCT,
-+ vld2, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
-+ VAR7 (LOADSTRUCTLANE, vld2_lane,
-+ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
-+ VAR5 (LOADSTRUCT, vld2_dup, v8qi, v4hi, v2si, v2sf, di),
-+ VAR9 (STORESTRUCT, vst2,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
-+ VAR7 (STORESTRUCTLANE, vst2_lane,
-+ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
-+ VAR9 (LOADSTRUCT,
-+ vld3, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
-+ VAR7 (LOADSTRUCTLANE, vld3_lane,
-+ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
-+ VAR5 (LOADSTRUCT, vld3_dup, v8qi, v4hi, v2si, v2sf, di),
-+ VAR9 (STORESTRUCT, vst3,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
-+ VAR7 (STORESTRUCTLANE, vst3_lane,
-+ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
-+ VAR9 (LOADSTRUCT, vld4,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
-+ VAR7 (LOADSTRUCTLANE, vld4_lane,
-+ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
-+ VAR5 (LOADSTRUCT, vld4_dup, v8qi, v4hi, v2si, v2sf, di),
-+ VAR9 (STORESTRUCT, vst4,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
-+ VAR7 (STORESTRUCTLANE, vst4_lane,
-+ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
-+ VAR10 (LOGICBINOP, vand,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR10 (LOGICBINOP, vorr,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR10 (BINOP, veor,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR10 (LOGICBINOP, vbic,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
-+ VAR10 (LOGICBINOP, vorn,
-+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di)
- };
-
- #undef CF
-@@ -18958,10 +18476,185 @@
- #undef VAR9
- #undef VAR10
-
-+/* Neon defines builtins from ARM_BUILTIN_MAX upwards, though they don't have
-+ symbolic names defined here (which would require too much duplication).
-+ FIXME? */
-+enum arm_builtins
-+{
-+ ARM_BUILTIN_GETWCX,
-+ ARM_BUILTIN_SETWCX,
-+
-+ ARM_BUILTIN_WZERO,
-+
-+ ARM_BUILTIN_WAVG2BR,
-+ ARM_BUILTIN_WAVG2HR,
-+ ARM_BUILTIN_WAVG2B,
-+ ARM_BUILTIN_WAVG2H,
-+
-+ ARM_BUILTIN_WACCB,
-+ ARM_BUILTIN_WACCH,
-+ ARM_BUILTIN_WACCW,
-+
-+ ARM_BUILTIN_WMACS,
-+ ARM_BUILTIN_WMACSZ,
-+ ARM_BUILTIN_WMACU,
-+ ARM_BUILTIN_WMACUZ,
-+
-+ ARM_BUILTIN_WSADB,
-+ ARM_BUILTIN_WSADBZ,
-+ ARM_BUILTIN_WSADH,
-+ ARM_BUILTIN_WSADHZ,
-+
-+ ARM_BUILTIN_WALIGN,
-+
-+ ARM_BUILTIN_TMIA,
-+ ARM_BUILTIN_TMIAPH,
-+ ARM_BUILTIN_TMIABB,
-+ ARM_BUILTIN_TMIABT,
-+ ARM_BUILTIN_TMIATB,
-+ ARM_BUILTIN_TMIATT,
-+
-+ ARM_BUILTIN_TMOVMSKB,
-+ ARM_BUILTIN_TMOVMSKH,
-+ ARM_BUILTIN_TMOVMSKW,
-+
-+ ARM_BUILTIN_TBCSTB,
-+ ARM_BUILTIN_TBCSTH,
-+ ARM_BUILTIN_TBCSTW,
-+
-+ ARM_BUILTIN_WMADDS,
-+ ARM_BUILTIN_WMADDU,
-+
-+ ARM_BUILTIN_WPACKHSS,
-+ ARM_BUILTIN_WPACKWSS,
-+ ARM_BUILTIN_WPACKDSS,
-+ ARM_BUILTIN_WPACKHUS,
-+ ARM_BUILTIN_WPACKWUS,
-+ ARM_BUILTIN_WPACKDUS,
-+
-+ ARM_BUILTIN_WADDB,
-+ ARM_BUILTIN_WADDH,
-+ ARM_BUILTIN_WADDW,
-+ ARM_BUILTIN_WADDSSB,
-+ ARM_BUILTIN_WADDSSH,
-+ ARM_BUILTIN_WADDSSW,
-+ ARM_BUILTIN_WADDUSB,
-+ ARM_BUILTIN_WADDUSH,
-+ ARM_BUILTIN_WADDUSW,
-+ ARM_BUILTIN_WSUBB,
-+ ARM_BUILTIN_WSUBH,
-+ ARM_BUILTIN_WSUBW,
-+ ARM_BUILTIN_WSUBSSB,
-+ ARM_BUILTIN_WSUBSSH,
-+ ARM_BUILTIN_WSUBSSW,
-+ ARM_BUILTIN_WSUBUSB,
-+ ARM_BUILTIN_WSUBUSH,
-+ ARM_BUILTIN_WSUBUSW,
-+
-+ ARM_BUILTIN_WAND,
-+ ARM_BUILTIN_WANDN,
-+ ARM_BUILTIN_WOR,
-+ ARM_BUILTIN_WXOR,
-+
-+ ARM_BUILTIN_WCMPEQB,
-+ ARM_BUILTIN_WCMPEQH,
-+ ARM_BUILTIN_WCMPEQW,
-+ ARM_BUILTIN_WCMPGTUB,
-+ ARM_BUILTIN_WCMPGTUH,
-+ ARM_BUILTIN_WCMPGTUW,
-+ ARM_BUILTIN_WCMPGTSB,
-+ ARM_BUILTIN_WCMPGTSH,
-+ ARM_BUILTIN_WCMPGTSW,
-+
-+ ARM_BUILTIN_TEXTRMSB,
-+ ARM_BUILTIN_TEXTRMSH,
-+ ARM_BUILTIN_TEXTRMSW,
-+ ARM_BUILTIN_TEXTRMUB,
-+ ARM_BUILTIN_TEXTRMUH,
-+ ARM_BUILTIN_TEXTRMUW,
-+ ARM_BUILTIN_TINSRB,
-+ ARM_BUILTIN_TINSRH,
-+ ARM_BUILTIN_TINSRW,
-+
-+ ARM_BUILTIN_WMAXSW,
-+ ARM_BUILTIN_WMAXSH,
-+ ARM_BUILTIN_WMAXSB,
-+ ARM_BUILTIN_WMAXUW,
-+ ARM_BUILTIN_WMAXUH,
-+ ARM_BUILTIN_WMAXUB,
-+ ARM_BUILTIN_WMINSW,
-+ ARM_BUILTIN_WMINSH,
-+ ARM_BUILTIN_WMINSB,
-+ ARM_BUILTIN_WMINUW,
-+ ARM_BUILTIN_WMINUH,
-+ ARM_BUILTIN_WMINUB,
-+
-+ ARM_BUILTIN_WMULUM,
-+ ARM_BUILTIN_WMULSM,
-+ ARM_BUILTIN_WMULUL,
-+
-+ ARM_BUILTIN_PSADBH,
-+ ARM_BUILTIN_WSHUFH,
-+
-+ ARM_BUILTIN_WSLLH,
-+ ARM_BUILTIN_WSLLW,
-+ ARM_BUILTIN_WSLLD,
-+ ARM_BUILTIN_WSRAH,
-+ ARM_BUILTIN_WSRAW,
-+ ARM_BUILTIN_WSRAD,
-+ ARM_BUILTIN_WSRLH,
-+ ARM_BUILTIN_WSRLW,
-+ ARM_BUILTIN_WSRLD,
-+ ARM_BUILTIN_WRORH,
-+ ARM_BUILTIN_WRORW,
-+ ARM_BUILTIN_WRORD,
-+ ARM_BUILTIN_WSLLHI,
-+ ARM_BUILTIN_WSLLWI,
-+ ARM_BUILTIN_WSLLDI,
-+ ARM_BUILTIN_WSRAHI,
-+ ARM_BUILTIN_WSRAWI,
-+ ARM_BUILTIN_WSRADI,
-+ ARM_BUILTIN_WSRLHI,
-+ ARM_BUILTIN_WSRLWI,
-+ ARM_BUILTIN_WSRLDI,
-+ ARM_BUILTIN_WRORHI,
-+ ARM_BUILTIN_WRORWI,
-+ ARM_BUILTIN_WRORDI,
-+
-+ ARM_BUILTIN_WUNPCKIHB,
-+ ARM_BUILTIN_WUNPCKIHH,
-+ ARM_BUILTIN_WUNPCKIHW,
-+ ARM_BUILTIN_WUNPCKILB,
-+ ARM_BUILTIN_WUNPCKILH,
-+ ARM_BUILTIN_WUNPCKILW,
-+
-+ ARM_BUILTIN_WUNPCKEHSB,
-+ ARM_BUILTIN_WUNPCKEHSH,
-+ ARM_BUILTIN_WUNPCKEHSW,
-+ ARM_BUILTIN_WUNPCKEHUB,
-+ ARM_BUILTIN_WUNPCKEHUH,
-+ ARM_BUILTIN_WUNPCKEHUW,
-+ ARM_BUILTIN_WUNPCKELSB,
-+ ARM_BUILTIN_WUNPCKELSH,
-+ ARM_BUILTIN_WUNPCKELSW,
-+ ARM_BUILTIN_WUNPCKELUB,
-+ ARM_BUILTIN_WUNPCKELUH,
-+ ARM_BUILTIN_WUNPCKELUW,
-+
-+ ARM_BUILTIN_THREAD_POINTER,
-+
-+ ARM_BUILTIN_NEON_BASE,
-+
-+ ARM_BUILTIN_MAX = ARM_BUILTIN_NEON_BASE + ARRAY_SIZE (neon_builtin_data)
-+};
-+
-+static GTY(()) tree arm_builtin_decls[ARM_BUILTIN_MAX];
-+
- static void
- arm_init_neon_builtins (void)
- {
-- unsigned int i, fcode = ARM_BUILTIN_NEON_BASE;
-+ unsigned int i, fcode;
-+ tree decl;
-
- tree neon_intQI_type_node;
- tree neon_intHI_type_node;
-@@ -19209,250 +18902,740 @@
- }
- }
-
-- for (i = 0; i < ARRAY_SIZE (neon_builtin_data); i++)
-+ for (i = 0, fcode = ARM_BUILTIN_NEON_BASE;
-+ i < ARRAY_SIZE (neon_builtin_data);
-+ i++, fcode++)
- {
- neon_builtin_datum *d = &neon_builtin_data[i];
-- unsigned int j, codeidx = 0;
--
-- d->base_fcode = fcode;
--
-- for (j = 0; j < T_MAX; j++)
-- {
-- const char* const modenames[] = {
-- "v8qi", "v4hi", "v2si", "v2sf", "di",
-- "v16qi", "v8hi", "v4si", "v4sf", "v2di"
-- };
-- char namebuf[60];
-- tree ftype = NULL;
-- enum insn_code icode;
-- int is_load = 0, is_store = 0;
--
-- if ((d->bits & (1 << j)) == 0)
-- continue;
--
-- icode = d->codes[codeidx++];
--
-- switch (d->itype)
-- {
-- case NEON_LOAD1:
-- case NEON_LOAD1LANE:
-- case NEON_LOADSTRUCT:
-- case NEON_LOADSTRUCTLANE:
-- is_load = 1;
-- /* Fall through. */
-- case NEON_STORE1:
-- case NEON_STORE1LANE:
-- case NEON_STORESTRUCT:
-- case NEON_STORESTRUCTLANE:
-- if (!is_load)
-- is_store = 1;
-- /* Fall through. */
-- case NEON_UNOP:
-- case NEON_BINOP:
-- case NEON_LOGICBINOP:
-- case NEON_SHIFTINSERT:
-- case NEON_TERNOP:
-- case NEON_GETLANE:
-- case NEON_SETLANE:
-- case NEON_CREATE:
-- case NEON_DUP:
-- case NEON_DUPLANE:
-- case NEON_SHIFTIMM:
-- case NEON_SHIFTACC:
-- case NEON_COMBINE:
-- case NEON_SPLIT:
-- case NEON_CONVERT:
-- case NEON_FIXCONV:
-- case NEON_LANEMUL:
-- case NEON_LANEMULL:
-- case NEON_LANEMULH:
-- case NEON_LANEMAC:
-- case NEON_SCALARMUL:
-- case NEON_SCALARMULL:
-- case NEON_SCALARMULH:
-- case NEON_SCALARMAC:
-- case NEON_SELECT:
-- case NEON_VTBL:
-- case NEON_VTBX:
-- {
-- int k;
-- tree return_type = void_type_node, args = void_list_node;
--
-- /* Build a function type directly from the insn_data for this
-- builtin. The build_function_type() function takes care of
-- removing duplicates for us. */
-- for (k = insn_data[icode].n_operands - 1; k >= 0; k--)
-- {
-- tree eltype;
--
-- if (is_load && k == 1)
-- {
-- /* Neon load patterns always have the memory operand
-- in the operand 1 position. */
-- gcc_assert (insn_data[icode].operand[k].predicate
-- == neon_struct_operand);
--
-- switch (1 << j)
-- {
-- case T_V8QI:
-- case T_V16QI:
-- eltype = const_intQI_pointer_node;
-- break;
--
-- case T_V4HI:
-- case T_V8HI:
-- eltype = const_intHI_pointer_node;
-- break;
--
-- case T_V2SI:
-- case T_V4SI:
-- eltype = const_intSI_pointer_node;
-- break;
--
-- case T_V2SF:
-- case T_V4SF:
-- eltype = const_float_pointer_node;
-- break;
--
-- case T_DI:
-- case T_V2DI:
-- eltype = const_intDI_pointer_node;
-- break;
--
-- default: gcc_unreachable ();
-- }
-- }
-- else if (is_store && k == 0)
-- {
-- /* Similarly, Neon store patterns use operand 0 as
-- the memory location to store to. */
-- gcc_assert (insn_data[icode].operand[k].predicate
-- == neon_struct_operand);
--
-- switch (1 << j)
-- {
-- case T_V8QI:
-- case T_V16QI:
-- eltype = intQI_pointer_node;
-- break;
--
-- case T_V4HI:
-- case T_V8HI:
-- eltype = intHI_pointer_node;
-- break;
--
-- case T_V2SI:
-- case T_V4SI:
-- eltype = intSI_pointer_node;
-- break;
--
-- case T_V2SF:
-- case T_V4SF:
-- eltype = float_pointer_node;
-- break;
--
-- case T_DI:
-- case T_V2DI:
-- eltype = intDI_pointer_node;
-- break;
--
-- default: gcc_unreachable ();
-- }
-- }
-- else
-- {
-- switch (insn_data[icode].operand[k].mode)
-- {
-- case VOIDmode: eltype = void_type_node; break;
-- /* Scalars. */
-- case QImode: eltype = neon_intQI_type_node; break;
-- case HImode: eltype = neon_intHI_type_node; break;
-- case SImode: eltype = neon_intSI_type_node; break;
-- case SFmode: eltype = neon_float_type_node; break;
-- case DImode: eltype = neon_intDI_type_node; break;
-- case TImode: eltype = intTI_type_node; break;
-- case EImode: eltype = intEI_type_node; break;
-- case OImode: eltype = intOI_type_node; break;
-- case CImode: eltype = intCI_type_node; break;
-- case XImode: eltype = intXI_type_node; break;
-- /* 64-bit vectors. */
-- case V8QImode: eltype = V8QI_type_node; break;
-- case V4HImode: eltype = V4HI_type_node; break;
-- case V2SImode: eltype = V2SI_type_node; break;
-- case V2SFmode: eltype = V2SF_type_node; break;
-- /* 128-bit vectors. */
-- case V16QImode: eltype = V16QI_type_node; break;
-- case V8HImode: eltype = V8HI_type_node; break;
-- case V4SImode: eltype = V4SI_type_node; break;
-- case V4SFmode: eltype = V4SF_type_node; break;
-- case V2DImode: eltype = V2DI_type_node; break;
-- default: gcc_unreachable ();
-- }
-- }
--
-- if (k == 0 && !is_store)
-- return_type = eltype;
-- else
-- args = tree_cons (NULL_TREE, eltype, args);
-- }
--
-- ftype = build_function_type (return_type, args);
-- }
-- break;
--
-- case NEON_RESULTPAIR:
-- {
-- switch (insn_data[icode].operand[1].mode)
-- {
-- case V8QImode: ftype = void_ftype_pv8qi_v8qi_v8qi; break;
-- case V4HImode: ftype = void_ftype_pv4hi_v4hi_v4hi; break;
-- case V2SImode: ftype = void_ftype_pv2si_v2si_v2si; break;
-- case V2SFmode: ftype = void_ftype_pv2sf_v2sf_v2sf; break;
-- case DImode: ftype = void_ftype_pdi_di_di; break;
-- case V16QImode: ftype = void_ftype_pv16qi_v16qi_v16qi; break;
-- case V8HImode: ftype = void_ftype_pv8hi_v8hi_v8hi; break;
-- case V4SImode: ftype = void_ftype_pv4si_v4si_v4si; break;
-- case V4SFmode: ftype = void_ftype_pv4sf_v4sf_v4sf; break;
-- case V2DImode: ftype = void_ftype_pv2di_v2di_v2di; break;
-- default: gcc_unreachable ();
-- }
-- }
-- break;
--
-- case NEON_REINTERP:
-- {
-- /* We iterate over 5 doubleword types, then 5 quadword
-- types. */
-- int rhs = j % 5;
-- switch (insn_data[icode].operand[0].mode)
-- {
-- case V8QImode: ftype = reinterp_ftype_dreg[0][rhs]; break;
-- case V4HImode: ftype = reinterp_ftype_dreg[1][rhs]; break;
-- case V2SImode: ftype = reinterp_ftype_dreg[2][rhs]; break;
-- case V2SFmode: ftype = reinterp_ftype_dreg[3][rhs]; break;
-- case DImode: ftype = reinterp_ftype_dreg[4][rhs]; break;
-- case V16QImode: ftype = reinterp_ftype_qreg[0][rhs]; break;
-- case V8HImode: ftype = reinterp_ftype_qreg[1][rhs]; break;
-- case V4SImode: ftype = reinterp_ftype_qreg[2][rhs]; break;
-- case V4SFmode: ftype = reinterp_ftype_qreg[3][rhs]; break;
-- case V2DImode: ftype = reinterp_ftype_qreg[4][rhs]; break;
-- default: gcc_unreachable ();
-- }
-- }
-- break;
--
-- default:
-- gcc_unreachable ();
-- }
--
-- gcc_assert (ftype != NULL);
--
-- sprintf (namebuf, "__builtin_neon_%s%s", d->name, modenames[j]);
--
-- add_builtin_function (namebuf, ftype, fcode++, BUILT_IN_MD, NULL,
-- NULL_TREE);
-- }
-- }
-+
-+ const char* const modenames[] = {
-+ "v8qi", "v4hi", "v2si", "v2sf", "di",
-+ "v16qi", "v8hi", "v4si", "v4sf", "v2di",
-+ "ti", "ei", "oi"
-+ };
-+ char namebuf[60];
-+ tree ftype = NULL;
-+ int is_load = 0, is_store = 0;
-+
-+ gcc_assert (ARRAY_SIZE (modenames) == T_MAX);
-+
-+ d->fcode = fcode;
-+
-+ switch (d->itype)
-+ {
-+ case NEON_LOAD1:
-+ case NEON_LOAD1LANE:
-+ case NEON_LOADSTRUCT:
-+ case NEON_LOADSTRUCTLANE:
-+ is_load = 1;
-+ /* Fall through. */
-+ case NEON_STORE1:
-+ case NEON_STORE1LANE:
-+ case NEON_STORESTRUCT:
-+ case NEON_STORESTRUCTLANE:
-+ if (!is_load)
-+ is_store = 1;
-+ /* Fall through. */
-+ case NEON_UNOP:
-+ case NEON_BINOP:
-+ case NEON_LOGICBINOP:
-+ case NEON_SHIFTINSERT:
-+ case NEON_TERNOP:
-+ case NEON_GETLANE:
-+ case NEON_SETLANE:
-+ case NEON_CREATE:
-+ case NEON_DUP:
-+ case NEON_DUPLANE:
-+ case NEON_SHIFTIMM:
-+ case NEON_SHIFTACC:
-+ case NEON_COMBINE:
-+ case NEON_SPLIT:
-+ case NEON_CONVERT:
-+ case NEON_FIXCONV:
-+ case NEON_LANEMUL:
-+ case NEON_LANEMULL:
-+ case NEON_LANEMULH:
-+ case NEON_LANEMAC:
-+ case NEON_SCALARMUL:
-+ case NEON_SCALARMULL:
-+ case NEON_SCALARMULH:
-+ case NEON_SCALARMAC:
-+ case NEON_SELECT:
-+ case NEON_VTBL:
-+ case NEON_VTBX:
-+ {
-+ int k;
-+ tree return_type = void_type_node, args = void_list_node;
-+
-+ /* Build a function type directly from the insn_data for
-+ this builtin. The build_function_type() function takes
-+ care of removing duplicates for us. */
-+ for (k = insn_data[d->code].n_operands - 1; k >= 0; k--)
-+ {
-+ tree eltype;
-+
-+ if (is_load && k == 1)
-+ {
-+ /* Neon load patterns always have the memory
-+ operand in the operand 1 position. */
-+ gcc_assert (insn_data[d->code].operand[k].predicate
-+ == neon_struct_operand);
-+
-+ switch (d->mode)
-+ {
-+ case T_V8QI:
-+ case T_V16QI:
-+ eltype = const_intQI_pointer_node;
-+ break;
-+
-+ case T_V4HI:
-+ case T_V8HI:
-+ eltype = const_intHI_pointer_node;
-+ break;
-+
-+ case T_V2SI:
-+ case T_V4SI:
-+ eltype = const_intSI_pointer_node;
-+ break;
-+
-+ case T_V2SF:
-+ case T_V4SF:
-+ eltype = const_float_pointer_node;
-+ break;
-+
-+ case T_DI:
-+ case T_V2DI:
-+ eltype = const_intDI_pointer_node;
-+ break;
-+
-+ default: gcc_unreachable ();
-+ }
-+ }
-+ else if (is_store && k == 0)
-+ {
-+ /* Similarly, Neon store patterns use operand 0 as
-+ the memory location to store to. */
-+ gcc_assert (insn_data[d->code].operand[k].predicate
-+ == neon_struct_operand);
-+
-+ switch (d->mode)
-+ {
-+ case T_V8QI:
-+ case T_V16QI:
-+ eltype = intQI_pointer_node;
-+ break;
-+
-+ case T_V4HI:
-+ case T_V8HI:
-+ eltype = intHI_pointer_node;
-+ break;
-+
-+ case T_V2SI:
-+ case T_V4SI:
-+ eltype = intSI_pointer_node;
-+ break;
-+
-+ case T_V2SF:
-+ case T_V4SF:
-+ eltype = float_pointer_node;
-+ break;
-+
-+ case T_DI:
-+ case T_V2DI:
-+ eltype = intDI_pointer_node;
-+ break;
-+
-+ default: gcc_unreachable ();
-+ }
-+ }
-+ else
-+ {
-+ switch (insn_data[d->code].operand[k].mode)
-+ {
-+ case VOIDmode: eltype = void_type_node; break;
-+ /* Scalars. */
-+ case QImode: eltype = neon_intQI_type_node; break;
-+ case HImode: eltype = neon_intHI_type_node; break;
-+ case SImode: eltype = neon_intSI_type_node; break;
-+ case SFmode: eltype = neon_float_type_node; break;
-+ case DImode: eltype = neon_intDI_type_node; break;
-+ case TImode: eltype = intTI_type_node; break;
-+ case EImode: eltype = intEI_type_node; break;
-+ case OImode: eltype = intOI_type_node; break;
-+ case CImode: eltype = intCI_type_node; break;
-+ case XImode: eltype = intXI_type_node; break;
-+ /* 64-bit vectors. */
-+ case V8QImode: eltype = V8QI_type_node; break;
-+ case V4HImode: eltype = V4HI_type_node; break;
-+ case V2SImode: eltype = V2SI_type_node; break;
-+ case V2SFmode: eltype = V2SF_type_node; break;
-+ /* 128-bit vectors. */
-+ case V16QImode: eltype = V16QI_type_node; break;
-+ case V8HImode: eltype = V8HI_type_node; break;
-+ case V4SImode: eltype = V4SI_type_node; break;
-+ case V4SFmode: eltype = V4SF_type_node; break;
-+ case V2DImode: eltype = V2DI_type_node; break;
-+ default: gcc_unreachable ();
-+ }
-+ }
-+
-+ if (k == 0 && !is_store)
-+ return_type = eltype;
-+ else
-+ args = tree_cons (NULL_TREE, eltype, args);
-+ }
-+
-+ ftype = build_function_type (return_type, args);
-+ }
-+ break;
-+
-+ case NEON_RESULTPAIR:
-+ {
-+ switch (insn_data[d->code].operand[1].mode)
-+ {
-+ case V8QImode: ftype = void_ftype_pv8qi_v8qi_v8qi; break;
-+ case V4HImode: ftype = void_ftype_pv4hi_v4hi_v4hi; break;
-+ case V2SImode: ftype = void_ftype_pv2si_v2si_v2si; break;
-+ case V2SFmode: ftype = void_ftype_pv2sf_v2sf_v2sf; break;
-+ case DImode: ftype = void_ftype_pdi_di_di; break;
-+ case V16QImode: ftype = void_ftype_pv16qi_v16qi_v16qi; break;
-+ case V8HImode: ftype = void_ftype_pv8hi_v8hi_v8hi; break;
-+ case V4SImode: ftype = void_ftype_pv4si_v4si_v4si; break;
-+ case V4SFmode: ftype = void_ftype_pv4sf_v4sf_v4sf; break;
-+ case V2DImode: ftype = void_ftype_pv2di_v2di_v2di; break;
-+ default: gcc_unreachable ();
-+ }
-+ }
-+ break;
-+
-+ case NEON_REINTERP:
-+ {
-+ /* We iterate over 5 doubleword types, then 5 quadword
-+ types. */
-+ int rhs = d->mode % 5;
-+ switch (insn_data[d->code].operand[0].mode)
-+ {
-+ case V8QImode: ftype = reinterp_ftype_dreg[0][rhs]; break;
-+ case V4HImode: ftype = reinterp_ftype_dreg[1][rhs]; break;
-+ case V2SImode: ftype = reinterp_ftype_dreg[2][rhs]; break;
-+ case V2SFmode: ftype = reinterp_ftype_dreg[3][rhs]; break;
-+ case DImode: ftype = reinterp_ftype_dreg[4][rhs]; break;
-+ case V16QImode: ftype = reinterp_ftype_qreg[0][rhs]; break;
-+ case V8HImode: ftype = reinterp_ftype_qreg[1][rhs]; break;
-+ case V4SImode: ftype = reinterp_ftype_qreg[2][rhs]; break;
-+ case V4SFmode: ftype = reinterp_ftype_qreg[3][rhs]; break;
-+ case V2DImode: ftype = reinterp_ftype_qreg[4][rhs]; break;
-+ default: gcc_unreachable ();
-+ }
-+ }
-+ break;
-+
-+ default:
-+ gcc_unreachable ();
-+ }
-+
-+ gcc_assert (ftype != NULL);
-+
-+ sprintf (namebuf, "__builtin_neon_%s%s", d->name, modenames[d->mode]);
-+
-+ decl = add_builtin_function (namebuf, ftype, fcode, BUILT_IN_MD, NULL,
-+ NULL_TREE);
-+ arm_builtin_decls[fcode] = decl;
-+ }
-+}
-+
-+#define def_mbuiltin(MASK, NAME, TYPE, CODE) \
-+ do \
-+ { \
-+ if ((MASK) & insn_flags) \
-+ { \
-+ tree bdecl; \
-+ bdecl = add_builtin_function ((NAME), (TYPE), (CODE), \
-+ BUILT_IN_MD, NULL, NULL_TREE); \
-+ arm_builtin_decls[CODE] = bdecl; \
-+ } \
-+ } \
-+ while (0)
-+
-+struct builtin_description
-+{
-+ const unsigned int mask;
-+ const enum insn_code icode;
-+ const char * const name;
-+ const enum arm_builtins code;
-+ const enum rtx_code comparison;
-+ const unsigned int flag;
-+};
-+
-+static const struct builtin_description bdesc_2arg[] =
-+{
-+#define IWMMXT_BUILTIN(code, string, builtin) \
-+ { FL_IWMMXT, CODE_FOR_##code, "__builtin_arm_" string, \
-+ ARM_BUILTIN_##builtin, UNKNOWN, 0 },
-+
-+ IWMMXT_BUILTIN (addv8qi3, "waddb", WADDB)
-+ IWMMXT_BUILTIN (addv4hi3, "waddh", WADDH)
-+ IWMMXT_BUILTIN (addv2si3, "waddw", WADDW)
-+ IWMMXT_BUILTIN (subv8qi3, "wsubb", WSUBB)
-+ IWMMXT_BUILTIN (subv4hi3, "wsubh", WSUBH)
-+ IWMMXT_BUILTIN (subv2si3, "wsubw", WSUBW)
-+ IWMMXT_BUILTIN (ssaddv8qi3, "waddbss", WADDSSB)
-+ IWMMXT_BUILTIN (ssaddv4hi3, "waddhss", WADDSSH)
-+ IWMMXT_BUILTIN (ssaddv2si3, "waddwss", WADDSSW)
-+ IWMMXT_BUILTIN (sssubv8qi3, "wsubbss", WSUBSSB)
-+ IWMMXT_BUILTIN (sssubv4hi3, "wsubhss", WSUBSSH)
-+ IWMMXT_BUILTIN (sssubv2si3, "wsubwss", WSUBSSW)
-+ IWMMXT_BUILTIN (usaddv8qi3, "waddbus", WADDUSB)
-+ IWMMXT_BUILTIN (usaddv4hi3, "waddhus", WADDUSH)
-+ IWMMXT_BUILTIN (usaddv2si3, "waddwus", WADDUSW)
-+ IWMMXT_BUILTIN (ussubv8qi3, "wsubbus", WSUBUSB)
-+ IWMMXT_BUILTIN (ussubv4hi3, "wsubhus", WSUBUSH)
-+ IWMMXT_BUILTIN (ussubv2si3, "wsubwus", WSUBUSW)
-+ IWMMXT_BUILTIN (mulv4hi3, "wmulul", WMULUL)
-+ IWMMXT_BUILTIN (smulv4hi3_highpart, "wmulsm", WMULSM)
-+ IWMMXT_BUILTIN (umulv4hi3_highpart, "wmulum", WMULUM)
-+ IWMMXT_BUILTIN (eqv8qi3, "wcmpeqb", WCMPEQB)
-+ IWMMXT_BUILTIN (eqv4hi3, "wcmpeqh", WCMPEQH)
-+ IWMMXT_BUILTIN (eqv2si3, "wcmpeqw", WCMPEQW)
-+ IWMMXT_BUILTIN (gtuv8qi3, "wcmpgtub", WCMPGTUB)
-+ IWMMXT_BUILTIN (gtuv4hi3, "wcmpgtuh", WCMPGTUH)
-+ IWMMXT_BUILTIN (gtuv2si3, "wcmpgtuw", WCMPGTUW)
-+ IWMMXT_BUILTIN (gtv8qi3, "wcmpgtsb", WCMPGTSB)
-+ IWMMXT_BUILTIN (gtv4hi3, "wcmpgtsh", WCMPGTSH)
-+ IWMMXT_BUILTIN (gtv2si3, "wcmpgtsw", WCMPGTSW)
-+ IWMMXT_BUILTIN (umaxv8qi3, "wmaxub", WMAXUB)
-+ IWMMXT_BUILTIN (smaxv8qi3, "wmaxsb", WMAXSB)
-+ IWMMXT_BUILTIN (umaxv4hi3, "wmaxuh", WMAXUH)
-+ IWMMXT_BUILTIN (smaxv4hi3, "wmaxsh", WMAXSH)
-+ IWMMXT_BUILTIN (umaxv2si3, "wmaxuw", WMAXUW)
-+ IWMMXT_BUILTIN (smaxv2si3, "wmaxsw", WMAXSW)
-+ IWMMXT_BUILTIN (uminv8qi3, "wminub", WMINUB)
-+ IWMMXT_BUILTIN (sminv8qi3, "wminsb", WMINSB)
-+ IWMMXT_BUILTIN (uminv4hi3, "wminuh", WMINUH)
-+ IWMMXT_BUILTIN (sminv4hi3, "wminsh", WMINSH)
-+ IWMMXT_BUILTIN (uminv2si3, "wminuw", WMINUW)
-+ IWMMXT_BUILTIN (sminv2si3, "wminsw", WMINSW)
-+ IWMMXT_BUILTIN (iwmmxt_anddi3, "wand", WAND)
-+ IWMMXT_BUILTIN (iwmmxt_nanddi3, "wandn", WANDN)
-+ IWMMXT_BUILTIN (iwmmxt_iordi3, "wor", WOR)
-+ IWMMXT_BUILTIN (iwmmxt_xordi3, "wxor", WXOR)
-+ IWMMXT_BUILTIN (iwmmxt_uavgv8qi3, "wavg2b", WAVG2B)
-+ IWMMXT_BUILTIN (iwmmxt_uavgv4hi3, "wavg2h", WAVG2H)
-+ IWMMXT_BUILTIN (iwmmxt_uavgrndv8qi3, "wavg2br", WAVG2BR)
-+ IWMMXT_BUILTIN (iwmmxt_uavgrndv4hi3, "wavg2hr", WAVG2HR)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckilb, "wunpckilb", WUNPCKILB)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckilh, "wunpckilh", WUNPCKILH)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckilw, "wunpckilw", WUNPCKILW)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckihb, "wunpckihb", WUNPCKIHB)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckihh, "wunpckihh", WUNPCKIHH)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckihw, "wunpckihw", WUNPCKIHW)
-+ IWMMXT_BUILTIN (iwmmxt_wmadds, "wmadds", WMADDS)
-+ IWMMXT_BUILTIN (iwmmxt_wmaddu, "wmaddu", WMADDU)
-+
-+#define IWMMXT_BUILTIN2(code, builtin) \
-+ { FL_IWMMXT, CODE_FOR_##code, NULL, ARM_BUILTIN_##builtin, UNKNOWN, 0 },
-+
-+ IWMMXT_BUILTIN2 (iwmmxt_wpackhss, WPACKHSS)
-+ IWMMXT_BUILTIN2 (iwmmxt_wpackwss, WPACKWSS)
-+ IWMMXT_BUILTIN2 (iwmmxt_wpackdss, WPACKDSS)
-+ IWMMXT_BUILTIN2 (iwmmxt_wpackhus, WPACKHUS)
-+ IWMMXT_BUILTIN2 (iwmmxt_wpackwus, WPACKWUS)
-+ IWMMXT_BUILTIN2 (iwmmxt_wpackdus, WPACKDUS)
-+ IWMMXT_BUILTIN2 (ashlv4hi3_di, WSLLH)
-+ IWMMXT_BUILTIN2 (ashlv4hi3_iwmmxt, WSLLHI)
-+ IWMMXT_BUILTIN2 (ashlv2si3_di, WSLLW)
-+ IWMMXT_BUILTIN2 (ashlv2si3_iwmmxt, WSLLWI)
-+ IWMMXT_BUILTIN2 (ashldi3_di, WSLLD)
-+ IWMMXT_BUILTIN2 (ashldi3_iwmmxt, WSLLDI)
-+ IWMMXT_BUILTIN2 (lshrv4hi3_di, WSRLH)
-+ IWMMXT_BUILTIN2 (lshrv4hi3_iwmmxt, WSRLHI)
-+ IWMMXT_BUILTIN2 (lshrv2si3_di, WSRLW)
-+ IWMMXT_BUILTIN2 (lshrv2si3_iwmmxt, WSRLWI)
-+ IWMMXT_BUILTIN2 (lshrdi3_di, WSRLD)
-+ IWMMXT_BUILTIN2 (lshrdi3_iwmmxt, WSRLDI)
-+ IWMMXT_BUILTIN2 (ashrv4hi3_di, WSRAH)
-+ IWMMXT_BUILTIN2 (ashrv4hi3_iwmmxt, WSRAHI)
-+ IWMMXT_BUILTIN2 (ashrv2si3_di, WSRAW)
-+ IWMMXT_BUILTIN2 (ashrv2si3_iwmmxt, WSRAWI)
-+ IWMMXT_BUILTIN2 (ashrdi3_di, WSRAD)
-+ IWMMXT_BUILTIN2 (ashrdi3_iwmmxt, WSRADI)
-+ IWMMXT_BUILTIN2 (rorv4hi3_di, WRORH)
-+ IWMMXT_BUILTIN2 (rorv4hi3, WRORHI)
-+ IWMMXT_BUILTIN2 (rorv2si3_di, WRORW)
-+ IWMMXT_BUILTIN2 (rorv2si3, WRORWI)
-+ IWMMXT_BUILTIN2 (rordi3_di, WRORD)
-+ IWMMXT_BUILTIN2 (rordi3, WRORDI)
-+ IWMMXT_BUILTIN2 (iwmmxt_wmacuz, WMACUZ)
-+ IWMMXT_BUILTIN2 (iwmmxt_wmacsz, WMACSZ)
-+};
-+
-+static const struct builtin_description bdesc_1arg[] =
-+{
-+ IWMMXT_BUILTIN (iwmmxt_tmovmskb, "tmovmskb", TMOVMSKB)
-+ IWMMXT_BUILTIN (iwmmxt_tmovmskh, "tmovmskh", TMOVMSKH)
-+ IWMMXT_BUILTIN (iwmmxt_tmovmskw, "tmovmskw", TMOVMSKW)
-+ IWMMXT_BUILTIN (iwmmxt_waccb, "waccb", WACCB)
-+ IWMMXT_BUILTIN (iwmmxt_wacch, "wacch", WACCH)
-+ IWMMXT_BUILTIN (iwmmxt_waccw, "waccw", WACCW)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckehub, "wunpckehub", WUNPCKEHUB)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckehuh, "wunpckehuh", WUNPCKEHUH)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckehuw, "wunpckehuw", WUNPCKEHUW)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckehsb, "wunpckehsb", WUNPCKEHSB)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckehsh, "wunpckehsh", WUNPCKEHSH)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckehsw, "wunpckehsw", WUNPCKEHSW)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckelub, "wunpckelub", WUNPCKELUB)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckeluh, "wunpckeluh", WUNPCKELUH)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckeluw, "wunpckeluw", WUNPCKELUW)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckelsb, "wunpckelsb", WUNPCKELSB)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckelsh, "wunpckelsh", WUNPCKELSH)
-+ IWMMXT_BUILTIN (iwmmxt_wunpckelsw, "wunpckelsw", WUNPCKELSW)
-+};
-+
-+/* Set up all the iWMMXt builtins. This is not called if
-+ TARGET_IWMMXT is zero. */
-+
-+static void
-+arm_init_iwmmxt_builtins (void)
-+{
-+ const struct builtin_description * d;
-+ size_t i;
-+ tree endlink = void_list_node;
-+
-+ tree V2SI_type_node = build_vector_type_for_mode (intSI_type_node, V2SImode);
-+ tree V4HI_type_node = build_vector_type_for_mode (intHI_type_node, V4HImode);
-+ tree V8QI_type_node = build_vector_type_for_mode (intQI_type_node, V8QImode);
-+
-+ tree int_ftype_int
-+ = build_function_type (integer_type_node,
-+ tree_cons (NULL_TREE, integer_type_node, endlink));
-+ tree v8qi_ftype_v8qi_v8qi_int
-+ = build_function_type (V8QI_type_node,
-+ tree_cons (NULL_TREE, V8QI_type_node,
-+ tree_cons (NULL_TREE, V8QI_type_node,
-+ tree_cons (NULL_TREE,
-+ integer_type_node,
-+ endlink))));
-+ tree v4hi_ftype_v4hi_int
-+ = build_function_type (V4HI_type_node,
-+ tree_cons (NULL_TREE, V4HI_type_node,
-+ tree_cons (NULL_TREE, integer_type_node,
-+ endlink)));
-+ tree v2si_ftype_v2si_int
-+ = build_function_type (V2SI_type_node,
-+ tree_cons (NULL_TREE, V2SI_type_node,
-+ tree_cons (NULL_TREE, integer_type_node,
-+ endlink)));
-+ tree v2si_ftype_di_di
-+ = build_function_type (V2SI_type_node,
-+ tree_cons (NULL_TREE, long_long_integer_type_node,
-+ tree_cons (NULL_TREE,
-+ long_long_integer_type_node,
-+ endlink)));
-+ tree di_ftype_di_int
-+ = build_function_type (long_long_integer_type_node,
-+ tree_cons (NULL_TREE, long_long_integer_type_node,
-+ tree_cons (NULL_TREE, integer_type_node,
-+ endlink)));
-+ tree di_ftype_di_int_int
-+ = build_function_type (long_long_integer_type_node,
-+ tree_cons (NULL_TREE, long_long_integer_type_node,
-+ tree_cons (NULL_TREE, integer_type_node,
-+ tree_cons (NULL_TREE,
-+ integer_type_node,
-+ endlink))));
-+ tree int_ftype_v8qi
-+ = build_function_type (integer_type_node,
-+ tree_cons (NULL_TREE, V8QI_type_node,
-+ endlink));
-+ tree int_ftype_v4hi
-+ = build_function_type (integer_type_node,
-+ tree_cons (NULL_TREE, V4HI_type_node,
-+ endlink));
-+ tree int_ftype_v2si
-+ = build_function_type (integer_type_node,
-+ tree_cons (NULL_TREE, V2SI_type_node,
-+ endlink));
-+ tree int_ftype_v8qi_int
-+ = build_function_type (integer_type_node,
-+ tree_cons (NULL_TREE, V8QI_type_node,
-+ tree_cons (NULL_TREE, integer_type_node,
-+ endlink)));
-+ tree int_ftype_v4hi_int
-+ = build_function_type (integer_type_node,
-+ tree_cons (NULL_TREE, V4HI_type_node,
-+ tree_cons (NULL_TREE, integer_type_node,
-+ endlink)));
-+ tree int_ftype_v2si_int
-+ = build_function_type (integer_type_node,
-+ tree_cons (NULL_TREE, V2SI_type_node,
-+ tree_cons (NULL_TREE, integer_type_node,
-+ endlink)));
-+ tree v8qi_ftype_v8qi_int_int
-+ = build_function_type (V8QI_type_node,
-+ tree_cons (NULL_TREE, V8QI_type_node,
-+ tree_cons (NULL_TREE, integer_type_node,
-+ tree_cons (NULL_TREE,
-+ integer_type_node,
-+ endlink))));
-+ tree v4hi_ftype_v4hi_int_int
-+ = build_function_type (V4HI_type_node,
-+ tree_cons (NULL_TREE, V4HI_type_node,
-+ tree_cons (NULL_TREE, integer_type_node,
-+ tree_cons (NULL_TREE,
-+ integer_type_node,
-+ endlink))));
-+ tree v2si_ftype_v2si_int_int
-+ = build_function_type (V2SI_type_node,
-+ tree_cons (NULL_TREE, V2SI_type_node,
-+ tree_cons (NULL_TREE, integer_type_node,
-+ tree_cons (NULL_TREE,
-+ integer_type_node,
-+ endlink))));
-+ /* Miscellaneous. */
-+ tree v8qi_ftype_v4hi_v4hi
-+ = build_function_type (V8QI_type_node,
-+ tree_cons (NULL_TREE, V4HI_type_node,
-+ tree_cons (NULL_TREE, V4HI_type_node,
-+ endlink)));
-+ tree v4hi_ftype_v2si_v2si
-+ = build_function_type (V4HI_type_node,
-+ tree_cons (NULL_TREE, V2SI_type_node,
-+ tree_cons (NULL_TREE, V2SI_type_node,
-+ endlink)));
-+ tree v2si_ftype_v4hi_v4hi
-+ = build_function_type (V2SI_type_node,
-+ tree_cons (NULL_TREE, V4HI_type_node,
-+ tree_cons (NULL_TREE, V4HI_type_node,
-+ endlink)));
-+ tree v2si_ftype_v8qi_v8qi
-+ = build_function_type (V2SI_type_node,
-+ tree_cons (NULL_TREE, V8QI_type_node,
-+ tree_cons (NULL_TREE, V8QI_type_node,
-+ endlink)));
-+ tree v4hi_ftype_v4hi_di
-+ = build_function_type (V4HI_type_node,
-+ tree_cons (NULL_TREE, V4HI_type_node,
-+ tree_cons (NULL_TREE,
-+ long_long_integer_type_node,
-+ endlink)));
-+ tree v2si_ftype_v2si_di
-+ = build_function_type (V2SI_type_node,
-+ tree_cons (NULL_TREE, V2SI_type_node,
-+ tree_cons (NULL_TREE,
-+ long_long_integer_type_node,
-+ endlink)));
-+ tree void_ftype_int_int
-+ = build_function_type (void_type_node,
-+ tree_cons (NULL_TREE, integer_type_node,
-+ tree_cons (NULL_TREE, integer_type_node,
-+ endlink)));
-+ tree di_ftype_void
-+ = build_function_type (long_long_unsigned_type_node, endlink);
-+ tree di_ftype_v8qi
-+ = build_function_type (long_long_integer_type_node,
-+ tree_cons (NULL_TREE, V8QI_type_node,
-+ endlink));
-+ tree di_ftype_v4hi
-+ = build_function_type (long_long_integer_type_node,
-+ tree_cons (NULL_TREE, V4HI_type_node,
-+ endlink));
-+ tree di_ftype_v2si
-+ = build_function_type (long_long_integer_type_node,
-+ tree_cons (NULL_TREE, V2SI_type_node,
-+ endlink));
-+ tree v2si_ftype_v4hi
-+ = build_function_type (V2SI_type_node,
-+ tree_cons (NULL_TREE, V4HI_type_node,
-+ endlink));
-+ tree v4hi_ftype_v8qi
-+ = build_function_type (V4HI_type_node,
-+ tree_cons (NULL_TREE, V8QI_type_node,
-+ endlink));
-+
-+ tree di_ftype_di_v4hi_v4hi
-+ = build_function_type (long_long_unsigned_type_node,
-+ tree_cons (NULL_TREE,
-+ long_long_unsigned_type_node,
-+ tree_cons (NULL_TREE, V4HI_type_node,
-+ tree_cons (NULL_TREE,
-+ V4HI_type_node,
-+ endlink))));
-+
-+ tree di_ftype_v4hi_v4hi
-+ = build_function_type (long_long_unsigned_type_node,
-+ tree_cons (NULL_TREE, V4HI_type_node,
-+ tree_cons (NULL_TREE, V4HI_type_node,
-+ endlink)));
-+
-+ /* Normal vector binops. */
-+ tree v8qi_ftype_v8qi_v8qi
-+ = build_function_type (V8QI_type_node,
-+ tree_cons (NULL_TREE, V8QI_type_node,
-+ tree_cons (NULL_TREE, V8QI_type_node,
-+ endlink)));
-+ tree v4hi_ftype_v4hi_v4hi
-+ = build_function_type (V4HI_type_node,
-+ tree_cons (NULL_TREE, V4HI_type_node,
-+ tree_cons (NULL_TREE, V4HI_type_node,
-+ endlink)));
-+ tree v2si_ftype_v2si_v2si
-+ = build_function_type (V2SI_type_node,
-+ tree_cons (NULL_TREE, V2SI_type_node,
-+ tree_cons (NULL_TREE, V2SI_type_node,
-+ endlink)));
-+ tree di_ftype_di_di
-+ = build_function_type (long_long_unsigned_type_node,
-+ tree_cons (NULL_TREE, long_long_unsigned_type_node,
-+ tree_cons (NULL_TREE,
-+ long_long_unsigned_type_node,
-+ endlink)));
-+
-+ /* Add all builtins that are more or less simple operations on two
-+ operands. */
-+ for (i = 0, d = bdesc_2arg; i < ARRAY_SIZE (bdesc_2arg); i++, d++)
-+ {
-+ /* Use one of the operands; the target can have a different mode for
-+ mask-generating compares. */
-+ enum machine_mode mode;
-+ tree type;
-+
-+ if (d->name == 0)
-+ continue;
-+
-+ mode = insn_data[d->icode].operand[1].mode;
-+
-+ switch (mode)
-+ {
-+ case V8QImode:
-+ type = v8qi_ftype_v8qi_v8qi;
-+ break;
-+ case V4HImode:
-+ type = v4hi_ftype_v4hi_v4hi;
-+ break;
-+ case V2SImode:
-+ type = v2si_ftype_v2si_v2si;
-+ break;
-+ case DImode:
-+ type = di_ftype_di_di;
-+ break;
-+
-+ default:
-+ gcc_unreachable ();
-+ }
-+
-+ def_mbuiltin (d->mask, d->name, type, d->code);
-+ }
-+
-+ /* Add the remaining MMX insns with somewhat more complicated types. */
-+#define iwmmx_mbuiltin(NAME, TYPE, CODE) \
-+ def_mbuiltin (FL_IWMMXT, "__builtin_arm_" NAME, (TYPE), \
-+ ARM_BUILTIN_ ## CODE)
-+
-+ iwmmx_mbuiltin ("wzero", di_ftype_void, WZERO);
-+ iwmmx_mbuiltin ("setwcx", void_ftype_int_int, SETWCX);
-+ iwmmx_mbuiltin ("getwcx", int_ftype_int, GETWCX);
-+
-+ iwmmx_mbuiltin ("wsllh", v4hi_ftype_v4hi_di, WSLLH);
-+ iwmmx_mbuiltin ("wsllw", v2si_ftype_v2si_di, WSLLW);
-+ iwmmx_mbuiltin ("wslld", di_ftype_di_di, WSLLD);
-+ iwmmx_mbuiltin ("wsllhi", v4hi_ftype_v4hi_int, WSLLHI);
-+ iwmmx_mbuiltin ("wsllwi", v2si_ftype_v2si_int, WSLLWI);
-+ iwmmx_mbuiltin ("wslldi", di_ftype_di_int, WSLLDI);
-+
-+ iwmmx_mbuiltin ("wsrlh", v4hi_ftype_v4hi_di, WSRLH);
-+ iwmmx_mbuiltin ("wsrlw", v2si_ftype_v2si_di, WSRLW);
-+ iwmmx_mbuiltin ("wsrld", di_ftype_di_di, WSRLD);
-+ iwmmx_mbuiltin ("wsrlhi", v4hi_ftype_v4hi_int, WSRLHI);
-+ iwmmx_mbuiltin ("wsrlwi", v2si_ftype_v2si_int, WSRLWI);
-+ iwmmx_mbuiltin ("wsrldi", di_ftype_di_int, WSRLDI);
-+
-+ iwmmx_mbuiltin ("wsrah", v4hi_ftype_v4hi_di, WSRAH);
-+ iwmmx_mbuiltin ("wsraw", v2si_ftype_v2si_di, WSRAW);
-+ iwmmx_mbuiltin ("wsrad", di_ftype_di_di, WSRAD);
-+ iwmmx_mbuiltin ("wsrahi", v4hi_ftype_v4hi_int, WSRAHI);
-+ iwmmx_mbuiltin ("wsrawi", v2si_ftype_v2si_int, WSRAWI);
-+ iwmmx_mbuiltin ("wsradi", di_ftype_di_int, WSRADI);
-+
-+ iwmmx_mbuiltin ("wrorh", v4hi_ftype_v4hi_di, WRORH);
-+ iwmmx_mbuiltin ("wrorw", v2si_ftype_v2si_di, WRORW);
-+ iwmmx_mbuiltin ("wrord", di_ftype_di_di, WRORD);
-+ iwmmx_mbuiltin ("wrorhi", v4hi_ftype_v4hi_int, WRORHI);
-+ iwmmx_mbuiltin ("wrorwi", v2si_ftype_v2si_int, WRORWI);
-+ iwmmx_mbuiltin ("wrordi", di_ftype_di_int, WRORDI);
-+
-+ iwmmx_mbuiltin ("wshufh", v4hi_ftype_v4hi_int, WSHUFH);
-+
-+ iwmmx_mbuiltin ("wsadb", v2si_ftype_v8qi_v8qi, WSADB);
-+ iwmmx_mbuiltin ("wsadh", v2si_ftype_v4hi_v4hi, WSADH);
-+ iwmmx_mbuiltin ("wsadbz", v2si_ftype_v8qi_v8qi, WSADBZ);
-+ iwmmx_mbuiltin ("wsadhz", v2si_ftype_v4hi_v4hi, WSADHZ);
-+
-+ iwmmx_mbuiltin ("textrmsb", int_ftype_v8qi_int, TEXTRMSB);
-+ iwmmx_mbuiltin ("textrmsh", int_ftype_v4hi_int, TEXTRMSH);
-+ iwmmx_mbuiltin ("textrmsw", int_ftype_v2si_int, TEXTRMSW);
-+ iwmmx_mbuiltin ("textrmub", int_ftype_v8qi_int, TEXTRMUB);
-+ iwmmx_mbuiltin ("textrmuh", int_ftype_v4hi_int, TEXTRMUH);
-+ iwmmx_mbuiltin ("textrmuw", int_ftype_v2si_int, TEXTRMUW);
-+ iwmmx_mbuiltin ("tinsrb", v8qi_ftype_v8qi_int_int, TINSRB);
-+ iwmmx_mbuiltin ("tinsrh", v4hi_ftype_v4hi_int_int, TINSRH);
-+ iwmmx_mbuiltin ("tinsrw", v2si_ftype_v2si_int_int, TINSRW);
-+
-+ iwmmx_mbuiltin ("waccb", di_ftype_v8qi, WACCB);
-+ iwmmx_mbuiltin ("wacch", di_ftype_v4hi, WACCH);
-+ iwmmx_mbuiltin ("waccw", di_ftype_v2si, WACCW);
-+
-+ iwmmx_mbuiltin ("tmovmskb", int_ftype_v8qi, TMOVMSKB);
-+ iwmmx_mbuiltin ("tmovmskh", int_ftype_v4hi, TMOVMSKH);
-+ iwmmx_mbuiltin ("tmovmskw", int_ftype_v2si, TMOVMSKW);
-+
-+ iwmmx_mbuiltin ("wpackhss", v8qi_ftype_v4hi_v4hi, WPACKHSS);
-+ iwmmx_mbuiltin ("wpackhus", v8qi_ftype_v4hi_v4hi, WPACKHUS);
-+ iwmmx_mbuiltin ("wpackwus", v4hi_ftype_v2si_v2si, WPACKWUS);
-+ iwmmx_mbuiltin ("wpackwss", v4hi_ftype_v2si_v2si, WPACKWSS);
-+ iwmmx_mbuiltin ("wpackdus", v2si_ftype_di_di, WPACKDUS);
-+ iwmmx_mbuiltin ("wpackdss", v2si_ftype_di_di, WPACKDSS);
-+
-+ iwmmx_mbuiltin ("wunpckehub", v4hi_ftype_v8qi, WUNPCKEHUB);
-+ iwmmx_mbuiltin ("wunpckehuh", v2si_ftype_v4hi, WUNPCKEHUH);
-+ iwmmx_mbuiltin ("wunpckehuw", di_ftype_v2si, WUNPCKEHUW);
-+ iwmmx_mbuiltin ("wunpckehsb", v4hi_ftype_v8qi, WUNPCKEHSB);
-+ iwmmx_mbuiltin ("wunpckehsh", v2si_ftype_v4hi, WUNPCKEHSH);
-+ iwmmx_mbuiltin ("wunpckehsw", di_ftype_v2si, WUNPCKEHSW);
-+ iwmmx_mbuiltin ("wunpckelub", v4hi_ftype_v8qi, WUNPCKELUB);
-+ iwmmx_mbuiltin ("wunpckeluh", v2si_ftype_v4hi, WUNPCKELUH);
-+ iwmmx_mbuiltin ("wunpckeluw", di_ftype_v2si, WUNPCKELUW);
-+ iwmmx_mbuiltin ("wunpckelsb", v4hi_ftype_v8qi, WUNPCKELSB);
-+ iwmmx_mbuiltin ("wunpckelsh", v2si_ftype_v4hi, WUNPCKELSH);
-+ iwmmx_mbuiltin ("wunpckelsw", di_ftype_v2si, WUNPCKELSW);
-+
-+ iwmmx_mbuiltin ("wmacs", di_ftype_di_v4hi_v4hi, WMACS);
-+ iwmmx_mbuiltin ("wmacsz", di_ftype_v4hi_v4hi, WMACSZ);
-+ iwmmx_mbuiltin ("wmacu", di_ftype_di_v4hi_v4hi, WMACU);
-+ iwmmx_mbuiltin ("wmacuz", di_ftype_v4hi_v4hi, WMACUZ);
-+
-+ iwmmx_mbuiltin ("walign", v8qi_ftype_v8qi_v8qi_int, WALIGN);
-+ iwmmx_mbuiltin ("tmia", di_ftype_di_int_int, TMIA);
-+ iwmmx_mbuiltin ("tmiaph", di_ftype_di_int_int, TMIAPH);
-+ iwmmx_mbuiltin ("tmiabb", di_ftype_di_int_int, TMIABB);
-+ iwmmx_mbuiltin ("tmiabt", di_ftype_di_int_int, TMIABT);
-+ iwmmx_mbuiltin ("tmiatb", di_ftype_di_int_int, TMIATB);
-+ iwmmx_mbuiltin ("tmiatt", di_ftype_di_int_int, TMIATT);
-+
-+#undef iwmmx_mbuiltin
-+}
-+
-+static void
-+arm_init_tls_builtins (void)
-+{
-+ tree ftype, decl;
-+
-+ ftype = build_function_type (ptr_type_node, void_list_node);
-+ decl = add_builtin_function ("__builtin_thread_pointer", ftype,
-+ ARM_BUILTIN_THREAD_POINTER, BUILT_IN_MD,
-+ NULL, NULL_TREE);
-+ TREE_NOTHROW (decl) = 1;
-+ TREE_READONLY (decl) = 1;
-+ arm_builtin_decls[ARM_BUILTIN_THREAD_POINTER] = decl;
- }
-
- static void
-@@ -19479,6 +19662,17 @@
- arm_init_fp16_builtins ();
- }
-
-+/* Return the ARM builtin for CODE. */
-+
-+static tree
-+arm_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED)
-+{
-+ if (code >= ARM_BUILTIN_MAX)
-+ return error_mark_node;
-+
-+ return arm_builtin_decls[code];
-+}
-+
- /* Implement TARGET_INVALID_PARAMETER_TYPE. */
-
- static const char *
-@@ -19630,58 +19824,6 @@
- return target;
- }
-
--static int
--neon_builtin_compare (const void *a, const void *b)
--{
-- const neon_builtin_datum *const key = (const neon_builtin_datum *) a;
-- const neon_builtin_datum *const memb = (const neon_builtin_datum *) b;
-- unsigned int soughtcode = key->base_fcode;
--
-- if (soughtcode >= memb->base_fcode
-- && soughtcode < memb->base_fcode + memb->num_vars)
-- return 0;
-- else if (soughtcode < memb->base_fcode)
-- return -1;
-- else
-- return 1;
--}
--
--static enum insn_code
--locate_neon_builtin_icode (int fcode, neon_itype *itype,
-- enum neon_builtin_type_bits *type_bit)
--{
-- neon_builtin_datum key
-- = { NULL, (neon_itype) 0, 0, { CODE_FOR_nothing }, 0, 0 };
-- neon_builtin_datum *found;
-- int idx, type, ntypes;
--
-- key.base_fcode = fcode;
-- found = (neon_builtin_datum *)
-- bsearch (&key, &neon_builtin_data[0], ARRAY_SIZE (neon_builtin_data),
-- sizeof (neon_builtin_data[0]), neon_builtin_compare);
-- gcc_assert (found);
-- idx = fcode - (int) found->base_fcode;
-- gcc_assert (idx >= 0 && idx < T_MAX && idx < (int)found->num_vars);
--
-- if (itype)
-- *itype = found->itype;
--
-- if (type_bit)
-- {
-- ntypes = 0;
-- for (type = 0; type < T_MAX; type++)
-- if (found->bits & (1 << type))
-- {
-- if (ntypes == idx)
-- break;
-- ntypes++;
-- }
-- gcc_assert (type < T_MAX);
-- *type_bit = (enum neon_builtin_type_bits) (1 << type);
-- }
-- return found->codes[idx];
--}
--
- typedef enum {
- NEON_ARG_COPY_TO_REG,
- NEON_ARG_CONSTANT,
-@@ -19695,14 +19837,14 @@
- and return an expression for the accessed memory.
-
- The intrinsic function operates on a block of registers that has
-- mode REG_MODE. This block contains vectors of type TYPE_BIT.
-+ mode REG_MODE. This block contains vectors of type TYPE_MODE.
- The function references the memory at EXP in mode MEM_MODE;
- this mode may be BLKmode if no more suitable mode is available. */
-
- static tree
- neon_dereference_pointer (tree exp, enum machine_mode mem_mode,
- enum machine_mode reg_mode,
-- enum neon_builtin_type_bits type_bit)
-+ neon_builtin_type_mode type_mode)
- {
- HOST_WIDE_INT reg_size, vector_size, nvectors, nelems;
- tree elem_type, upper_bound, array_type;
-@@ -19711,8 +19853,8 @@
- reg_size = GET_MODE_SIZE (reg_mode);
-
- /* Work out the size of each vector in bytes. */
-- gcc_assert (type_bit & (T_DREG | T_QREG));
-- vector_size = (type_bit & T_QREG ? 16 : 8);
-+ gcc_assert (TYPE_MODE_BIT (type_mode) & (TB_DREG | TB_QREG));
-+ vector_size = (TYPE_MODE_BIT (type_mode) & TB_QREG ? 16 : 8);
-
- /* Work out how many vectors there are. */
- gcc_assert (reg_size % vector_size == 0);
-@@ -19743,7 +19885,7 @@
- /* Expand a Neon builtin. */
- static rtx
- arm_expand_neon_args (rtx target, int icode, int have_retval,
-- enum neon_builtin_type_bits type_bit,
-+ neon_builtin_type_mode type_mode,
- tree exp, ...)
- {
- va_list ap;
-@@ -19779,7 +19921,7 @@
- {
- other_mode = insn_data[icode].operand[1 - opno].mode;
- arg[argc] = neon_dereference_pointer (arg[argc], mode[argc],
-- other_mode, type_bit);
-+ other_mode, type_mode);
- }
- op[argc] = expand_normal (arg[argc]);
-
-@@ -19889,16 +20031,17 @@
- static rtx
- arm_expand_neon_builtin (int fcode, tree exp, rtx target)
- {
-- neon_itype itype;
-- enum neon_builtin_type_bits type_bit;
-- enum insn_code icode = locate_neon_builtin_icode (fcode, &itype, &type_bit);
-+ neon_builtin_datum *d = &neon_builtin_data[fcode - ARM_BUILTIN_NEON_BASE];
-+ neon_itype itype = d->itype;
-+ enum insn_code icode = d->code;
-+ neon_builtin_type_mode type_mode = d->mode;
-
- switch (itype)
- {
- case NEON_UNOP:
- case NEON_CONVERT:
- case NEON_DUPLANE:
-- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
-+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
- NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT, NEON_ARG_STOP);
-
- case NEON_BINOP:
-@@ -19908,89 +20051,89 @@
- case NEON_SCALARMULH:
- case NEON_SHIFTINSERT:
- case NEON_LOGICBINOP:
-- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
-+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
- NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT,
- NEON_ARG_STOP);
-
- case NEON_TERNOP:
-- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
-+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
- NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG,
- NEON_ARG_CONSTANT, NEON_ARG_STOP);
-
- case NEON_GETLANE:
- case NEON_FIXCONV:
- case NEON_SHIFTIMM:
-- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
-+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
- NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT, NEON_ARG_CONSTANT,
- NEON_ARG_STOP);
-
- case NEON_CREATE:
-- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
-+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
- NEON_ARG_COPY_TO_REG, NEON_ARG_STOP);
-
- case NEON_DUP:
- case NEON_SPLIT:
- case NEON_REINTERP:
-- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
-+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
- NEON_ARG_COPY_TO_REG, NEON_ARG_STOP);
-
- case NEON_COMBINE:
- case NEON_VTBL:
-- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
-+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
- NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_STOP);
-
- case NEON_RESULTPAIR:
-- return arm_expand_neon_args (target, icode, 0, type_bit, exp,
-+ return arm_expand_neon_args (target, icode, 0, type_mode, exp,
- NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG,
- NEON_ARG_STOP);
-
- case NEON_LANEMUL:
- case NEON_LANEMULL:
- case NEON_LANEMULH:
-- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
-+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
- NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT,
- NEON_ARG_CONSTANT, NEON_ARG_STOP);
-
- case NEON_LANEMAC:
-- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
-+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
- NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG,
- NEON_ARG_CONSTANT, NEON_ARG_CONSTANT, NEON_ARG_STOP);
-
- case NEON_SHIFTACC:
-- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
-+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
- NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT,
- NEON_ARG_CONSTANT, NEON_ARG_STOP);
-
- case NEON_SCALARMAC:
-- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
-+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
- NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG,
- NEON_ARG_CONSTANT, NEON_ARG_STOP);
-
- case NEON_SELECT:
- case NEON_VTBX:
-- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
-+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
- NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG,
- NEON_ARG_STOP);
-
- case NEON_LOAD1:
- case NEON_LOADSTRUCT:
-- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
-+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
- NEON_ARG_MEMORY, NEON_ARG_STOP);
-
- case NEON_LOAD1LANE:
- case NEON_LOADSTRUCTLANE:
-- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
-+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
- NEON_ARG_MEMORY, NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT,
- NEON_ARG_STOP);
-
- case NEON_STORE1:
- case NEON_STORESTRUCT:
-- return arm_expand_neon_args (target, icode, 0, type_bit, exp,
-+ return arm_expand_neon_args (target, icode, 0, type_mode, exp,
- NEON_ARG_MEMORY, NEON_ARG_COPY_TO_REG, NEON_ARG_STOP);
-
- case NEON_STORE1LANE:
- case NEON_STORESTRUCTLANE:
-- return arm_expand_neon_args (target, icode, 0, type_bit, exp,
-+ return arm_expand_neon_args (target, icode, 0, type_mode, exp,
- NEON_ARG_MEMORY, NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT,
- NEON_ARG_STOP);
- }
-
-=== modified file 'gcc/config/arm/arm.h'
---- old/gcc/config/arm/arm.h 2011-08-13 08:32:32 +0000
-+++ new/gcc/config/arm/arm.h 2011-08-24 17:35:16 +0000
-@@ -2269,178 +2269,6 @@
- : arm_gen_return_addr_mask ())
-
-
--/* Neon defines builtins from ARM_BUILTIN_MAX upwards, though they don't have
-- symbolic names defined here (which would require too much duplication).
-- FIXME? */
--enum arm_builtins
--{
-- ARM_BUILTIN_GETWCX,
-- ARM_BUILTIN_SETWCX,
--
-- ARM_BUILTIN_WZERO,
--
-- ARM_BUILTIN_WAVG2BR,
-- ARM_BUILTIN_WAVG2HR,
-- ARM_BUILTIN_WAVG2B,
-- ARM_BUILTIN_WAVG2H,
--
-- ARM_BUILTIN_WACCB,
-- ARM_BUILTIN_WACCH,
-- ARM_BUILTIN_WACCW,
--
-- ARM_BUILTIN_WMACS,
-- ARM_BUILTIN_WMACSZ,
-- ARM_BUILTIN_WMACU,
-- ARM_BUILTIN_WMACUZ,
--
-- ARM_BUILTIN_WSADB,
-- ARM_BUILTIN_WSADBZ,
-- ARM_BUILTIN_WSADH,
-- ARM_BUILTIN_WSADHZ,
--
-- ARM_BUILTIN_WALIGN,
--
-- ARM_BUILTIN_TMIA,
-- ARM_BUILTIN_TMIAPH,
-- ARM_BUILTIN_TMIABB,
-- ARM_BUILTIN_TMIABT,
-- ARM_BUILTIN_TMIATB,
-- ARM_BUILTIN_TMIATT,
--
-- ARM_BUILTIN_TMOVMSKB,
-- ARM_BUILTIN_TMOVMSKH,
-- ARM_BUILTIN_TMOVMSKW,
--
-- ARM_BUILTIN_TBCSTB,
-- ARM_BUILTIN_TBCSTH,
-- ARM_BUILTIN_TBCSTW,
--
-- ARM_BUILTIN_WMADDS,
-- ARM_BUILTIN_WMADDU,
--
-- ARM_BUILTIN_WPACKHSS,
-- ARM_BUILTIN_WPACKWSS,
-- ARM_BUILTIN_WPACKDSS,
-- ARM_BUILTIN_WPACKHUS,
-- ARM_BUILTIN_WPACKWUS,
-- ARM_BUILTIN_WPACKDUS,
--
-- ARM_BUILTIN_WADDB,
-- ARM_BUILTIN_WADDH,
-- ARM_BUILTIN_WADDW,
-- ARM_BUILTIN_WADDSSB,
-- ARM_BUILTIN_WADDSSH,
-- ARM_BUILTIN_WADDSSW,
-- ARM_BUILTIN_WADDUSB,
-- ARM_BUILTIN_WADDUSH,
-- ARM_BUILTIN_WADDUSW,
-- ARM_BUILTIN_WSUBB,
-- ARM_BUILTIN_WSUBH,
-- ARM_BUILTIN_WSUBW,
-- ARM_BUILTIN_WSUBSSB,
-- ARM_BUILTIN_WSUBSSH,
-- ARM_BUILTIN_WSUBSSW,
-- ARM_BUILTIN_WSUBUSB,
-- ARM_BUILTIN_WSUBUSH,
-- ARM_BUILTIN_WSUBUSW,
--
-- ARM_BUILTIN_WAND,
-- ARM_BUILTIN_WANDN,
-- ARM_BUILTIN_WOR,
-- ARM_BUILTIN_WXOR,
--
-- ARM_BUILTIN_WCMPEQB,
-- ARM_BUILTIN_WCMPEQH,
-- ARM_BUILTIN_WCMPEQW,
-- ARM_BUILTIN_WCMPGTUB,
-- ARM_BUILTIN_WCMPGTUH,
-- ARM_BUILTIN_WCMPGTUW,
-- ARM_BUILTIN_WCMPGTSB,
-- ARM_BUILTIN_WCMPGTSH,
-- ARM_BUILTIN_WCMPGTSW,
--
-- ARM_BUILTIN_TEXTRMSB,
-- ARM_BUILTIN_TEXTRMSH,
-- ARM_BUILTIN_TEXTRMSW,
-- ARM_BUILTIN_TEXTRMUB,
-- ARM_BUILTIN_TEXTRMUH,
-- ARM_BUILTIN_TEXTRMUW,
-- ARM_BUILTIN_TINSRB,
-- ARM_BUILTIN_TINSRH,
-- ARM_BUILTIN_TINSRW,
--
-- ARM_BUILTIN_WMAXSW,
-- ARM_BUILTIN_WMAXSH,
-- ARM_BUILTIN_WMAXSB,
-- ARM_BUILTIN_WMAXUW,
-- ARM_BUILTIN_WMAXUH,
-- ARM_BUILTIN_WMAXUB,
-- ARM_BUILTIN_WMINSW,
-- ARM_BUILTIN_WMINSH,
-- ARM_BUILTIN_WMINSB,
-- ARM_BUILTIN_WMINUW,
-- ARM_BUILTIN_WMINUH,
-- ARM_BUILTIN_WMINUB,
--
-- ARM_BUILTIN_WMULUM,
-- ARM_BUILTIN_WMULSM,
-- ARM_BUILTIN_WMULUL,
--
-- ARM_BUILTIN_PSADBH,
-- ARM_BUILTIN_WSHUFH,
--
-- ARM_BUILTIN_WSLLH,
-- ARM_BUILTIN_WSLLW,
-- ARM_BUILTIN_WSLLD,
-- ARM_BUILTIN_WSRAH,
-- ARM_BUILTIN_WSRAW,
-- ARM_BUILTIN_WSRAD,
-- ARM_BUILTIN_WSRLH,
-- ARM_BUILTIN_WSRLW,
-- ARM_BUILTIN_WSRLD,
-- ARM_BUILTIN_WRORH,
-- ARM_BUILTIN_WRORW,
-- ARM_BUILTIN_WRORD,
-- ARM_BUILTIN_WSLLHI,
-- ARM_BUILTIN_WSLLWI,
-- ARM_BUILTIN_WSLLDI,
-- ARM_BUILTIN_WSRAHI,
-- ARM_BUILTIN_WSRAWI,
-- ARM_BUILTIN_WSRADI,
-- ARM_BUILTIN_WSRLHI,
-- ARM_BUILTIN_WSRLWI,
-- ARM_BUILTIN_WSRLDI,
-- ARM_BUILTIN_WRORHI,
-- ARM_BUILTIN_WRORWI,
-- ARM_BUILTIN_WRORDI,
--
-- ARM_BUILTIN_WUNPCKIHB,
-- ARM_BUILTIN_WUNPCKIHH,
-- ARM_BUILTIN_WUNPCKIHW,
-- ARM_BUILTIN_WUNPCKILB,
-- ARM_BUILTIN_WUNPCKILH,
-- ARM_BUILTIN_WUNPCKILW,
--
-- ARM_BUILTIN_WUNPCKEHSB,
-- ARM_BUILTIN_WUNPCKEHSH,
-- ARM_BUILTIN_WUNPCKEHSW,
-- ARM_BUILTIN_WUNPCKEHUB,
-- ARM_BUILTIN_WUNPCKEHUH,
-- ARM_BUILTIN_WUNPCKEHUW,
-- ARM_BUILTIN_WUNPCKELSB,
-- ARM_BUILTIN_WUNPCKELSH,
-- ARM_BUILTIN_WUNPCKELSW,
-- ARM_BUILTIN_WUNPCKELUB,
-- ARM_BUILTIN_WUNPCKELUH,
-- ARM_BUILTIN_WUNPCKELUW,
--
-- ARM_BUILTIN_THREAD_POINTER,
--
-- ARM_BUILTIN_NEON_BASE,
--
-- ARM_BUILTIN_MAX = ARM_BUILTIN_NEON_BASE /* FIXME: Wrong! */
--};
--
- /* Do not emit .note.GNU-stack by default. */
- #ifndef NEED_INDICATE_EXEC_STACK
- #define NEED_INDICATE_EXEC_STACK 0
-